Что не так с этим кодом Python?Я получаю ошибку после ввода - PullRequest
2 голосов
/ 28 декабря 2011
while print('Type ROLL to roll for your stats.'):
    roll = input() # I get my error right after I input
    if roll == "roll" or roll == "ROLL":
        strength = random.randint(1, 100)
        defense = random.randint(1, 100)
        attack = random.randint(1, 100)
    print('Your attack level is ' + attack + '.')
    print('Your strength level is ' + strength + '.')
    print('Your defense level is ' + defense + '.')
    print('Would you like to reroll?')
    reroll = input()
    if reroll == no or reroll == NO:
        break

Моя ошибка

Traceback (most recent call last):
roll
NameError: name 'roll' is not defined

Ответы [ 5 ]

3 голосов
/ 28 декабря 2011

Несколько вещей здесь и там:

  • Ваш цикл while не будет работать, поскольку возвращаемое значение print равно None. Это не будет выполняться, что я не думаю, что было задумано Вы можете изменить это на неопределенный цикл с помощью while True или while 1. Ваш код теоретически вырвется из цикла, когда кто-то введет "нет", но мы доберемся до этого ...

  • Вы можете изменить свои операторы input(), чтобы они содержали текст, который вы хотите отобразить в терминале, прежде чем они введут значение. Например, вы можете изменить один из них на roll = input('Type ROLL to roll for your stats.)

  • Ни no, ни NO не определены как переменные. Помните, что они должны быть строк , чтобы их можно было оценить, поскольку это то, что вы ищете. В будущем, возможно, будет полезно взглянуть на такой оператор, как if reroll.lower() == 'no', так как это сохранит повторную типизацию для нескольких значений ввода строки.

Надеюсь, это поможет вам выбрать правильный путь Не забывайте, что если вы видите ответ, который вам нравится, не стесняйтесь принять его (чтобы сообщество знало, что вы получили ответ).

2 голосов
/ 28 декабря 2011

Поскольку вы, похоже, используете Python 2.x, используйте raw_input вместо input. Возможно, вы следуете учебнику, разработанному для Python 3.x.

0 голосов
/ 28 декабря 2011
roll = input('Type ROLL to roll for your stats. ')
if roll == "roll" or roll == "ROLL":
    #do your stats roll here
reroll = input('Would you like to reroll? ')
if reroll == 'no' or reroll == 'NO':
    break

Я считаю, что ваша ошибка, скорее всего, связана с тем, что вы печатаете вопрос, а затем пропускаете пустую функцию input ().Когда вы используете функцию ввода, вы должны вводить свой вопрос в виде строки в скобках.

input('Place your question / prompt here, with a space at the end so there is a gap between the question and your input: ')

Кроме того, когда вы проверяете, равняется ли reroll нулю или нет, вы должны помнить, что словаno и NO должны заключаться в кавычки для обозначения строки!Python видит все, что не находится в кавычках, как число, переменную, функцию или зарезервированное слово (например, OR).Если вы еще не объявили переменную no и NO, ваша программа не будет работать.Поэтому вы должны либо ставить одинарные или двойные кавычки вокруг слов no и NO, либо в начале программы вы должны объявлять их как переменные, например,

no = 'no'
NO = 'NO'

Также цикл while прерывается.Для бесконечного цикла установите первый оператор на While True.Если вы хотите, чтобы цикл прерывался при выполнении определенного условия, объявите другую переменную до начала цикла и установите для нее значение True (логическое значение true, а не слово true).Как только это будет сделано, вы можете установить эту переменную в логическое значение False, чтобы выйти из цикла

rolling = True
While rolling:
    #do stuff
If exitcondition == True:
    rolling = False # When exitcondition is True, rolling is False and the loop is broken
0 голосов
/ 28 декабря 2011

В Python 2 использование команды input вызывает ошибку, которую вы описываете:

>>> blah = input()
roll
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in <module>
NameError: name 'roll' is not defined

Для Python 2 вы должны использовать raw_input:

>>> blah = raw_input()
roll
>>> print blah
roll

В Python 3 первый пример работает нормально - raw_input был переименован в input - возможно, вы случайно запустили неправильную команду? Вы можете проверить это, выполнив:

import sys
print sys.version

.. в вашем скрипте где-то

0 голосов
/ 28 декабря 2011

Возможно:

roll = eval(input())

или

import sys roll = sys.stdin.readline()

согласно: http://docs.python.org/release/3.0.1/whatsnew/3.0.html

http://www.python.org/dev/peps/pep-3111/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...