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

Code: Alles auswählen

zins.replace(',','',1).isdigit() == True
auch wirklich `True` ist:

Code: Alles auswählen

(((zins.replace(',','',1).isdigit() == True) == True) == True) == True
:twisted:

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

Code: Alles auswählen

zins = str(input('Nochmal Zins: '))
mal die Zeilen

Code: Alles auswählen

print(repr(zins))
print(repr(zins.replace(',','',1)))
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


:twisted:

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:

Code: Alles auswählen

if zins.replace(',','',1).isdigit():

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'