Seite 1 von 1
Programm wiederholen
Verfasst: Dienstag 5. Juni 2018, 18:40
von Sarius
Hallo,
ich würde gerne wissen wie man ein Programm wiederholt.
Das Programm ist dieses hier:
print("Willkommen zu meinen Taschenrechner!")
a = 0
x = 1
c = 1
d = 1
while x == 1:
a = 0
y = input("Welche Rechenart willst du verwenden? ")
if y == "Addieren":
while c == 1:
try:
print(int(input("Gebe die erste Zahl ein: ")) + int(input("Gebe die zweite Zahl ein: ")))
x = 0
a = 1
c = 0
except:
print("Fehler, nochmal")
elif y == "Subtrahieren":
while c == 1:
try:
print(int(input("Gebe die erste Zahl ein: ")) - int(input("Gebe die zweite Zahl ein: ")))
x = 0
a = 1
c = 0
except:
print("Fehler, nochmal")
elif y == "Multiplizieren":
while c == 1:
try:
print(int(input("Gebe die erste Zahl ein: ")) * int(input("Gebe die zweite Zahl ein: ")))
x = 0
a = 1
c = 0
except:
print("Fehler, nochmal")
elif y == "Dividieren":
while c == 1:
try:
print(int(input("Gebe die erste Zahl ein: ")) / int(input("Gebe die zweite Zahl ein: ")))
x = 0
a = 1
c = 0
except:
print("Fehler, nochmal")
elif y == "Lösungsvorschläge":
print("Hast du den Fachbegriff benutzt? Hast du auf Groß- und Kleinschreibung geachtet?")
else:
print("Fehler, für Lösungsvorschläge gebe \"Lösungsvorschläge\" ein.")
while d == 1:
if a == 1:
b = input("Möchtest du noch eine Aufgabe stellen? ")
if b == "Ja":
x = 1
a = 0
elif b == "Nein":
print("Bis zum nächsten mal!")
break
else:
print("Fehler")
Wie kann ich es schaffen, das wen man Ja eingibt das Programm von Vorne beginnt? Also das es wieder mit der Frage "Welche Rechenart willst du verwenden?" startet?
Re: Programm wiederholen
Verfasst: Dienstag 5. Juni 2018, 18:43
von ThomasL
du kennst und benutzt doch schon while-schleifen, wie wäre es damit?
Re: Programm wiederholen
Verfasst: Dienstag 5. Juni 2018, 18:49
von Sarius
ThomasL hat geschrieben: Dienstag 5. Juni 2018, 18:43
du kennst und benutzt doch schon while-schleifen, wie wäre es damit?
X müsste sich ja eigentlich auch wieder auf 1 stellen, sodass es sich wiederholt. Aber es funktioniert anscheinend nicht. Oder mache ich einen Fehler?
Re: Programm wiederholen
Verfasst: Dienstag 5. Juni 2018, 19:08
von ThomasL
das Problem für uns ist, dass wir den Code so nicht lesen können, da keine Formatierung erkennbar ist.
Bitte setzte den Code zwischen
[ Python]
# hier Code
[ /Python]
(jeweils ohne das Leerzeichen hinter der "[")
Re: Programm wiederholen
Verfasst: Dienstag 5. Juni 2018, 19:26
von Sarius
ThomasL hat geschrieben: Dienstag 5. Juni 2018, 19:08
das Problem für uns ist, dass wir den Code so nicht lesen können, da keine Formatierung erkennbar ist.
Bitte setzte den Code zwischen
[ Python]
# hier Code
[ /Python]
(jeweils ohne das Leerzeichen hinter der "[")
Code: Alles auswählen
print("Willkommen zu meinen Taschenrechner!")
a = 0
x = 1
c = 1
d = 1
while x == 1:
a = 0
y = input("Welche Rechenart willst du verwenden? ")
if y == "Addieren":
while c == 1:
try:
print(int(input("Gebe die erste Zahl ein: ")) + int(input("Gebe die zweite Zahl ein: ")))
x = 0
a = 1
c = 0
except:
print("Fehler, nochmal")
elif y == "Subtrahieren":
while c == 1:
try:
print(int(input("Gebe die erste Zahl ein: ")) - int(input("Gebe die zweite Zahl ein: ")))
x = 0
a = 1
c = 0
except:
print("Fehler, nochmal")
elif y == "Multiplizieren":
while c == 1:
try:
print(int(input("Gebe die erste Zahl ein: ")) * int(input("Gebe die zweite Zahl ein: ")))
x = 0
a = 1
c = 0
except:
print("Fehler, nochmal")
elif y == "Dividieren":
while c == 1:
try:
print(int(input("Gebe die erste Zahl ein: ")) / int(input("Gebe die zweite Zahl ein: ")))
x = 0
a = 1
c = 0
except:
print("Fehler, nochmal")
elif y == "Lösungsvorschläge":
print("Hast du den Fachbegriff benutzt? Hast du auf Groß- und Kleinschreibung geachtet?")
else:
print("Fehler, für Lösungsvorschläge gebe \"Lösungsvorschläge\" ein.")
while d == 1:
if a == 1:
b = input("Möchtest du noch eine Aufgabe stellen? ")
if b == "Ja":
x = 1
a = 0
elif b == "Nein":
print("Bis zum nächsten mal!")
break
else:
print("Fehler")
Re: Programm wiederholen
Verfasst: Dienstag 5. Juni 2018, 19:36
von ThomasL
Rücke mal den Code der 2. while Schleife um 4 Stellen ein
Re: Programm wiederholen
Verfasst: Dienstag 5. Juni 2018, 19:52
von Sarius
ThomasL hat geschrieben: Dienstag 5. Juni 2018, 19:36
Rücke mal den Code der 2. while Schleife um 4 Stellen ein
Dann würde doch ein Fehler entstehen, oder nicht? Oder hab ich was Falsch verstanden?
Re: Programm wiederholen
Verfasst: Dienstag 5. Juni 2018, 19:56
von ThomasL
Die erste while Schleife wird beendet und dann fragst du in der 2. while Schleife ob man wiederholen möchte,
beantwortet man das mit Ja, setzt du x zwar wieder auf 1, aber dann wird die 2. while Schleife beendet
und damit auch dein Programm.
Die Abfrage ob man Wiederholen möchte muss also auch innerhalb der ersten Schleife liegen, oder?
Re: Programm wiederholen
Verfasst: Dienstag 5. Juni 2018, 20:02
von Sarius
ThomasL hat geschrieben: Dienstag 5. Juni 2018, 19:56
Die erste while Schleife wird beendet und dann fragst du in der 2. while Schleife ob man wiederholen möchte,
beantwortet man das mit Ja, setzt du x zwar wieder auf 1, aber dann wird die 2. while Schleife beendet
und damit auch dein Programm.
Die Abfrage ob man Wiederholen möchte muss also auch innerhalb der ersten Schleife liegen, oder?
Das Programm sieht nun so aus, funktioniert aber immer noch nicht:
Code: Alles auswählen
print("Willkommen zu meinen Taschenrechner!")
a = 0
x = 1
c = 1
d = 1
while x == 1:
a = 0
y = input("Welche Rechenart willst du verwenden? ")
if y == "Addieren":
while c == 1:
try:
print(int(input("Gebe die erste Zahl ein: ")) + int(input("Gebe die zweite Zahl ein: ")))
x = 0
a = 1
c = 0
except:
print("Fehler, nochmal")
elif y == "Subtrahieren":
while c == 1:
try:
print(int(input("Gebe die erste Zahl ein: ")) - int(input("Gebe die zweite Zahl ein: ")))
x = 0
a = 1
c = 0
except:
print("Fehler, nochmal")
elif y == "Multiplizieren":
while c == 1:
try:
print(int(input("Gebe die erste Zahl ein: ")) * int(input("Gebe die zweite Zahl ein: ")))
x = 0
a = 1
c = 0
except:
print("Fehler, nochmal")
elif y == "Dividieren":
while c == 1:
try:
print(int(input("Gebe die erste Zahl ein: ")) / int(input("Gebe die zweite Zahl ein: ")))
x = 0
a = 1
c = 0
except:
print("Fehler, nochmal")
elif y == "Lösungsvorschläge":
print("Hast du den Fachbegriff benutzt? Hast du auf Groß- und Kleinschreibung geachtet?")
else:
print("Fehler, für Lösungsvorschläge gebe \"Lösungsvorschläge\" ein.")
while d == 1:
if a == 1:
b = input("Möchtest du noch eine Aufgabe stellen? ")
if b == "Ja":
x = 1
a = 0
elif b == "Nein":
print("Bis zum nächsten mal!")
break
else:
print("Fehler")
Re: Programm wiederholen
Verfasst: Dienstag 5. Juni 2018, 20:13
von ThomasL
Welche Bedingung muss denn erfüllt werden, damit die 2. while Schleife verlassen wird?
Re: Programm wiederholen
Verfasst: Dienstag 5. Juni 2018, 20:17
von Sarius
ThomasL hat geschrieben: Dienstag 5. Juni 2018, 20:13
Welche Bedingung muss denn erfüllt werden, damit die 2. while Schleife verlassen wird?
Sie wird nur verlassen wenn man Nein eingibt.
Re: Programm wiederholen
Verfasst: Dienstag 5. Juni 2018, 20:28
von ThomasL
Sie wird auch nicht verlassen wenn man Ja eingibt
Re: Programm wiederholen
Verfasst: Dienstag 5. Juni 2018, 20:31
von Sarius
ThomasL hat geschrieben: Dienstag 5. Juni 2018, 20:28
Sie wird auch nicht verlassen wenn man Ja eingibt
Jetzt funktioniert es! Vielen Dank für die Hilfe!
Edit: Aber dadurch geht der Fehlersatz wenn man am Anfang was Falsches eingetippt hat verloren. Kann man das auch noch beheben?
Re: Programm wiederholen
Verfasst: Dienstag 5. Juni 2018, 23:20
von Sirius3
@Sarius: gewöhn Dir gleich an sprechende Variablennamen zu benutzen, einbuchstabige sagen nichts. Also `Rechenart` statt `y`.
Statt while-Schleifen mit Flags benutzt man normalerweise Endlosschleifen while True: die man per break verläßt. Du setzt nämlich bei vielen Fällen x=0 obwohl erst später entschieden werden sollte, ob die äußere Schleife verlassen werden soll oder nicht.
Nakte excepts nie benutzen, weil da auch viele Programmierfehler verschluckt werden, die man dann nur schwer finden kann. Was Du hier willst, ist eigentlich nur einen ValueError. Eingabe und Ausgabe sollten eigentlich nicht in einer Zeile stehen, das macht das Lesen sehr schwer. Zudem hast Du vier Fälle, wo jeweils zwei Zahlen zu lesen sind, Du hast also Code 4 mal kopiert. Versuche möglichst viel gleichen Code nur einmal zu haben, also erst zwei Zahlen einlesen, dann nach Rechenoperation unterschiedlich das Ergebnis berechnen und dann wieder in einem Codepfad die Ausgabe machen.
Im Fall a=0 ist Deine letzte while-Schleife eine Endlosschleife. d hat nie einen anderen Wert als 1. Was Du wirklich mit a, d, c oder x meinst, ist nicht klar, weil die Namen so kurz sind. Bei längeren Namen wird die Logik klarer, und man würde schneller merken, dass da was nicht stimmen kann, oder dass eine Variable gar nicht sinnvoll ist.
Re: Programm wiederholen
Verfasst: Mittwoch 6. Juni 2018, 13:40
von Sarius
Sirius3 hat geschrieben: Dienstag 5. Juni 2018, 23:20
@Sarius: gewöhn Dir gleich an sprechende Variablennamen zu benutzen, einbuchstabige sagen nichts. Also `Rechenart` statt `y`.
Statt while-Schleifen mit Flags benutzt man normalerweise Endlosschleifen while True: die man per break verläßt. Du setzt nämlich bei vielen Fällen x=0 obwohl erst später entschieden werden sollte, ob die äußere Schleife verlassen werden soll oder nicht.
Nakte excepts nie benutzen, weil da auch viele Programmierfehler verschluckt werden, die man dann nur schwer finden kann. Was Du hier willst, ist eigentlich nur einen ValueError. Eingabe und Ausgabe sollten eigentlich nicht in einer Zeile stehen, das macht das Lesen sehr schwer. Zudem hast Du vier Fälle, wo jeweils zwei Zahlen zu lesen sind, Du hast also Code 4 mal kopiert. Versuche möglichst viel gleichen Code nur einmal zu haben, also erst zwei Zahlen einlesen, dann nach Rechenoperation unterschiedlich das Ergebnis berechnen und dann wieder in einem Codepfad die Ausgabe machen.
Im Fall a=0 ist Deine letzte while-Schleife eine Endlosschleife. d hat nie einen anderen Wert als 1. Was Du wirklich mit a, d, c oder x meinst, ist nicht klar, weil die Namen so kurz sind. Bei längeren Namen wird die Logik klarer, und man würde schneller merken, dass da was nicht stimmen kann, oder dass eine Variable gar nicht sinnvoll ist.
Ich werde es mir merken! Vielen Dank für die Antwort
Re: Programm wiederholen
Verfasst: Mittwoch 6. Juni 2018, 15:44
von Sirius3
Nicht nur merken, sondern gleich bei Deinem jetzigen Programm umsetzen
