python 3: ошибка имени при вводе в функцию - PullRequest
0 голосов
/ 11 июня 2018

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

NameError: name 'num_1' is not defined.

Вот моя попытка:

def multiply(num_1, num_2):
    num_1 = input("enter a whole number:")
    num_2 = input("enter another whole number:")
    result = int(num_1)*int(num_2)
    return(num_1 + " * " + num_2 + " = " + str(result))

multiply(num_1, num_2)

Изменение кода для сбора вводапри вызове функции она проходит:

def multiply(num_1, num_2):
    result = int(num_1)*int(num_2) 
    return(num_1 + " * " + num_2 + " = " + str(result))

print(multiply(input("enter  a whole number: "), input("enter another whole number: ")))

Но я хочу знать, ВОЗМОЖНО ли собирать входные данные внутри функции в соответствии с указаниями.

Ответы [ 3 ]

0 голосов
/ 11 июня 2018

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

def multiply_two_numbers():
    x = input("Enter a number: ")
    y = input("Enter another number: ")
    return x*y

>>> multiply_two_numbers()
Enter a number: 10
Enter another number: 12.5
125.0
0 голосов
/ 11 июня 2018

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

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

Например: если у вас было:

multiply():
  num_1 = 2
  print(num1)

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

multiply():
  num_1 = 2

print(num1)

Вы получите NameError: num_1 не определено

0 голосов
/ 11 июня 2018

Поскольку ввод определяется пользователем, функция не имеет входных аргументов.Использование:

def multiply():
    num_1 = input("enter a whole number:")
    num_2 = input("enter another whole number:")
    result = int(num_1)*int(num_2) 
    return(str(num_1) + " * " + str(num_2) + " = " + str(result))

multiply()

Результаты :

'1 * 2 = 2'
...