Wieso funktioniert dieses Programm nicht?

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.


Wolkenfall123 
Beitragsersteller
 27.08.2024, 23:13

Müsste ich also noch ein antwort=False hinzufügen?

Krabat693  27.08.2024, 23:19
@Wolkenfall123

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.

Krabat693  27.08.2024, 23:27
@Krabat693

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.

Wolkenfall123 
Beitragsersteller
 27.08.2024, 23:36
@Krabat693

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.")

Krabat693  27.08.2024, 23:49
@Wolkenfall123
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.

Wolkenfall123 
Beitragsersteller
 28.08.2024, 00:07
@Krabat693

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.

Krabat693  28.08.2024, 00:09
@Wolkenfall123

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.

Wolkenfall123 
Beitragsersteller
 28.08.2024, 00:20
@Krabat693

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.

Krabat693  28.08.2024, 00:24
@Wolkenfall123

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.

Woher ich das weiß:Studium / Ausbildung – Begeisterter Beweger der 0 und 1

Wolkenfall123 
Beitragsersteller
 27.08.2024, 23:09

Wie würde ich das denn überprüfen? Also welchen Befehl kann ich dafür verwenden?

McSKB  27.08.2024, 23:10
@Wolkenfall123

Ich nutze die Sprache nicht. Schau in die Dokumentation der API.