Frage von Habnefrage147, 90

Python while-Schleife neustarten?

Mein Code:

while True:

output = print ("Tippe drei Zahlen zwischen 1 und 6")

output1 = input ("Zahl 1:")
while True:
    if (int (output1) <= 6 and int (output1) >= 1):
        zahl1 = output1
        break;
    else:
        input ("Die Zahl muss zwischen 1 und 6 liegen!")

output2 = input ("Zahl 2:")
while True:
    if (int (output2) <= 6 and int (output2) >= 1):
        zahl2 = output2
        break;
    else:
        input ("Die Zahl muss zwischen 1 und 6 liegen!")

output3 = input ("Zahl 3:")
while True:
    if (int (output3) <= 6 and int (output3) >= 1):
        zahl3 = output3
        break;
    else:
        input ("Die Zahl muss zwischen 1 und 6 liegen!")

Das Problem ist jetzt, dass wenn man eine zu hohe oder zu niedrige Zahl eingibt, die Fehlermeldung zwart kommt, allerdings die Schleife nicht neustartet, also nicht nochmal nach der Zahl fragt.

Könnt ihr mir helfen?

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von holofoxx, 39

Hi Habnefrage147,

wenn der Sinn deines Programms darin besteht den Nutzer nach 3 Zahlen zu fragen und zu prüfen ob alle 3 zwischen 1 und 6 liegen dann läuft dein Programm besser so:

#/usr/bin/python
#coding: utf-8

def checkNum(num):
if 1 <= num <= 6:
pass
elif num < 1:
print "Zahl ist zu klein"
else:
print "Zahl ist zu groß"


while True:
for i in range(1, 3):
print "Geben sie 3 Zahlen 1"
num = input("Geben sie eine Zahl zwischen 1 und 6 ein: ")
num = int(num)
checkNum(num)
i += 1

Das tut das was ich oben aus deinem Code gelesen habe. Eine while True: Schleife kann startet sich von selbst immer wieder neu. Das Problem liegt in deiner Programmlogik. 

Wenn du den User außerdem nur fragen möchtest ob er wissen will ob seine Zahl größer oder kleiner als 1 bzw 6 ist, dann kann man das auch ganz viel einfacher gestalten. Soll dein Programm allerdings in einem anderen Zusammenhang wiederverwertbar sein, nimm nur die Funktion oben und nicht die while. 

Bei Fragen bin ich stets ansprechbar.

Grüße foxx

Kommentar von holofoxx ,

BTW ist die Formatierung nicht richtig. Ich habs einfach aus PyCharm kopiert. Die Indentations sind nicht richtig hier bei gf.

Kommentar von holofoxx ,
#/usr/bin/python
#coding: utf-8

def checkNum(num):
if 1 <= num <= 6:
return True
elif num < 1:
print "Zahl ist zu klein"
else:
print "Zahl ist zu groß"


while True:
print "Geben sie 3 Zahlen ein"
for i in range(1, 3):
num = input("Geben sie eine Zahl zwischen 1 und 6 ein: ")
num = int(num)
checkNum(num)
i += 1

So ist das richtig.

Antwort
von illuslash1, 60

Ich kenn mich zwar nicht mit python aus, aber ich glaube du solltest die Condition nach while schreiben.

while (output1 > 6 and output1 < 1)
Kommentar von illuslash1 ,

Ich glaube du solltest auch "output1 = input()" in die Schleife geben. Sonst kann es das nicht wiederholen.

Kommentar von LifeArtist1 ,

while True sorgt dafür, das die Schleife unendlich lang läuft. Ich denke eher, dass er in einer endlos schleife landet da er er wie du meintest output1 = input() schreiben muss anstatt überall nur input() was ja dann schließlich nicht die variable "updated" und er somit wieder beim else landet und dann immer so weiter...

Keine passende Antwort gefunden?

Fragen Sie die Community