Имя не определено, когда я пытаюсь напечатать разделенный список в Python - PullRequest
0 голосов
/ 02 февраля 2019

Мой код дает мне имя, которое не определено:

Traceback (most recent call last): File "split.py", line 22, in print(even)
NameError: name 'even' is not defined

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

Инструкция: Мы передаем список номеров.Вам нужно создать 2 новых списка на вашем графике, затем:

  • положить все нечетные числа в один список
  • поместить все четные числа в другой список
  • outputпервый нечетный список, второй четный список

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

Не забудьте определить 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 ]

0 голосов
/ 02 февраля 2019

Прежде всего, добро пожаловать в Python!

Есть несколько проблем с вашим кодом.

Сначала в Split() вы запускаете if i == isEven:.Это проверяет, совпадает ли i с isEven, а это не так.isEven - это функция , а i - это целое число , поэтому они никогда не могут быть одинаковыми.Поскольку вы пытаетесь проверить, является ли i четным, вы должны передать i в isEven().Затем isEven выводит логическое значение , говоря, является ли число четным или нет:

if isEven(i):

Это проверяет, является ли i четным.

Во-вторых,переменные имеют то, что называется scope .Область действия - это то, где переменная определена и откуда она может быть доступна.Поскольку вы определяете 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

Если вы все еще не до конца понимаете, почему это сработает и почему ваш текущий код возвращает ошибку, я бы посоветовал вам спросить об этом своего учителя, так как онимогу вам объяснить это лучше всего.

0 голосов
/ 02 февраля 2019

Вы объявляете четное и нечетное в локальной области действия функции.попробуйте вернуть два списка в виде кортежа или чего-то еще.

def Split(numbers):
  even = [ ] 
  odd = [ ] 
  for i in numbers:
    if i == isEven:
      even.append(i)
    else: 
      odd.append(i)
  rerturn (odd, even)

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

...