作业:
编写一个名为
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)
答案 0 :(得分: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)
答案 1 :(得分:0)
Henry Keiter的评论是正确的。只需在newlist.append(myList [i])
之前添加一个空格,它就可以正常工作。
或者,如果你的老师允许你,你可以使用制表符而不是空格来完全避免这个问题(只是确保你不要在同一个文件中使用它们)。
答案 2 :(得分: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]
>>>
答案 3 :(得分:0)
我之前的回答是不正确的,我真的应该在我张开嘴之前进行测试...... Doh !!!生活和学习......
修改强>
你的追溯给你答案。它将列表作为参数列表读取。不确定是否有超级pythonic方法绕过它,但你可以使用命名参数:
splitList(myList=yourList)
OR
splitList(myList=(1,2,3))
OR
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])
OR
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)
错误很可能告诉你这个问题,这就是该方法只接受一个参数,但我尝试传递两个参数,比如你的需求状态。
答案 4 :(得分: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]
你能说明你是如何调用方法和确切的错误信息吗?
答案 5 :(得分:-6)
修改强>
您能显示调用splitList方法的代码吗?
这是不正确的
myList [i]
是你的问题,你不能在那里有空间。 python对语法非常非常严格
因为人们似乎认为他们应该投票给我,让我解释一下:通过拥有该空格,您实际上说myList(这是一个列表)和[i],这是一个列表文字,其值为'i',索引为0 ....
所以你将两个变量(一个实际变量和一个文字)传递给append方法,不用逗号分隔,这将无效。