Python Einfacher Taschenrechner

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Patryk Buczak
User
Beiträge: 9
Registriert: Mittwoch 26. August 2020, 13:16

Hallo zusammen,

Ich habe ein kleines Problem mit dem Taschenrechner:

print ('Wie möchtest du rechnen?')
print ('1 = addieren')
print ('2 = subtrahieren')
print ('3 = dividieren')
print ('4 = multiplizieren')

i = int(input())

if i > 4:
print ("ERROR")
print ("Bitte gib eine Nummer zwischen 1 und 4 ein.")

print ('Gib eine Zahl ein')
zahl1 = int(input())
print ('Gib eine zweite Zahl ein')
zahl2 = int(input())

if i == 1:
antwort = (zahl1 + zahl2)

elif i == 2:
antwort = (zahl1 - zahl2)

elif i == 3:
antwort = (zahl1 / zahl2)

elif i == 4:
antwort = (zahl1 * zahl2)

print (antwort)

print ('Bitte Eingabetaste drücken um das Programm zu beenden')
end = input()


Und zwar, ich weiß nicht wie ich die erste If-Bedingung beenden soll. Nach dem 2 print kommt direkt der dritte. Aber ich will ja so machen, dass der Computer mich nochmal fragt dass man eine Zahl zwischen 1-4 eingibt nachdem man zum Beispiel eine 5 eingegeben hat. Also quasi die erste If-Bedingung (oder vielleicht Schleife?) beenden und dann erst der Satz: "'Gib eine Zahl ein" kommt. Würde mich über eine Antwort freuen, Grüße
Geralonx
User
Beiträge: 10
Registriert: Dienstag 18. August 2020, 09:23

Nunja, du hast in deiner ersten if ja keine alternative Route. Sogesehen überprüfst du, ob i>4 ist und machst dann die Ausgabe. Anschließend läuft der Code nach der if unten weiter. Im einfachsten Fall kannst du einfach sagen:

Code: Alles auswählen

print ('Wie möchtest du rechnen?')
print ('1 = addieren')
print ('2 = subtrahieren')
print ('3 = dividieren')
print ('4 = multiplizieren')

i = int(input())

if i>4: # Ausführen, wenn i>4
	print ("ERROR")
	print ("Bitte gib eine Nummer zwischen 1 und 4 ein.")
else: # Ausführen wenn i nicht > 4
	# dein rest

# Unten drunter -> wird immer ausgeführt, da dieser Teil nichts mehr mit der if/else Abfrage zu tun hat
Wenn du willst, dass der Benutzer solange gefragt wird, bis i<4 eingegeben wird, dann kannst du deine Eingabe wiederholt in einer while-Schleife einbringen und die Bedingung wäre eine Abfrage auf i
AMD Ryzen 7 3700X
Gigabyte Nvidia Gefroce RTX 2070 Super Windforce OC
Gigabyte X570 Aorus Elite AMD
HyperX Savage DDR4-2400 2*8192MB

Win10 64 Bit (10.0.19041)
VSCode 1.48
Python 3.8.4 64-Bit
Tensorflow 2.2.0 (GPU)
CUDA 10.1
CUPTI 10.0
cuDNN v8.0.2

Stand: 18.08.2020
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn Du eine Falscheingabe wiederholen willst, dann braucht Du eine Schleife, wie Du ja schon richtig selbst erkannt hast.
Zwischen dem Funktionsnamen, hier print, und der öffnenden Klammer zum Funktionsaufruf kommt kein Leerzeichen. Bei int und input hast Du es ja auch so gemacht.
Bei den ganzen Rechenoperationen sind die Klammern überflüssig und können weg.
Die letzten zwei Zeilen sind unsinnig und können weg. Ein Konsolenprogramm startet man aus der Konsole heraus, und will nicht noch stupide die Eingabetaste drücken, um weiter arbeiten zu können.

Code: Alles auswählen

print('Wie möchtest du rechnen?')
print('1 = addieren')
print('2 = subtrahieren')
print('3 = dividieren')
print('4 = multiplizieren')

while True:
    auswahl = int(input())
    if 1 <= auswahl <= 4:
        break
    print("ERROR")
    print("Bitte gib eine Nummer zwischen 1 und 4 ein.")

print('Gib eine Zahl ein')
zahl1 = int(input())
print('Gib eine zweite Zahl ein')
zahl2 = int(input())

if auswahl == 1:   
    antwort = zahl1 + zahl2
elif auswahl == 2:
    antwort = zahl1 - zahl2
elif auswahl == 3:
    antwort = zahl1 / zahl2
