2013-09-25 5 views
0

Я просмотрел другие сообщения по этой теме, но до сих пор не могу найти, что я делаю неправильно в начале. Вместо скалы, бумаги и ножниц я использую python, ruby ​​и java. Это еще не сделано. Я еще не в циклы if, но если пользователь вводит что-то другое, то «python», «ruby» или Java », я хочу, чтобы он тоже печатал« Игра окончена ». Я получаю сообщение об ошибке я поступил не определен. Может кто-то наставит меня в направлении мне нужно идти? Я думаю, что я запутался при сравнении UserInput к gameList, так как gameList список.Простая игра в python

import random 
def pythonRubyJava(): 
    gameList = ["python","ruby","java"] 
    userInput = input("python, ruby, or java?:") 
    randomInput = random.choice(gameList) 
    if userInput != gameList: 
     print "The game is over" 

я получил, что часть разобралась. Мне нужно хранить «питон», «рубин», и «Java», как переменные, чтобы продолжить сейчас? Или где бы вы делать?

import random 
def pythonRubyJava(): 
    gameList = ["python","ruby","java"] 
    userInput = raw_input("python, ruby, or java?:") 
    randomInput = random.choice(gameList) 
    print randomInput 
    if userInput not in gameList: 
     print "The game is over" 
    if userInput == "python" and randomInput == "python": 
     print "stalemate" 
    if userInput == "ruby" and randomInput == "ruby": 
     print "stalemate" 
    if userInput == "java" and randomInput == "java": 
     print "stalemate"   

Вместо того, чтобы один и тот же ответ, я хочу, чтобы иметь возможность запускать игра снова и не иметь ее при nt тупик, чтобы закончить игру, просто начните. Я знаю, что мне придется удалить «печатный» тупик », но я просто хотел это показать.

+0

Вы хотели бы сравнить UserInput с randomChoice, а не весь список, не так ли? Хотя сравнение должно быть более сложным, чтобы быть похожим на RPS. – JAL

+2

Плюс, я считаю, что если Java бьет либо Python, либо Ruby, юниверс поднимет «LogicError», что затруднит запись кода RPS. :) – abarnert

+0

Нужно ли мне хранить 3 строки в качестве переменных? Извините за мое замешательство. –

ответ

1

Вам необходимо использовать raw_input() вместо input().

import random 
def pythonRubyJava(): 
    gameList = ["python","ruby","java"] 
    userInput = raw_input("python, ruby, or java?:") 
    randomInput = random.choice(gameList) 
    if userInput != randomInput: 
     print "The game is over" 

При использовании input(), вход должен быть отформатирован правильно пользователем, то есть «Java» в кавычки.

+0

Благодарим за помощь. Я начинаю высказывание if, для которого что-то бьет, но не совсем понимает его полностью. Нужно ли хранить python, ruby ​​и java в качестве переменных для игры? –

+0

Нет, просто измените его на raw_input и посмотрите на мой ответ для следующей части. – yuvi

0

Используйте not in оператор:

if userInput not in gameList: 
    print "The game is over" 
+0

все еще говорит, что игра не определена после ввода –

+1

См. Ответ Йенса Эрата для исправления. Однако вам все равно нужно использовать не в операторе, а не! = –

2

ваше состояние всегда будет ложным, потому что вы сравниваете строку со списком. То, что вы хотите сделать, это проверить, строка ли внутри список, как это:

if userInput not in gameList: 
    print "game is over" 
+0

, который до сих пор является моим кодом, я просто хочу получить эту часть прямо перед тем, как двигаться дальше. Я изменил эту строку кода, но по-прежнему появляется ошибка. Что-то я должен изменить в своем коде в gameList? –

+0

Другие ответы, проблема заключается в использовании ввода вместо raw_input. Кроме того, в общем никогда не используйте ввод (если не используете python 3.x) – yuvi

3

Ошибка возникает в строке 4, который считывает данные, введенные пользователем. Проблема в том, что input(...) анализирует выражение после чтения из командной строки, поэтому строки должны быть указаны.

Использование raw_input(...) вместо:

userInput = raw_input("python, ruby, or java?:") 
1

Я предполагаю, что вы пытаетесь увидеть, если вход же со случайным выбором между тремя, в этом случае используйте randomInput вместо gameList. и использовать raw_input, так что python могут быть введены вместо "python"

отредактированной обратиться вашу правку

import random 
def pythonRubyJava(): 
    gameList = ["python","ruby","java"] 
    userInput = raw_input("python, ruby, or java?:") 
    randomInput = random.choice(gameList) 

    if userInput not in gameList: 
     print "The game is over" 
    if userInput == randomInput: 
     print "stalemate" 
+0

благодарю вас за помощь. Теперь я не хочу, чтобы эта игра была привязана, поэтому мне понадобится цикл while, посмотрите мой обновленный код выше и посмотрите, можете ли вы сказать мне, куда его вставить. Прямо сейчас у меня нет цикла, он просто печатает тупик, но я хочу принять это, если игра снова будет запущена, если они будут одинаковыми. –

+0

Ну, тогда вместо трех ifs просто используйте 'if userInput == randomInput print" stalemate "'. см. править выше – Ananta

+0

Я понимаю, но как я запускаю программу, если они такие же, я не хочу, чтобы она заканчивалась в тупике. –

0

На самом деле, ответ представляет собой сочетание обоих вариантов ответов, которые я видел до сих пор.

Во-первых, input() не возвращает строку, он возвращает буквальные символы, введенные, поэтому при вводе «питон», он ищет переменную python, которая не существует.

Вы должны окружить вход в кавычки для того, чтобы работать, но есть лучший способ.Используйте raw_input(), который берет ввод как строковое значение.

Кроме того, когда вы исправили, что вы придете к ошибке на строке 6. В шестой строке, вы сравниваете ответ на весь список, но это должно быть по сравнению с каждым элементом в список.

легко решается с:

if userInput not in gameList: 
    #execute 
Смежные вопросы