2017-02-15 64 views
1

即使computer_card較高,下面的代碼仍會繼續打印You Win!程序未按預期結束

import random 

computer_card = random.choice([2,3,4,5,6,7,8,9,10,11,12,13,14]) 
player_card = raw_input('Please pick a card \n') 

if player_card == 'Jack' or player_card == 'jack': 
    player_card = 11 

if player_card == 'Queen' or player_card == 'queen': 
    player_card = 12 

if player_card == 'King' or player_card == 'king': 
    player_card = 13 

if player_card == 'Ace' or player_card == 'ace': 
    player_card = 14 

if computer_card == player_card: 
    print 'Computer Choice: ', computer_card 
    print 'Player Choice: ', player_card 
    print 'Tie!' 

elif computer_card > player_card: 
    print 'Computer Choice: ', computer_card 
    print 'Player Choice: ', player_card 
    print 'Computer Wins!' 

elif computer_card < player_card: 
    print 'Computer Choice: ', computer_card 
    print 'Player Choice: ', player_card 
    print 'You Win!' 

else: 
    print 'I am not sure what is really going on if you got to this line.' 
+3

典型問題:將字符串與整數進行比較。這可能是Python-2.x? –

+0

@WillemVanOnsem它是Python-2.7,當你說比較字符串與整數...你的意思是? player_card = int(raw_input('請選擇一張卡片\ n')) – JaySnel

回答

2

問題:

通過raw_string讀取的輸入()被轉換成字符串。因此,線,

player_card=raw_input()

讀取輸入,將其轉換爲字符串,並把它放在player_card。而'1' > 9

一個可能的修正:

改變比較流量和轉換輸入爲int如果輸入不是[「傑克」,「皇后」,「王」或「王牌」]

if player_card == 'Jack' or player_card == 'jack': 
    player_card = 11 

elif player_card == 'Queen' or player_card == 'queen': 
    player_card = 12 

elif player_card == 'King' or player_card == 'king': 
    player_card = 13 

elif player_card == 'Ace' or player_card == 'ace': 
    player_card = 14 
else: 
    player_card = int(player_card) 

進一步改進:雖然此解決方案應解決眼前的問題,但代碼可以大大改進。一些改進建議,

  1. 確保您的代碼可以處理來自用戶的無效輸入[永遠不要相信 用戶輸入]

  2. 使用字典或列表,用戶輸入轉換爲數字 值,而不是辦案逐個。

+0

如果用戶輸入錯誤的字符串,例如輸入錯誤。我認爲OP需要重寫他的整個代碼。否則+1。該解決方案將解決當前的問題。 –

+1

@ChihebNexus:同意。這更多的是解決眼前的問題,而不是提供完美的解決方案。我想我們可以把它當做家庭作業;-) – Fallen

+0

當然可以。如果你想要,你可以編輯你的答案,並提及它:-)這將有助於OP。 –

0

raw_input將一個字符串放入變量player_card。當玩家選擇King,Queen,Ace,Jack時,player_card的值由if聲明更改爲int。但是,如果player_card不是這些,player_card中的值仍然是一個字符串。 Like @Fallen said,這可以通過將player_card轉換爲int來修復。

+0

爲什麼重複其他答案? –

+1

我只是覺得答案需要解釋爲什麼它會出現問題以及它出錯的地方:) – rithvikp

+0

@rithvikp感謝您的回答!雖然我遲了兩天....大聲笑 – JaySnel