Das Programm zur Ausgabe aller Primzahlen bis zu einer Obergrenze legt die Obergrenze im Programmtext fest. Statt alle Primzahlen bis zu einer konkreten Obergrenze auszugeben, können wir auch ein Programm zur Ausgabe aller Primzahlen bis zu einer beliebigen Obergrenze schreiben. Dazu abstrahieren wir die Zählschleife mit Hilfe einer Prozedur primes_up_to
mit einem Parameter max
.
def primes_up_to(max):
for i in range(2, max+1):
if is_prime(i):
print(i)
Nun können wir z.B. in der interaktiven Python-Shell die Anweisungen primes_up_to(100)
und primes_up_to(1000)
ausführen, um alle Primzahlen bis 100 bzw. 1000 im Terminal auszugeben.
Prozeduren haben keinen Rückgabewert, enthalten also keine return
-Anweisung. Sie können verwendet werden, um mit print
-Anweisungen komplexe Ausgaben im Terminal zu erzeugen.
Zum Beispiel gibt die folgende Prozedur den Umriss eines Quadrats aus Sternchen im Terminal aus:
def put_quadrat(size):
line = ''
for i in range(0,size):
line = line + '*'
inside = ''
for i in range(0, size-2):
inside = inside + ' '
print(line)
for i in range(0, size-2):
print('*' + inside + '*')
print(line)
Da wir das Quadrat zeilenweise ausgeben müssen, berechnen wir zunächst den oberen Rand als Zeile aus Sternchen
gegebener Länge und speichern ihn in der Variable line
. Danach berechnen wir das Innere als um zwei Zeichen kürzere
Zeile inside
aus Leerzeichen. Im Anschluss geben wir den
oberen Rand gefolgt von Zeilen, die das Innere mit Sternchen
umranden aus. Schließlich geben wir noch einmal line
als
unteren Rand aus.
Hier sind zwei Beispielausgaben dieser Prozedur in der Python-Shell:
>>> from quadrat import *
>>> put_quadrat(3)
***
* *
***
>>> put_quadrat(5)
*****
* *
* *
* *
*****
Bei der Definition der Prozedur put_quadrat
fällt eine Ähnlichkeit des Codes zur Berechnung der oberen und unteren Zeile sowie des inneren des Quadrates auf. Beide Male wird eine gegebene Zeichenkette eine bestimmte Anzahl oft wiederholt. Wir können unser Programm vereinfachen, indem wir diese Berechnung als Funktion abstrahieren und dann innerhalb von
put_quadrat
verwenden:
def repeat(times, string):
result = ''
for i in range(0, times):
result = result + string
return result
def put_quadrat(size):
print(repeat(size, '*'))
for i in range(0, size-2):
print('*' + repeat(size-2, ' ') + '*')
print(repeat(size, '*'))
Der Rückgabewert der Funktion repeat
ist eine Zeichenkette. Innerhalb der Prozedur put_quadrat
werden verschiedene
solcher Zeichenketten berechnet und mit print
-Anweisungen im Terminal ausgegeben.