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?
Programm wiederholen
du kennst und benutzt doch schon while-schleifen, wie wäre es damit?
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
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 "[")
Bitte setzte den Code zwischen
[ Python]
# hier Code
[ /Python]
(jeweils ohne das Leerzeichen hinter der "[")
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
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")
Rücke mal den Code der 2. while Schleife um 4 Stellen ein
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
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?
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?
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Das Programm sieht nun so aus, funktioniert aber immer noch nicht: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?
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")
Zuletzt geändert von Sarius am Dienstag 5. Juni 2018, 20:18, insgesamt 1-mal geändert.
Welche Bedingung muss denn erfüllt werden, damit die 2. while Schleife verlassen wird?
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Sie wird auch nicht verlassen wenn man Ja eingibt
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
@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.
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 AntwortSirius3 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.