2013-01-08 126 views
-2

在我的Python程序有時會在我的if語句只有最上面的一個工作Python的if語句

這裏是我的程序 http://ubuntuone.com/0u2NxROueIm9oLW9uQVXra

當你,如果你去北東向西向南,然後它不運行程序「科技工作 的問題是在功能房間4():

def room4(): 
    """Forest go south to small town room 1 and east to forest path room8""" 
    room = 4 
    print "Forest you can go south to small town, east to forest path, or continue to explore the forest" 
    cmd = raw_input('> ') 
    cmd = cmd.lower() 
    if cmd == "e" or cmd == "east" or "go east": 
     print room8() 
    if cmd == "s" or cmd == "south" or "go south": 
     print room1() 
    if cmd == "forest" or cmd == "explore" or cmd == "explore forest" or cmd == "explore the forest": 
     print room13() 
    else: 
     print error() 
     print room4() 
+4

請將代碼放入問題中,以便我們無需下載即可在此閱讀。 –

+1

在'go east'和'go south'命令前面加'cmd ==' - 否則它們總是被評估爲'True'。 – RocketDonkey

+2

只是我還是應該在該文件的很多地方不使用'elif'而不是'if'? – hatmatrix

回答

5

在未來,請提供您的問題相關的代碼。我想你指的是以下幾點:

if cmd == "e" or cmd == "east" or "go east": 
    print room8() 
if cmd == "s" or cmd == "south" or "go south": 
    print room1() 
if cmd == "forest" or cmd == "explore" or cmd == "explore forest" or cmd == "explore the forest": 
    print room13() 
else: 
    print error() 
    print room4() 

,你將永遠進入第一if聲明的原因是,你有or "go east",而不是or cmd == "go east"。布爾上下文中的字符串(如if語句)評估爲true。

相反的if cmd == "e" or cmd == "east" or cmd == "go east",你可以使用以下命令:

if cmd in {"e", "east", "go east"}: 
    ... 

如果你是在Python 2.6或以下,其中不存在集文字,而不是{"e", "east", "go east"}使用set(("e", "east", "go east"))

+2

請注意,做一個像這樣的測試(有許多選項),而不是很多'或'的更好的方法是做'如果cmd在{「e」,「east」,「go east」}: '。 –

+0

@Lattyware雖然由於集建築開銷 - 儘管一組文字更加明確 - 用一個元組是更有效的,並且不依賴於2.7+ –

+0

@JonClements我想象中不同的是在大多數情況下可以忽略不計在這種情況下,但你是對的。 –