int (input ()) error - NameError: имя '…' не определено

1

Я получаю сообщение об ошибке, когда пытаюсь запустить этот простой скрипт python:

def ask_x():
    x = int(input('What is X?'))

def ask_y():
    y = int(input('What is Y?'))

def result():
    print(z)

def count():
    if (x>10):
        z = x + y
    else:
        z = 0
        print('nono')


#start of program
ask_x()
ask_y()
count()
result()

Я использую Python 3. Я попытался найти форум и нашел qaru.site/questions/36287/... но это не работает для меня.

Теги:
python-3.x

4 ответа

0
Лучший ответ

Это связано с тем, что ваши переменные находятся в локальной области. Вы не можете получить доступ к x вне функции ask_x().

Я бы предложил вам ознакомиться с функциями, чтобы лучше понять это.

def ask_x():
    return int(input('What is X?'))

def ask_y():
    return int(input('What is Y?'))

def result(z):
    print(z)

def count(x, y):
    if (x>10):
        return  x + y
    else:
        print('nono')
        return 0


#start of program
x = ask_x()
y = ask_y()
z = count(x, y)
result(z)

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

Затем вы можете отправить x и y качестве параметров для count(), позаботиться о своей логике и вернуть значение, которое будет храниться как z.

Я надеюсь это имеет смысл!

  • 1
    Спасибо помогает спасибо
0

Python следует за областью действия функции, в отличие от некоторых других языков, таких как c, которые следуют за областью обзора. Это означает, что переменные, определенные внутри функции, не могут быть доступны за пределами. если они не определены глобально.

Решение вашей проблемы: вы можете вернуть их в свои функции и сохранить их в переменных в глобальной области действия или поместить все входные операторы внутри одной функции.

0

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

def ask_x():
    return int(input('What is X?'))

def ask_y():
    return int(input('What is Y?'))

def result(z):
    print(z)

def count(x,y):
    if (x>10):
        z = x + y
    else:
        z = 0
        print('nono')
    return z

#start of program
x = ask_x()
y = ask_y()
z = count(x,y)
result(z)

Было бы лучше использовать один из способов, представленных в разделе Как запросить у пользователя действительный ввод, чтобы получить доступ к вашему вводу:

def askInt(text):
    """Asks for a valid int input until succeeds."""
    while True:
        try:
            num = int(input(text))
        except ValueError:
            print("Invalid. Try again.") 
            continue
        else:
            return num

x = askInt("What is X?") 
y = askInt("What is Y?")

Таким образом вы передаете изменяющееся значение (текст) и получаете прибыль от анализа переменных и проверки.

0

Если вы не хотите возвращаться, просто инициализируйте переменную с некоторыми значениями по умолчанию

x=0
y=0
z=0
def ask_x():
    global x
    x = int(input('What is X?'))

def ask_y():
    global y
    y = int(input('What is Y?'))

def result():
    global z
    print(z)

def count():
    global x,y,z
    if (x>10):
        z = x + y
    else:
        z = 0
        print('nono')


#start of program
ask_x()
ask_y()
count()
result()
  • 1
    не работает, если вы не объявили x / y / z global внутри функций.
  • 1
    Да, не осознавал этого. Спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню