Uninitialisierte Werte False?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
KoenigGunther
User
Beiträge: 22
Registriert: Donnerstag 19. April 2007, 10:05

Hi!
Ich gucke mir gerade das Tutorial an:
http://www.upriss.org.uk/python/session3.html
und bin bei Aufgabe 1.2.
Da steht, dass wenn eine Variable leer ist, der Wert False ist.
Ich habe jetzt das geschrieben:

Code: Alles auswählen

fname = raw_input("your first name?")
lname = raw_input("your last name")
pnum = input("your phone number?")
if fname == False or lname == False or pnum == False:
    print "dont leave empty fields"
else:
    print "ty"
Aber wenn ich bei (l|f)name nichts eingebe, erkennt er das nicht an. Genau so wie bei pnum.
Er scheint anscheinend das Enter als Eingabe zu verstehen, oder?
Wenn ich aber

Code: Alles auswählen

if len(fname) == 0 ...bla blubb...
schreibe, versteht er das, bis auf pnum.

Hab ich da jetzt was falsch verstanden?[/quote]
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Hab ich da jetzt was falsch verstanden?
Jepp. Leere Listen, Leere Tupel, Leere Strings und die Zahl 0 und das Objekt None, haben alle einen Wahrheitswert(nicht Wert), False.

Allerdings kann man den nicht mit

Code: Alles auswählen

var = ""
print var == False
abfragen. Denn "ausgerschrieben" würde die Abfrage so aussehen:

Code: Alles auswählen

print ("" == False)
Was absolut nicht richtig ist.

Du kannst aber prüfen, ob eine Variable leer ist oder nicht:

Code: Alles auswählen

>>> l = [] #leere liste
>>> s = "" #leerer String
>>> i = 0  #0 ist auch False. Alles >0 hat den Wahrheitswert True
>>> n = None #hat ebenfalls den Wahrheitswert False
>>> if l:
...     print "l ist voll" # wird *nicht* ausgeführt
... else:
...     print "l ist leer" # wird ausgeführt
...
l ist leer
So, wie ich 'l' abgefragt habe, kannst du 's', 'i' und 'n' ebenfalls abfragen.


MfG EnTeQuAk
KoenigGunther
User
Beiträge: 22
Registriert: Donnerstag 19. April 2007, 10:05

Okay, danke, das hab ich verstanden :)[/code]
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Ohne "if" geht das auch mit `bool`:

bool([]) -> False
bool([1,2,3]) -> True

etc.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Im Gegensatz dazu hat übrigens bei Ruby alles den Wahrheitswert True was nicht nil oder False ist.
Antworten