Seite 1 von 1

prüfen, ob eine Dualzahl eingegeben wurde

Verfasst: Mittwoch 22. Dezember 2021, 06:15
von kingsven
Hallo zusammen,

ich muss ein Programm schreiben, dass Dualzahl in Dezimalzahl umrechnet. Jetzt will ich nach der Eingabe prüfen, ob auch wirklich eine Dualzahl (also nur 0 und/oder 1) eingegeben wurde.
Mein Plan war, es über try, except, else zu lösen. Funktioniert aber noch nicht. Die Schleifenbedingung ist wohl falsch.
Hat jemand eine Idee wie es funktionieren könnte.
Meine Suche im Forum brachte erst mal nichts.
Gruß Sven

eingabe = False

while eingabe == 0 or 1:
try:
# den Wert einlesen
eingabe = int(input("Bitte geben Sie eine Dualzahl ein, die umgerechnet werden soll: "))
except ValueError:
print("Die Eingabe war nicht gültig. Es dürfen nur die 0 und 1 eingegeben werden!")
else:
eingabe = True

Re: prüfen, ob eine Dualzahl eingegeben wurde

Verfasst: Mittwoch 22. Dezember 2021, 12:07
von /me
Du hast da mehrere Fehler. `eingabe = 0 or 1` ist immer wahr.

Code: Alles auswählen

>>> False or 1
1
>>> bool(False or 1)
True
Die Prüfung ist hier nicht, ob die Eingabe 0 oder 1 ist, sondern ob eingabe gleich 0 ist oder ob 1 wahr ist. Nun sind für Python alle Zahlen außer 0 wahr. Analoges gilt auch für diverse andere Datentypen. Siehe dazu "Boolean operations" in der Dokumentation.

Die Abfrage müsste also lauten: `while eingabe == 1 or eingabe == 0` oder einfacher `while eingabe in {0, 1}`. Jetzt stehst du aber vor dem nächsten Problem. `False == 0` ist nämlich auch wahr, da `False` nicht nur ein boolean sondern auch ein Integer mit dem Wert 0 ist.

Code: Alles auswählen

>>> False == 0
True
>>> isinstance(False, int)
True
Die beste Lösung ist es, eine Endlosschleife zu verwenden die mit `break` verlassen wird, sobald die Prüfung erfolgreich war.

Code: Alles auswählen

while True:
    try:
        # den Wert einlesen
        eingabe = int(input("Bitte geben Sie eine Dualzahl ein, die umgerechnet werden soll: "))
        if eingabe in {0, 1}:
            break
    except ValueError:
        print("Die Eingabe war nicht gültig. Es dürfen nur die 0 und 1 eingegeben werden!")
    
Das setzt jetzt voraus, dass du wirklich nur eine einzige Ziffer prüfen willst. Möchtest du eine Eingabe wie 101010 prüfen, dann ist ohnehin eine andere Prüfung erforderlich.

Re: prüfen, ob eine Dualzahl eingegeben wurde

Verfasst: Mittwoch 22. Dezember 2021, 12:57
von Sirius3
@kingsven: wenn die Aufgabe lautet, eine Dualzahl in eine Dezimalzahl umzuwandeln, dann sind wohl str und int nicht erlaubt, denn damit ist die Aufgabe trivial:

Code: Alles auswählen

dezimalzahl = str(int(dualzahl, 2))

Re: prüfen, ob eine Dualzahl eingegeben wurde

Verfasst: Mittwoch 22. Dezember 2021, 13:05
von kbr
Die Prüfung ist sogar recht einfach. Du testest, wie von /me gezeigt, auf einen ValueError, verwendest aber den gesamten Eingabestring:

Code: Alles auswählen

>>> i = input("Dualzahl eingeben:")
Dualzahl eingeben:1100101
>>> i
'1100101'
>>> int(i, 2)
101
>>> i = input("Dualzahl eingeben:")
Dualzahl eingeben:100201
>>> int(i, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 2: '100201'
> <stdin>(1)<module>()