Seite 1 von 1

Uninitialisierte Werte False?

Verfasst: Donnerstag 14. Juni 2007, 10:30
von KoenigGunther
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]

Verfasst: Donnerstag 14. Juni 2007, 11:01
von EnTeQuAk
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

Verfasst: Donnerstag 14. Juni 2007, 11:12
von KoenigGunther
Okay, danke, das hab ich verstanden :)[/code]

Verfasst: Donnerstag 14. Juni 2007, 12:42
von birkenfeld
Ohne "if" geht das auch mit `bool`:

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

etc.

Verfasst: Donnerstag 14. Juni 2007, 14:07
von Y0Gi
Im Gegensatz dazu hat übrigens bei Ruby alles den Wahrheitswert True was nicht nil oder False ist.