elif auswahl == 4:
    antwort = zahl1 * zahl2
else:
    assert False, "dieser Fall kann nicht auftreten"
print(antwort)
Jetzt kannst Du noch die Exception abfangen, falls man gar keine Zahl eingibt.
Patryk Buczak
User
Beiträge: 9
Registriert: Mittwoch 26. August 2020, 13:16

Vielen Dank für die Antworten, jetzt weiß ich wenigstens was ich falsch gemacht habe :)
Patryk Buczak
User
Beiträge: 9
Registriert: Mittwoch 26. August 2020, 13:16

Sirius3 hat geschrieben: Mittwoch 26. August 2020, 18:52 Wenn Du eine Falscheingabe wiederholen willst, dann braucht Du eine Schleife, wie Du ja schon richtig selbst erkannt hast.
Zwischen dem Funktionsnamen, hier print, und der öffnenden Klammer zum Funktionsaufruf kommt kein Leerzeichen. Bei int und input hast Du es ja auch so gemacht.
Bei den ganzen Rechenoperationen sind die Klammern überflüssig und können weg.
Die letzten zwei Zeilen sind unsinnig und können weg. Ein Konsolenprogramm startet man aus der Konsole heraus, und will nicht noch stupide die Eingabetaste drücken, um weiter arbeiten zu können.

Code: Alles auswählen

print('Wie möchtest du rechnen?')
print('1 = addieren')
print('2 = subtrahieren')
print('3 = dividieren')
print('4 = multiplizieren')

while True:
    auswahl = int(input())
    if 1 <= auswahl <= 4:
        break
    print("ERROR")
    print("Bitte gib eine Nummer zwischen 1 und 4 ein.")

print('Gib eine Zahl ein')
zahl1 = int(input())
print('Gib eine zweite Zahl ein')
zahl2 = int(input())

if auswahl == 1:   
    antwort = zahl1 + zahl2
elif auswahl == 2:
    antwort = zahl1 - zahl2
elif auswahl == 3:
    antwort = zahl1 / zahl2
elif auswahl == 4:
    antwort = zahl1 * zahl2
else:
    assert False, "dieser Fall kann nicht auftreten"
print(antwort)
Jetzt kannst Du noch die Exception abfangen, falls man gar keine Zahl eingibt.
Hier wird aber immer noch nach dem Error die Zeile "Gib eine Zahl ein" ausgegeben und das will ich ja nicht. Ich will dass der Computer solange fragt, dass man eine Zahl zwischen 1-4 eingibt bis man tatsächlich eine richtige Zahl eingibt.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

1. Du brauchst nicht Beitrag zu zitieren. Wir sehen den ja oben.

2. Nö. Nach einer Falscheinagabe wird man wieder aufgefordert eine Zahl zwischen 1 und 4 einzugeben. Bei welcher Eingabe ist das denn deiner Meinung nach nicht so?
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Du kannst auch mit Hilfe von einer Endlosschleife und try/except dafür sorgen, dass es nur weiter geht wenn eine gültige Eingabe gemacht wurde.

Code: Alles auswählen

Endlosschleife:
    versuche:
        auswahl = Eingabe und zu Integer konvertieren
        wenn Variable auswahl im Bereich von 1-4 liegt:
            gebe aus, dass die Eingabe richtig ist und es weiter geht
            verlasse die Endlosschleife
        ansonsten:
            rufe ValueError auf
    fange ValueError ab:
        gebe aus, dass die Eingabe ungültig war und nur Zahlen zwischen eins und vier erlaubt sind

hier geht das Programm weiter
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@sparrow: Wenn man keine Zahl eingibt. Also einfach nur die Eingabetaste oder "x" oder so.

@Patryk Buczak: Bei den Rechnungen möchtest Du vielleicht noch irgendwie berücksichtigen was passiert wenn die Operation dividieren und der zweite Operand eine 0 ist.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

@__blackjack__: Dann kommt es aber zu einer Exception, dann steigt das Programm aus. Dann kommt auch keine Frage nach einer Zahl mehr. Deshalb gehe ich davon aus, dass Patryk Buczak von einer ungültigen Zahl spricht.
Patryk Buczak
User
Beiträge: 9
Registriert: Mittwoch 26. August 2020, 13:16

@__blackjack__: Nee, alles gut. Ich habe den Fehler herausgefunden. Ich habe alle Leerzeichen, Blocksätze usw. nicht berücksichtigt (wusste nicht dass es so wichtig ist) , deswegen kam da ein Fehler bei mir als ich versucht habe, das Programm auszuführen. Es hat sich also erledigt, danke für eure Hilfe
Antworten