@pythNeuling: Strichpunkt sollte nie verwendet werden. Es ist selten sinnvoll mehrere Anweisungen in einer Zeile stehen zu haben und dann ist der Strichpunkt auch nur ein Anweisungstrenner und kein Anweisungsabschließer, der Strichpunkt am Zeilenende gehört also auf jeden Fall weg.
n wird nach der Initialisierung nie verändert, so dass die if-Anweisung auch nie erfüllt ist. Es ist auch ungewöhlich, damit unerwartet, dass neben einer while-Bedingung noch andere Bedingungen die while-Schleife per break verlassen können, wenn es sich nicht um eine endlos-Schleife handelt.
Jetzt, wo wir kein break mehr haben, wird das was im else-Block ausgegeben wird, immer ausgegeben, das else kann also weg.
Also weniger verwirrend (weil if etwas sinnvolles macht), aber immer noch mit der gleichen Funktionalität:
Code: Alles auswählen
MAX_POWER = 20
def print_powers_of_2(n):
if n > MAX_POWER:
print n, "ist zu groß"
return
i = 0
while i <= n:
print "%d : %7d" % (i, 2**i)
i = i + 1
print n + 1, "Zweierpotenzen berechnet."
print_powers_of_2(15)
Jetzt ist aber das Beispiel für eine while-Schleife schlecht gewählt, weil jeder würde dafür eine for-Schleife nehmen:
Code: Alles auswählen
MAX_POWER = 20
def print_powers_of_2(n):
if n > MAX_POWER:
print n, "ist zu groß"
return
for i in xrange(n + 1):
print "%d : %7d" % (i, 2**i)
print n + 1, "Zweierpotenzen berechnet."
print_powers_of_2(15)
Weil Programmierer keine Überraschungen wollen, und es komplizierte break-Konstruktionen braucht, damit der else-Block etwas sinnvolles tut, ist ein else bei while-Schleifen eigentlich nie gut und existiert nur aus Konsistenzgründen.
while-Schleifen machen daher nur Sinn, wenn es nicht darum geht, trivial eine Variable hochzuzählen:
Code: Alles auswählen
def find_smallest_power_of_2(n):
i = 1
while i < n:
i *= 2
return i
print find_biggest_power_of_2(3921)