2017-02-15 5 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答えをありがとう!私は2日遅れています....笑 – JaySnel

関連する問題