2013-10-23 51 views
0

我正在用python寫東西,我不明白爲什麼這段代碼不起作用。將字符串設置爲由用戶輸入的字母

m = 1 
f = 0 
gender_choice = False 

while gender_choice == False: 
    gender = input('Are you male or female? Type m for male or f for female. ') 
    if gender == m or gender == f: 
    print 
    gender_choice = True 
else: 
    print 
    print "Hey, this is a text based game. Read and follow bro." 

print gender 

我想我明白,有與設置字符串爲「M」或「F」,但除非我改變的raw_input輸入,循環將繼續的問題。而且,正如目前所寫,如果用戶輸入除數字,m或f之外的任何內容,我將會得到一個錯誤信息,表示字符串未定義,例如,如果輸入「y」。

+0

您正在比較字符串和數字 –

+0

正如您目前所寫,您有'IndentationError',因爲''if'語句後面的行沒有縮進。 – roippi

+0

'm'是一個變量(在你的代碼中,它等於'1'),''m''是一個你要求用戶輸入的字符串,你正在分配名字'gender'。如果用戶輸入'm'作爲他們的答案,你的if語句就是'if'm'== 1',這當然永遠不會是真的 –

回答

1

好的,首先檢查你的縮進!

這是我怎麼會認爲你想它看:

m = 1 
f = 0 
gender_choice = False 

while gender_choice == False: 
    gender = input('Are you male or female? Type m for male or f for female. ') 
    if gender == m or gender == f: 
     print 
     gender_choice = True 
    else: 
     print 
     print "Hey, this is a text based game. Read and follow bro." 

print gender 

那麼當你的if語句被評估爲假,這始終是在目前,因爲你的else語句只會得到執行它會評估是否性別== 1或性別== 0,只有當您的用戶沒有「閱讀並遵循bro」時纔會發生這種情況。我不知道,如果你需要的M和F變量後面的代碼,但我會假設你做什麼,所以我會做的是:

gender_choice = False 

while gender_choice == False: 
    gender = raw_input('Are you male or female? Type m for male or f for female. ') 
    if gender == "m": 
     print 
     gender_bool = 1 
     gender_choice = True 
    elif gender == "f": 
     print 
     gender_bool = 0 
     gender_choice = True 
    else: 
     print "\nHey, this is a text based game. Read and follow bro.\n" 

print gender 

這樣,你的邏輯工程和m和f變量已被放入一個變量(gender_bool)中,後者可以在後面的邏輯中進行評估,if語句評估更有意義的東西(imho),並使用raw_input,這樣就可以在其中輸入任何內容而不會產生錯誤(並且我添加了一些\ n(linebreaks)來取悅我的強迫症:P)。

+0

它的工作原理與我想象的一樣,謝謝。我不太明白布爾是怎麼做的,爲什麼我需要它。我暫時評論它,並且沒有它的代碼功能相同。 –

+0

@TylerDuncan我把gender_bool放在原代碼中的前導m = 1 f = 0 vars的地方,以爲你有他們那裏的原因......但你可以稍後在你的文本遊戲邏輯中使用它,看看char是男性還是女性。 –

相關問題