2014-04-15 39 views
0

我正在對python進行受控評估。其中一項任務是按照一定的標準建立自動售貨機。我非常糟糕的蟒蛇,我可能是一個白癡,做錯了。Python編碼 - 自動售貨機 - 如何讓用戶只輸入某些硬幣?

我想讓用戶只輸入10,20,50,1.00個硬幣。如果用戶輸入除這些硬幣以外的任何東西,我希望它打印「機器不接受這些硬幣」。

這是我到目前爲止有:

inp = input("Enter Coins, Note: Machine only accepts 10, 20, 50 and 100 coins: ") 
value = [10,20,50,100] 
if inp != value: 
    print("Machine doesn't accept these coins") 
else: 
    print("What would you like to buy?") 
+0

'inp!= value'比較'inp'和'value'的值。你會想要檢查'value' [包含]'inp'(http://stackoverflow.com/questions/12934190/is-there-a-short-contains-function-for-lists-in-python)'inp'。 – dirn

+0

'input'將返回一個字符串,而不是一個整數,所以要小心你如何比較類型。 – dirn

+0

@dirn我該怎麼做?它是否必須被輸入(int(? – SteveS

回答

2

在這裏,你想:

if any(int(coin) not in value for coin in inp.split()): 
    print("Machine doesn't accept these coins") 

這是什麼基本上做它split了輸入到單獨的硬幣,將它們轉換爲整數,(因爲values中的項是整數)然後檢查它是否爲not in values,這當然意味着它是無效的。

最後,直到它找到一個無效的硬幣(看看any)。在那,它會print硬幣無效。如果沒有,那麼它將繼續到else

+0

感謝兄弟,它工作:))我唯一不理解的是硬幣不是無效的語法? – SteveS

+0

@SteveS當我們正在檢查'inp'中的每個值時,硬幣只是表示我們正在分析的當前值,它不是作爲全局變量存在的,它只是一種表示。這就是爲什麼沒有錯誤。 –

+1

這是一個使用*生成器表達式*的非常漂亮的代碼。 'inp.split()'說:「把'inp.split()'創建的列表中,並將該列表中的每個值依次賦值爲'coin'對於'coin'的每個值,我們評估表達式「int(coin)not in value」(意思是「如果硬幣的值在數組中爲'*',則爲'真';否則爲'假');如果結果列表中的布爾值列表被傳遞給'any()',如果列表中的任何值爲'true',則其值爲'true';否則爲'false'。單一表達式中的一段精美的代碼。 –