0

我的代码给了我一个未定义名称的错误:

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)
4

2 回答 2

3

首先,欢迎来到 Python!

您的代码存在多个问题。

首先,在 中Split(),您运行if i == isEven:. 这将检查是否i与 相同isEven,而事实并非如此。isEven是一个函数,并且i是一个整数,所以它们永远不会相同。由于您正在尝试检查是否i偶数,因此您必须传入iisEven(). 然后,isEven输出一个boolean,说明数字是否为偶数:

if isEven(i):

那检查是否i是偶数。

其次,变量有一个叫做范围的东西。范围是定义变量的位置以及可以从中访问它的位置。因为您定义了evenand oddin Split(),所以只能从函数内部的代码中访问它们。这就是为什么您可以在 内部附加内容Split(),但不能print()在最后附加内容。要解决此问题,您必须返回变量evenodd.

同样,必须先调用函数,然后才能运行其中的代码。现在,该函数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

如果您仍然不完全理解为什么这会起作用,以及为什么您当前的代码会返回错误,我建议您询问您的老师,因为他们可以向您最好地解释它。

于 2019-02-02T20:16:58.120 回答
1

您在函数的本地范围内声明偶数和奇数。尝试以元组或其他方式返回两个列表。

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

这不是你应该使用的代码,但我希望你能从这里弄清楚:)

于 2019-02-02T20:05:11.643 回答