Имя не определено, когда я пытаюсь напечатать разделенный список в Python
Мой код дает мне имя не определена ошибка:
Traceback (most recent call last): File "split.py", line 22, in print(even)
NameError: name 'even' is not defined
Вот инструкции и то, что я написал... если бы кто-то мог указать мне правильное направление, это было бы оценено.
Инструкция: Мы передаем список номеров. Вам нужно создать 2 новых списка на вашем графике, а затем:
- положить все нечетные числа в один список
- положить все четные числа в другой список
- сначала выведите нечетный список, затем четный список
Совет: вы должны использовать оператор по модулю, чтобы решить, является ли число нечетным или четным. Мы предоставили функцию для вызова, которая делает это.
Не забудьте определить 2 новых списка, прежде чем начинать добавлять к ним элементы.
# Get our input from the command line
import sys
numbers = sys.argv[1].split(',')
for i in range(0,len(numbers)):
numbers[i]= int(numbers[i])
def isEven(n) :
return ((n % 2) == 0)
def Split(numbers):
even = [ ]
odd = [ ]
for i in numbers:
if i == isEven:
even.append(i)
else:
odd.append(i)
print(even) # <= error here: NameError: name 'even' is not defined
print(odd)
2 ответа
Прежде всего, добро пожаловать в Python!
Есть несколько проблем с вашим кодом.
Первый в Split()
, ты бежишь if i == isEven:
, Это проверяет, i
такой же как isEven
, что это не так. isEven
это функция, и i
является целым числом, поэтому они никогда не могут быть одинаковыми. Так как вы пытаетесь проверить, i
это даже, вы должны пройти i
в isEven()
, Затем, isEven
выводит логическое значение, говоря, является ли число четным или нет:
if isEven(i):
Это проверяет, i
даже.
Во-вторых, переменные имеют то, что называется областью действия. Область действия - это то, где переменная определена и откуда она может быть доступна. Потому что вы определяете even
а также odd
в Split()
, они могут быть доступны только из кода внутри функции. Вот почему вы можете добавлять вещи к нему внутри Split()
, но нет print()
это в конце. Чтобы это исправить, вы должны вернуть переменные even
а также odd
,
Кроме того, функции должны быть вызваны в первую очередь до запуска кода внутри них. Прямо сейчас, функция Split()
определяется, но никогда не запускается, поэтому even
а также odd
не может существовать, даже если вы вернете их.
Как isEven()
вернул логическое значение, в котором было указано, является ли число четным или нечетным, и вы смогли получить к нему доступ в Split()
Вы можете вернуть два списка из него, что позволит вам получить к ним доступ и распечатать их. Чтобы сделать это, добавьте это в конце:
return even, odd
Теперь всякий раз, когда вы звоните Split()
, он вернет кортеж из двух списков, после чего вы сможете получить доступ к отдельным элементам и напечатать:
output = Split(numbers) # Get the output from Split()
even = output[0] # Get the first element of the output, the evens
odd = output[1] # Get the second element of the output, the odds
print(even) # Print even
print(odd) # Print odd
Если вы все еще не до конца понимаете, почему это сработает, и почему ваш текущий код возвращает ошибку, я бы посоветовал вам спросить об этом вашего учителя, поскольку они могут объяснить вам это лучше всего.
Вы объявляете четное и нечетное в локальной области действия функции. попробуйте вернуть два списка в виде кортежа или чего-то еще.
def Split(numbers):
even = [ ]
odd = [ ]
for i in numbers:
if i == isEven:
even.append(i)
else:
odd.append(i)
rerturn (odd, even)
Это не тот код, который вы должны использовать, но я надеюсь, что вы можете понять это отсюда:)