Seite 1 von 1
Probleme mit RegEX und Zahlen
Verfasst: Donnerstag 15. Januar 2015, 10:11
von JohannesGolf
Hallo Zusammen,
ich schreibe gerade, als Übung, an einem Programm mit den man Dezimale Zahlen in binär umrechnen kann und umdrehen.
Es geht alles soweit, nur will ich jetzt die eingaben "einschränken", dsh. das man wenn man von Binär in Dezimal umrechnen will NUR 0 oder 1 in der Zahl stehen darf.
Wie kann ich das jetzt am besten umsetzten? Ich will das es am Ende ,ungefähr, so laufen soll.
- -"Gibt mir die Binärenummer zum umrechnen!"
--user gibt Nummer ein (z.B. 1001001201)
-soll die Nummer Prüfen (also nur 0 oder 1)
->ist eine andere Zahl als 0 oder 1 enthalten -> "NUR 0en oder 1er erlaubt. Bitte erneut eingeben"
->ist die Zahl OK wandle sie um (das geht schon)
Ich hätte an sowas in der Art gedacht:
match number with [0-1]{1,}
Ich bedanke mich schon mal für eure Vorschläge oder Tipps.
Mit freundlichen Grüßen
JohannesGolf
Re: Probleme mit RegEX und Zahlen
Verfasst: Donnerstag 15. Januar 2015, 10:58
von BlackJack
@JohannesGolf: Die `int()`-Funktion löst beim umwandeln einen `ValueError` aus wenn da Zeichen enthalten sind die nicht zur Basis passen. Warum also etwas prüfen was beim Umwandeln sowieso schon geprüft wird?
Re: Probleme mit RegEX und Zahlen
Verfasst: Donnerstag 15. Januar 2015, 11:44
von JohannesGolf
BlackJack hat geschrieben:@JohannesGolf: Die `int()`-Funktion löst beim umwandeln einen `ValueError` aus wenn da Zeichen enthalten sind die nicht zur Basis passen. Warum also etwas prüfen was beim Umwandeln sowieso schon geprüft wird?
da ich ja in binär umwandeln will, sind andere Zahlen wie 2 - 9 "Falsch" (wie im Beispiel beschrieben) . ich will das wenn in dieser Variable nur 0 und 1 zugelassen sind. wenn i-was anderes darin vorkommt, soll eine neue Zahl eingegeben werden.
Re: Probleme mit RegEX und Zahlen
Verfasst: Donnerstag 15. Januar 2015, 11:52
von BlackJack
@JohannesGolf: Das habe ich schon verstanden. Nochmal: Wenn man `int()` eine Zeichenkette übergibt die andere Zeichen enthält als für die Basis die man angibt gültig sind, löst die Methode einen `ValueError` aus. Den fängt man ab, meckert mit dem Benutzer, und lässt ihn erneut einen Wert eingeben. Solange bis er's richtig macht, also am besten eine Endlosschleife die erst verlassen wird wenn die Eingabe stimmte.
Code: Alles auswählen
In [2]: int('10', 2)
Out[2]: 2
In [3]: int('120', 2)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-3-877d91ae376d> in <module>()
----> 1 int('120', 2)
ValueError: invalid literal for int() with base 2: '120'
Und das mit der Ausnahme würde ich auch bei einer eigenen Funktion für Umwandlungen die nicht mit `int()` gehen so machen, denn innerhalb dieser Funktion sollte man natürlich auch prüfen ob die Argumente sinnvolle Werte enthalten und entstprechen einen `ValueError` auslösen.
Re: Probleme mit RegEX und Zahlen
Verfasst: Donnerstag 15. Januar 2015, 12:03
von noisefloor
Hallo,
@JohannesGolf: wenn du eine ValueError erhälst weißt du doch, dass die Zahl kein Binär war
Ansonsten brauchst du kein RegEx dafür, das geht auch ganz einfach mit Sets. Mach' aus der Binärzahl ein Set und vergleich es mit einem Vorgabeset.
Gruß, noisefloor
Re: Probleme mit RegEX und Zahlen
Verfasst: Donnerstag 15. Januar 2015, 13:36
von JohannesGolf
Danke
Re: Probleme mit RegEX und Zahlen
Verfasst: Donnerstag 15. Januar 2015, 13:37
von /me
Wenn du wirklich einen regulären Ausdruck verwenden möchtest, dann musst du überlegen was du haben willst.
Du möchtest den String von Anfang bis Ende durchsuchen, also brauchst du schon mal die passenden Anker (^, $). Dazwischen können dann beliebig viele Zeichen sein die 0 oder 1 sind. Das führt uns dann zu '^[01]+$'. Jetzt brauchst du nur noch mit
re.search suchen und wenn es keinen Treffer gibt, entsprechend reagieren.
Ich würde aber tatsächlich einfach die Umwandlung mit
int() versuchen und im Falle eines
ValueError eine entsprechende Meldung bringen.