Имя не определено, когда я пытаюсь напечатать разделенный список в 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)

Это не тот код, который вы должны использовать, но я надеюсь, что вы можете понять это отсюда:)

Другие вопросы по тегам