Wieso funktioniert dieses Programm nicht?
Brauche Hilfe bei diesem Programm. Es soll Fehlerhafte Eingaben wie Texte abweisen, jedoch kommt bei Zeile 19 immer die Fehlermeldung:„x muss vom Typ Zahl sein“ wenn man einen Text eingibt. Das Programm ist auf WebTigerJython.
Vielen Dank schonmal für die Hilfe!
3 Antworten
Du hast Antwort als TRUE initialisiert, bei Eingabe eines Text wird die Variable aber nicht auf FALSE geändert.
und da antwort==true beginnt dein Programm zu rechnen, um dann festzustellen, dass es mit einem String nicht rechnen kann.
Ja, das würde dein Problem lösen.
Aber, good practice die du die for sure zukunft merken solltest:
Win du eine Bool variable hast die darüber entscheidet ob ein kritischer Teil deines Programm ausgeführt wird oder nicht, dann initialisiere die als FALSE.
So steht dein Programm automatisch auf Abbruch und erst wenn die kritische Voraussetzung erfüllt ist, wird diese auf true gesetzt.
Korrektur: die Variable Antwort hat ja gar nichts mit deiner Eingabekontrolle zu tun, da war ich verwirrt weil du ja in deiner Eingabekontrolle die Variable änderst.
Kannst du deinen Code bitte mal als Text rein kopieren, dann Pass ich das mal an.
from math import*
antwort=True
zahl=input("Geben Sie eine natuerliche Zahl")
teiler=2
if isinstance(zahl, int):
antwort=True
else:
antwort=False
print(str(zahl)+ " ist keine natuerliche Zahl!")
if zahl<=1:
antwort=False
while zahl>=2 and teiler<= sqrt(zahl):
if zahl % teiler==0:
antwort= False
break
teiler += 1
if antwort==True:
print("Die Zahl " +str(zahl)+" ist eine Primzahl.")
else:
print("Die Zahl "+str(zahl) + " ist keine Primzahl.")
Das ist der Text wie im Bild (ohne bearbeitung)
from math import*
antwort=True
zahl=input("Geben Sie eine natuerliche Zahl ein")
teiler=2
control=False
if isinstance(zahl, int):
if zahl<=1:
print(str(zahl)+ " ist keine natuerliche Zahl!")
else:
control=True
else:
print(str(zahl)+ " ist keine Zahl!")
if control==true:
while zahl>=2 and teiler<= sqrt(zahl):
if zahl % teiler==0:
antwort=False
break
teiler=teiler + 1
if antwort==True:
print("Die Zahl " +str(zahl)+" ist eine Primzahl.")
else:
print("Die Zahl "+str(zahl) + " ist keine Primzahl.")
Ich hab deine Mathemathische überprüfung jetzt nicht kontrolliert, aber ich habe die variable control hinzugefügt und die eingabekontrolle zu einer verschachtelten IF abfrage umgebaut.
wenn also die variable zahl eine zahl enthält wird überprüft ob diese kleiner= 1 ist und erst wenn alles passt wird die variable control auf true gesetzt und erst wenn diese auf true ist wird die schleife ausgeführt.
Bei mir gibt es erneut ein Problem bei der Ausgabe. Wenn die eingegebene Zahl <=1 ist oder ein Text eingegeben wird, werden 2 Sätze ausgegeben.
Ich sehs, rücke die letzte if-else abfrage auch noch um einen Tabstopp ein, damit diese im Falle von control==false ebenso übersprungen werden.
Vielen vielen Dank! Ich war wirklich frustriert bei diesem Programm, doch jetzt verstehe ich es besser. Nächstes Mal achte ich auch darauf die Variable von Anfang an mit False zu initialisieren.
Alles eine Frage der Übung, irgendwann macht es klick und dann verstehst du was du da schreibst.
... dann kannst du irgendwann auch Programme korrigieren, deren Programmiersprache du zum ersten Mal siehst ¯\_(ツ)_/¯
zahl = int(input("Zahl eingeben: "))
input() liefert dir immer einen String zurück. Du musst also explizit nach int casten.
Ich denke, du musst hier erst prüfen, ob der Text, der eingegeben wurde eine Zahl ist, denn a>0 oder ähnliches wird nicht funktionieren.
Wie würde ich das denn überprüfen? Also welchen Befehl kann ich dafür verwenden?
Ich nutze die Sprache nicht. Schau in die Dokumentation der API.
Müsste ich also noch ein antwort=False hinzufügen?