2

那作业:

编写一个名为的函数,该函数splitList(myList, option)将一个列表和一个选项作为输入,该选项为 0 或 1。如果选项的值为 0,则该函数返回一个列表,该列表由 myList 中为负的元素组成,如果该选项的值为 1,该函数返回一个列表,该列表由 myList 中的偶数元素组成。

我知道如何确定一个数字是否为偶数以及一个数字是否为负。我正在努力解决如何根据“选项”返回一个新的负数或偶数列表

这是我到目前为止所得到的:

def splitList(myList):
    newlist = []
    for i in range(len(myList)):
        if (myList[i]%2 == 0):
           newlist.append(myList [i])
    return newlist

该程序给出以下错误:

Traceback (most recent call last): File "<string>", line 1, in <fragment> 
builtins.TypeError: splitList() takes exactly 1 positional argument (4 given)
4

6 回答 6

2

正如我在评论中提到的,您应该标准化缩进:四个空格是 Python 标准。您通常可以将编辑器设置为插入四个空格而不是制表符(也不想将制表符与空格混合)。

至于您的实际问题:尝试编写三个总函数:一个返回所有负值,一个返回偶数值,另一个调用基于option.

def splitlist(myList, option):
    if option == 1:
        return get_even_elements(myList)
    elif option == 0:
        return get_negative_elements(myList)

def get_even_elements(myList):
    pass # Implementation this method here.

def get_negative_elements(myList):
    pass # Implementation this method here.

# Test it out!
alist = [-1, 2, -8, 5]
print splitlist(alist, 0)
print splitlist(alist, 1)
于 2013-03-07T19:16:25.883 回答
0

亨利凯特的评论是正确的。只需在前面添加一个空格newlist.append(myList [i]),它就可以正常工作。

或者,如果您的老师允许您,您可以使用制表符而不是空格来完全避免这个问题(只要确保您不在同一个文件中使用两者)。

于 2013-03-07T19:16:51.890 回答
0

我之前的回答是错误的,我真的应该在我开口之前测试一下...... 呵呵!!!活到老,学到老...

编辑

您的回溯正在给您答案。它将列表作为 args 列表读取。不确定是否有一种超级pythonic方式来解决它,但您可以使用命名参数:

splitList(myList=yourList)

或者

splitList(myList=(1,2,3))

或者

splitList(myList=[1,2,3])

但你的问题真的很可能

splitList(1,2,3,4)  # This is not a list as an argument, it is a list literal as your 'args' list

可以通过以下方式解决:

splitList([1,2,3,4])

或者

splitList((1,2,3,4))

这是你得到的回溯吗?

Traceback (most recent call last):
  File "pyTest.py", line 10, in <module>
    print splitList(aList,1)
TypeError: splitList() takes exactly 1 argument (2 given)

该错误很可能会告诉您问题,这将是该方法仅接受一个参数,但我尝试传入两个参数,例如您的需求状态。

于 2013-03-07T19:29:22.113 回答
0
def splitList(myList, option):
    return [i for i in myList if i<0] if option==0 else [i for i in myList if i>0]


# test
>>> myList=[2, 3, -1, 4, -7]
>>> splitList(myList, 0)
[-1, -7]
>>> splitList(myList, 1)
[2, 3, 4]
>>> 
于 2013-03-07T19:27:16.510 回答
0

我按原样尝试了你的代码,当我传入一个正整数列表时我没有收到任何错误,所以我不知道你的程序为什么“崩溃”,所以我怀疑有其他东西干扰了你的调试。(尽管正如其他人所说,您确实应该在每个缩进级别使用相同数量的空格。)

这是我输入的内容:

def splitList(myList):
    newlist = []
    for i in range(len(myList)):
        if (myList[i]%2 == 0):
           newlist.append(myList [i])  # Only 3-space indent here
    return newlist

print splitList([1, 2, 3, 4, 5])

当我运行它时:

[2, 4]

你能展示你如何调用该方法和确切的错误消息吗?

于 2013-03-07T19:30:03.887 回答
-6

编辑

你能在调用 splitList 方法的地方显示代码吗?

这是不正确的

myList [i]

是你的问题,你不能在那里有空间。python对语法非常非常非常严格

由于人们似乎认为他们应该对我投反对票,让我解释一下:

通过拥有该空间,您实际上说的是 myList(它是一个列表)和 [i],它是一个列表文字,其值为 'i' 在索引 0....

因此,您将两个变量(一个实际变量和一个文字)传递给 append 方法,而不是用逗号分隔,这将不起作用。

于 2013-03-07T19:13:18.157 回答