2012-07-04 96 views
0

好的,我正在製作一個輪盤遊戲。紡紗工着陸的隨機數稱爲'圖形'。這是一個非常基本和簡單的代碼,但它似乎不適合我。 現在你選擇一個特定的數字或選擇1 - 18.我嘗試了很多不同的方式,仍然沒有運氣。這是我的代碼。如果有人知道問題是什麼,請告訴我。感謝:Ifs和elifs在輪盤遊戲中不能正常工作 - python

numbers = ['1', '2', '3'.......'35', '36'] 

figure = choice(numbers) 

d = textinput("Pick bet", "") 

if int(figure) > 18 and d == '1-18' or '1 - 18' or '1- 18' or '1 -18': 
    pu() 
    goto(100,100) 
    write("Loser", font = ("Comic Sans MS", 30, "bold")) 

elif int(figure) < 19 and d == '1-18' or '1 - 18' or '1- 18' or '1 -18': 
    pu() 
    goto(10,100) 
    write("Well done", font = ("Comic Sans MS", 30, "bold")) 


elif int(d) in range(36) and int(figure) == int(d): 
    pu() 
    goto(100,100) 
    write("Well done", font = ("Comic Sans MS", 30, "bold")) 

elif int(d) in range(36) and int(figure) != int(d): 
    pu() 
    goto(100,100) 
    write("Loser", font = ("Comic Sans MS", 30, "bold")) 

回答

3

看:

if int(figure) > 18 and d == '1-18' or '1 - 18' or '1- 18' or '1 -18': 

這裏有幾個語句總是爲true;每個'1 - 18' or '1- 18' or '1 -18'是一個非空字符串。 int(figure)d具有什麼值並不重要。這意味着python將該行視爲if something or True的等效項。

你想要做的,而不是什麼是使用in運算符來測試,如果你的d是一個選項列表的一部分:

if int(figure) > 18 and d in ('1-18', '1 - 18', '1- 18', '1 -18'): 

同樣的問題適用於您的elif聲明。

+0

萬分感謝。完美工作。非常簡單的錯誤。謝謝 –

1

的問題就是,Python認爲如下:

if (int(figure) > 18 and d == '1-18') or '1 - 18' or '1- 18' ... 

布爾運算符比比較的優先級高,因此代碼不是做你的原意。相反,最後的字符串被解釋爲or的操作數,因此被解釋爲布爾值,在這種情況下總是爲True

你可以重寫它以下列方式:

if int(figure) > 18 and d in ['1-18', '1 - 18', '1- 18', '1 -18'] 

或者甚至可能去除的字符串中的空格,所以你只需要比較針對單個值:

if int(figure) > 18 and d.replace(' ', '') == '1-18' 
+0

請注意,如果'd'是''1 - 1 8'',就OP而言可能是錯誤的,但'd.replace'的情況使它成爲一個有效的答案。可能不是問題,但值得注意。 –

+0

的確,是的,一個正則表達式替換可能是一個更好的選擇,但我不得不查找這個答案的每一個細節,'string.replace'比're.replace' ;-)更快找到 – Joey