2017-02-15 3 views
1

Ниже код продолжает печатать You Win!, хотя computer_card выше.Программа не заканчивается как ожидалось

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

Один из возможных решений:

Изменить сравнение потока и преобразования входного в целое, если вход не [ «Джек», «Королева», «царь» или «ас»]

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. Когда игрок выбирает Короля, Королеву, Туз, Джек, значение player_card изменяется на int операциями if. Но если player_card является чем-то иным, чем это, значение в player_card остается строкой. Like @Fallen said, это можно исправить путем преобразования player_card в int.

+0

Зачем повторять другие ответы? –

+1

Я просто почувствовал, что ответ должен объяснить, почему это происходит неправильно вместе с тем, где это происходит неправильно :) – rithvikp

+0

@rithvikp Спасибо за ответ! хотя я на два дня опоздал .... lol – JaySnel

Смежные вопросы