Seite 1 von 1
Python rätselhaftes Verhalten ganz einfaches Beispiel
Verfasst: Dienstag 19. Juli 2011, 13:15
von python71
ich habe eine xxx.py
Code: Alles auswählen
zins = '6,5A'
print(zins)
print(zins.replace(',','',1).isdigit())
while True:
if zins.replace(',','',1).isdigit() == True:
print('ok',zins)
break
else:
zins = str(input('Nochmal Zins: '))
print('ende')
Starte ich diesen In Idle klappt es:
6,5A
False
Nochmal Zins: a
Nochmal Zins: b
Nochmal Zins: c
Nochmal Zins: 6,5
ok 6,5
ende
Starte ich die xxx.py mit doppelklick oder python xxx.py in der command bringt er
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\Python32>python xxx.py
6,5A
False
Nochmal Zins: a
Nochmal Zins: b
Nochmal Zins: c
Nochmal Zins: 6,5
Nochmal Zins: ?
Nochmal Zins: ?
Nochmal Zins: uswusw
Nochmal Zins:
Hier behauptet Python, das zins.replace(',','',1).isdigit() False ist. Das ganze ist mir ein Rätsel.
Weiss jemand Rat?
Re: Python rätselhaftes Verhalten ganz einfaches Beispiel
Verfasst: Dienstag 19. Juli 2011, 13:23
von derdon
Code: Alles auswählen
>>> print(zins)
6,5A
>>> print(zins.replace(',', '', 1))
65A
>>> '65A'.isdigit()
False
>>> print(''.isdigit.__doc__)
S.isdigit() -> bool
Return True if all characters in S are digits
and there is at least one character in S, False otherwise.
Das sollte dich eigentlich nicht überraschen.
Re: Python rätselhaftes Verhalten ganz einfaches Beispiel
Verfasst: Dienstag 19. Juli 2011, 13:38
von EyDu
Hallo.
Ohne genau hingeschaut zu haben würde ich vermuten, dass dort noch ein newline am Ende des Strings hängt.
Außerdem musst du noch testen, ob
auch wirklich `True` ist:
Code: Alles auswählen
(((zins.replace(',','',1).isdigit() == True) == True) == True) == True
Vielleicht denkst du aber noch einmal darüber nach, ob ein "== True"-Vergleich überhaupt jemals Sinn macht
Sebastian
Re: Python rätselhaftes Verhalten ganz einfaches Beispiel
Verfasst: Dienstag 19. Juli 2011, 13:48
von python71
@derdon und @EyDu
danke für euren Versuch , aber eure Antworten haben Null mit meiner Frage/Problemstellung zu tun.
Re: Python rätselhaftes Verhalten ganz einfaches Beispiel
Verfasst: Dienstag 19. Juli 2011, 13:55
von BlackJack
@python71: Dann lass Dir `zins` doch mal als `repr()` beziehungsweise `ascii()`-Form ausgeben. Und auch das Ergebnis von dem `replace()`-Aufruf. Irgendwo muss da ja etwas enthalten sein, was Du so nicht siehst, oder erwartet hast.
Re: Python rätselhaftes Verhalten ganz einfaches Beispiel
Verfasst: Dienstag 19. Juli 2011, 13:58
von EyDu
derdons Antwort und der erste Teil meiner Antwort haben sehr viel mit deinem Problem zu tun. Füge nach
mal die Zeilen
ein und poste mal das Ergebnis. Dort sollte irgendwo das Problem liegen.
Re: Python rätselhaftes Verhalten ganz einfaches Beispiel
Verfasst: Dienstag 19. Juli 2011, 14:05
von Yaso
Außerdem musst du noch testen, ob
Code:
zins.replace(',','',1).isdigit() == True
auch wirklich `True` ist:
Code:
(((zins.replace(',','',1).isdigit() == True) == True) == True) == True
Vielleicht denkst du aber noch einmal darüber nach, ob ein "== True"-Vergleich überhaupt jemals Sinn macht

Damit meint er, dass du hier zu oft auf den Wahrheitswert prüfst. Es reicht einfach:
Re: Python rätselhaftes Verhalten ganz einfaches Beispiel
Verfasst: Dienstag 19. Juli 2011, 14:57
von derdon
Was vermutest du denn, was '42X'.isdigit() macht? Welcher Wert wird zurückgegeben und warum?
Re: Python rätselhaftes Verhalten ganz einfaches Beispiel
Verfasst: Dienstag 19. Juli 2011, 15:01
von EyDu
derdon hat geschrieben:Was vermutest du denn, was '42X'.isdigit() macht? Welcher Wert wird zurückgegeben und warum?
Das Problem ist nicht die "6,5A", sondern das in den Zeilen darauf folgende "6,5". Letzteres funktioniert bei IDLE, jedoch nicht über die Konsole.
Re: Python rätselhaftes Verhalten ganz einfaches Beispiel
Verfasst: Dienstag 19. Juli 2011, 15:02
von derdon
Oh, stimmt. Habe den Ausgangspost nicht genau genug gelesen.
Re: Python rätselhaftes Verhalten ganz einfaches Beispiel
Verfasst: Dienstag 19. Juli 2011, 15:41
von python71
danke euch.
die Funktion repr(zins) hat mir nun aufgezeigt was zurück gegeben wurde bei input('zins')
nämlich '6,5\r'
und somit war der vergleich '6,5' = 6,5r' bullshit.
bye bye
Re: Python rätselhaftes Verhalten ganz einfaches Beispiel
Verfasst: Dienstag 19. Juli 2011, 17:17
von EyDu
Nur der Vollständigkeit halber
EyDu hat geschrieben:Ohne genau hingeschaut zu haben würde ich vermuten, dass dort noch ein newline am Ende des Strings hängt.
python71 hat geschrieben:danke für euren Versuch , aber eure Antworten haben Null mit meiner Frage/Problemstellung zu tun.
python71 hat geschrieben:die Funktion repr(zins) hat mir nun aufgezeigt was zurück gegeben wurde bei input('zins')
nämlich '6,5\r'