2010-12-25 7 views
8

ich diesen Code in Python fälschlicherweise geschrieben:Was ist der logische Wert von "String" in Python?

name = input("what is your name?") 
if name == "Kamran" or "Samaneh": 
    print("That is a nice name") 
else: 
    print("You have a boring name ;)") 

Es ist immer druckt sogar „Das ist ein schöner Name ist“, wenn der Eingang weder „Kamran“ noch „Samaneh“.

Bin ich richtig zu sagen, dass es "Samaneh" als wahr betrachtet? Warum?

Übrigens habe ich schon meinen Fehler bemerkt. Die richtige Form ist:

if name == "Kamran" or name == "Samaneh": 

Antwort

9

Jede nicht leere Zeichenfolge in Python (und den meisten anderen Sprachen) ist wahr, wie alle Zahlen ungleich Null und nicht leere Listen, Wörterbücher, Mengen und Tupel.

Ein schöner Weg zu tun, was Sie wollen, ist:

name = input("what is your name?") 
if name in ("Kamran", "Samaneh"): 
    print("That is a nice name") 
else: 
    print("You have a boring name ;)") 

Dies erzeugt ein Tupel mit den Namen, den Sie möchten, und führt einen Test der Zugehörigkeit.

1 Wie delnan in den Kommentaren weist darauf hin, gilt dies für alle gut Sammlungen geschrieben. Wenn Sie eine benutzerdefinierte Auflistungsklasse implementieren, müssen Sie sicherstellen, dass sie falsch ist, wenn sie leer ist.

+0

Nicht nur Listen, dicts und Tupeln:

By the way, kann sie geschrieben werden. – delnan

+0

@delnan, ich habe versucht, mir eine gute Möglichkeit vorzustellen, das zu sagen, also blieb ich bei den eingebauten Ins und vergaß Sets. – aaronasterling

+0

Die meisten Objekte, Sammlung oder anders, sind truthy; nur diejenigen, die explizit anders definiert sind, sind nicht. Wenn Sie nur eine Klasse mit der Klasse C(): pass definieren, werden Instanzen als "True" getestet. –

0

Eine nicht leere Zeichenfolge ist True, yes. Ein leeres ist falsch. Das ist super praktisch.

2

In Python wird eine leere Zeichenfolge als False, True andernfalls betrachtet.

Sie den in Operator verwenden könnte.

if name in ("Kamran","Samaneh"): 
    print("That is a nice name") 
else: 
    print("You have a boring name ;)") 
6

Neben dem leeren String '', Strings werden alle zu True bewerten (siehe this page for a full list of values of all types that evaluate to False Dies folgt der Logik von vielen anderen Programmiersprachen (außer einige, die auch Strings bewerten wie '0', 'false', usw. zu False). Die genaue Entscheidung, was zu tun ist, ist etwas willkürlich, aber die getroffene Wahl kann so erklärt werden, dass die Besetzung als eine einfache Möglichkeit zum Test auf leer (Standard oder unbestückt) verwendet werden kann Zeichenketten

Mit der Funktion bool() können Sie immer einen Cast von einem beliebigen Typ auf bool erzwingen.

>>> bool('') 
False 
>>> bool('non-empty string') 
True 
>>> bool('0') 
True 
>>> bool('False') 
True 
>>> bool('false') 
True 
+0

Danke für die Erwähnung bool() -Funktion. Ich brauche wirklich so etwas :) –

+0

@Kamran Froh, dass es geholfen hat :) – marcog

-2

Offensichtlich muss es sein:

name = raw_input("what is your name?") 

nicht

name = input("what is your name?") 

.

Was Sie geschrieben hat, ist wie:

if (name == "Kamran" or "Samaneh") 

Ein weiterer guter Ausdruck ist:

if name == ("Kamran" or "Samaneh") 

Aber ich ziehe auch wenn der Name in ("Kamran" oder "Samaneh"), wie bereits

gezeigt

. - * alle * leere Sammlungen (wenn sie gut geschrieben)

print("That is a nice name" if raw_input("what is your name?") in ("Kamran","Samaneh") 
     else "You have a boring name ;)") 
+2

Es gibt keine 'raw_input' in Python3 und' wenn name == ("Kamran" oder "Samaneh") 'ist einfach falsch als' if (name = = "Kamran" oder "Samaneh"). – Kabie

+0

Ich testete Name == ("Kamran" oder "Samaneh"). Wenn ich "Samaneh" eingebe, gibt es mir "Du hast einen langweiligen Namen;)" was nicht stimmt. –

+0

Ich verstehe absolut nichts, warum ich eine solche falsche und dumme Antwort geschrieben habe. Trotz der Tatsache, dass ich dieses Thema der Ketten als Booleans in Python vor einiger Zeit studiert hatte, und ich dachte, dass ich das Ding gut verstanden hatte, vermasselte ich völlig. – eyquem

Verwandte Themen