2014-02-12 4 views
2

Привет я сделать рок-ножницы-бумага игры и я сделал следующий сценарий до сих пор:Рок, бумага, ножницы (питон 3,3)

def main(): 
    from random import randint 
    UserChoices = input("'rock', 'paper' or 'scissors'? \n Input: ") 
    if UserChoices == "rock": 
     UserChoice = 1 
    elif UserChoices == "paper": 
     UserChoice = 2 
    elif UserChoices == "scissors": 
     UserChoice = 3 
    CpuChoice = randint(1,3) 
    if UserChoice == CpuChoice: 
     print("DRAW!") 
    elif UserChoice == "1" and CpuChoice== "3": 
     print("Rock beats scissors PLAYER WINS!") 
     main() 
    elif UserChoice == "3" and CpuChoice== "1": 
     print("Rock beats scissors CPU WINS") 
     main() 
    elif UserChoice == "1" and CpuChoice== "2": 
     print("Paper beats rock CPU WINS!") 
     main() 
    elif UserChoice == "2" and CpuChoice== "1": 
     print("paper beats rock PLAYER WINS!") 
     main() 
    elif UserChoice == "2" and CpuChoice== "3": 
     print("Scissors beats paper CPU WINS!") 
     main() 
    elif UserChoice == "3" and CpuChoice== "2": 
     print("Scissors beats paper PLAYER WINS!") 
     main() 
    elif UserChoice == "1" and CpuChoice== "2": 
     print("cpu wins") 
     main() 
    else: 
     print("Error: outcome not implemented") 
main() 

, но когда я запускаю его я получаю ошибку я сделал «Ошибка: результат не реализован» Может ли кто-нибудь сказать мне, почему это так? Спасибо.

+5

'UserChoice' и' CpuChoice' установлены в целые числа, и вы затем сравниваете их со строками , –

+1

в другом, сделайте печать значений, и вы поймете, почему –

+1

Не имеет отношения к вопросу, но я предлагаю вам сопоставить числа ramdom с строкой, а не наоборот. –

ответ

2

Это и все другие сравнения, подобные этим:

elif UserChoice == "1" and CpuChoice == "3": 

... должно быть:

elif UserChoice == 1 and CpuChoice == 3: 

Другими словами, вы должны сравнивать int с с int с, вместо int s со струнами, как это происходит прямо сейчас.

+1

Спасибо, я не могу поверить, что это было так просто! –

2

Пользовательский выбор установлен в целое число, однако вы сравниваете его со строкой. Оно должно быть следующим

if userChoice == 1: #Note no quotation marks 

Кроме того, вы разрешаете процессор выбрать из 3-х целых чисел, которая работает. Тем не менее, он может сохранить линии и быть более эффективными, чтобы выбрать случайный из массива

CPU_Moves = ['Rock','Paper','Scissors'] 
cpuchoice = random.choice(CPUMoves) 

Это позволит установить cpuchoice одному из случайной выборки из массива, а затем вы можете использовать его в сравнении пользовательского ввода cpuchoice. Это означало бы, что вам не нужно будет устанавливать userChoice, вы можете использовать то, что пользователь вводит напрямую.

0

удалите цитаты из инструкции if else. условные выражения ищут строку для сравнения, в то время как рок-бумага и ножницы назначаются целыми числами. они не обрабатываются одинаково. вам нужно изменить ваш if elif, чтобы не иметь котировок вокруг чисел. он печатает DRAW, потому что он сравнивает подобные элементы, и он дает и ошибку, потому что это не тот же тип переменной.

1

Как и в предыдущих ответах, вы закончили сравнение строки с целым числом. Было бы неплохо избежать использования множества условных обозначений. Вот «компактная версия» Я написал, в случае, если вы заинтересованы:

from random import randrange 

def RPS(user_choice = ''): 
    choices = ('rock', 'paper', 'scissors') 
    results = ('Draw!', 'You Win!', 'Cpu Wins!') 
    while user_choice not in choices: 
     user_choice = input("Choose: rock, paper or scissors? ") 
    user_num = choices.index(user_choice) 
    cpu_num = randrange(3) 
    diff = (user_num - cpu_num) % 3 
    print("You chose:", user_choice, "-", "Cpu chose:", choices[cpu_num]) 
    print(results[diff]) 

RPS('rock') # User choice can be passed as an argument. 

Обратите внимание, как вы можете вычислить победитель с вычитанием и операциями по модулю. Это еще более полезно в игре Rock, paper, scissors, lizzard, Spock, где у вас есть 5 вариантов вместо 3.

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