“这是什么意思?”;int类型的对象没有长度;用python?
我尝试在Windows10上用Python 3.6.5编写一个程序,它将接受整数,然后打印出奇数 这是我的代码:“这是什么意思?”;int类型的对象没有长度;用python?,python,python-3.x,int,syntax-error,Python,Python 3.x,Int,Syntax Error,我尝试在Windows10上用Python 3.6.5编写一个程序,它将接受整数,然后打印出奇数 这是我的代码: def listInput(): aList = list() while True: num = input("Please input a number:") if num == 'done': break num = int(num) aList.append(num)
def listInput():
aList = list()
while True:
num = input("Please input a number:")
if num == 'done':
break
num = int(num)
aList.append(num)
return aList
def isOddNumber(y):
if y%2 == 0:
return False
else:
return True
def filterOddInList(a):
i = len(a)
while i >= 0:
item = a[(i-1)]
odd = filterOddInList(item)
if odd == False:
x.pop()
def main():
a = listInput()
print(a)
a = filterOddInList(a)
print(a)
main()
这是应该发生的事情:
Please input a number:1
Please input a number:2
Please input a number:3
Please input a number:4
Please input a number:5
Please input a number:done
[1, 2, 3, 4, 5]
[1, 3, 5]
Please input a number:1
Please input a number:2
Please input a number:3
Please input a number:4
Please input a number:5
Please input a number:done
[1, 2, 3, 4, 5]
Traceback (most recent call last):
File "C:\Users\Jerry Cui\Documents\New folder\Homework\oddonly.py", line 30, in <module>
main()
File "C:\Users\Jerry Cui\Documents\New folder\Homework\oddonly.py", line 27, in main
a = filterOddInList(a)
File "C:\Users\Jerry Cui\Documents\New folder\Homework\oddonly.py", line 20, in filterOddInList
odd = filterOddInList(item)
File "C:\Users\Jerry Cui\Documents\New folder\Homework\oddonly.py", line 17, in filterOddInList
i = len(a)
TypeError: object of type 'int' has no len()
事实就是这样:
Please input a number:1
Please input a number:2
Please input a number:3
Please input a number:4
Please input a number:5
Please input a number:done
[1, 2, 3, 4, 5]
[1, 3, 5]
Please input a number:1
Please input a number:2
Please input a number:3
Please input a number:4
Please input a number:5
Please input a number:done
[1, 2, 3, 4, 5]
Traceback (most recent call last):
File "C:\Users\Jerry Cui\Documents\New folder\Homework\oddonly.py", line 30, in <module>
main()
File "C:\Users\Jerry Cui\Documents\New folder\Homework\oddonly.py", line 27, in main
a = filterOddInList(a)
File "C:\Users\Jerry Cui\Documents\New folder\Homework\oddonly.py", line 20, in filterOddInList
odd = filterOddInList(item)
File "C:\Users\Jerry Cui\Documents\New folder\Homework\oddonly.py", line 17, in filterOddInList
i = len(a)
TypeError: object of type 'int' has no len()
请输入一个数字:1
请输入一个数字:2
请输入一个数字:3
请输入一个数字:4
请输入一个数字:5
请输入一个数字:完成
[1, 2, 3, 4, 5]
回溯(最近一次呼叫最后一次):
文件“C:\Users\Jerry Cui\Documents\New folder\combiness\oddnoy.py”,第30行,在
main()
文件“C:\Users\Jerry Cui\Documents\New folder\combiness\oddnoy.py”,第27行,在main中
a=过滤器添加列表(a)
文件“C:\Users\Jerry Cui\Documents\New folder\Homebook\oddonly.py”,第20行,在FilterAddInList中
奇数=过滤器添加列表(项目)
文件“C:\Users\Jerry Cui\Documents\New folder\Homebook\oddonly.py”,第17行,在FilterAddInList中
i=len(a)
TypeError:类型为“int”的对象没有len()
有人能告诉我为什么会发生此错误,正确的代码应该是什么吗?问题在于
过滤器添加列表中的递归。您使用项调用它,该项是一个数字。当您到达len(a)
时,它尝试提取数字的长度,但失败。问题在于过滤器添加列表中的递归。您使用项调用它,该项是一个数字。当您到达len(a)
时,它试图提取一个数字的长度,但失败了。您可能希望将其简化一点。您可以使用列表将两个函数合并为一行。我已经重写了下面的一些代码
def list_input():
a_list = []
while True:
num = input("Please input a number:")
if num == 'done':
break
num = int(num)
a_list.append(num)
return a_list
def odds_only(list):
return [x for x in list if x % 2 == 1]
if __name__ == "__main__":
list = list_input()
print(list)
odds = odds_only(list)
print(odds)
列表理解是[x表示列表中的x,如果x%2==1]
。它说:“让我们处理列表中的每个项目
。我们将每个项目称为x
。如果x
是奇数,则将其放入新列表中。”
换句话说
[(新列表中的内容)对于(旧列表中的项目)在(列表)if(include子句)]您可能希望将其简化一点。您可以使用列表将两个函数合并为一行。我已经重写了下面的一些代码
def list_input():
a_list = []
while True:
num = input("Please input a number:")
if num == 'done':
break
num = int(num)
a_list.append(num)
return a_list
def odds_only(list):
return [x for x in list if x % 2 == 1]
if __name__ == "__main__":
list = list_input()
print(list)
odds = odds_only(list)
print(odds)
列表理解是[x表示列表中的x,如果x%2==1]
。它说:“让我们处理列表中的每个项目
。我们将每个项目称为x
。如果x
是奇数,则将其放入新列表中。”
换句话说
[(新列表中的内容)对于(旧列表中的项目)在(列表)if(include子句)]您的代码有几个问题:
1) 也许你是想打电话给奇数=isOddNumber(a[i-1])
解决该问题后,您将遇到以下错误:“未定义名称“x”。
我假设您打算在函数的开始处对x=a
解决该问题后,您将遇到语句x.pop()
的问题。
pop()
从列表中删除最后一项。
因此,如果x=[1,2,3,4,5]
,x.pop()
将导致x=[1,2,3,4]
。另一个x.pop()
将导致x=[1,2,3]
等等。您需要的是x。删除(项目)
总之,请将您的filterOddInList
更正为:
def filterOddInList(a):
i = len(a)
x = a
while i >= 0:
item = a[(i-1)]
odd = isOddNumber(item)
if odd == False:
x.remove(item)
i -= 1
return x
您的代码有几个问题:
1) 也许你是想打电话给奇数=isOddNumber(a[i-1])
解决该问题后,您将遇到以下错误:“未定义名称“x”。
我假设您打算在函数的开始处对x=a
解决该问题后,您将遇到语句x.pop()
的问题。
pop()
从列表中删除最后一项。
因此,如果x=[1,2,3,4,5]
,x.pop()
将导致x=[1,2,3,4]
。另一个x.pop()
将导致x=[1,2,3]
等等。您需要的是x。删除(项目)
总之,请将您的filterOddInList
更正为:
def filterOddInList(a):
i = len(a)
x = a
while i >= 0:
item = a[(i-1)]
odd = isOddNumber(item)
if odd == False:
x.remove(item)
i -= 1
return x
您的filterOddInList()
函数有许多错误。您是在意外地递归-您的意思是odd=isOddNumber(item)
x
不存在,因此无法从中pop()
。你永远不会改变i
,因此它将永远循环。并且您不会从中返回任何内容。请修复显示的缩进。在Python中,这一点很重要,一个函数应该能够复制/粘贴您的代码并重现错误。您的filterOddInList()
函数有许多错误。您是在意外地递归-您的意思是odd=isOddNumber(item)
x
不存在,因此无法从中pop()
。你永远不会改变i
,因此它将永远循环。并且您不会从中返回任何内容。请修复显示的缩进。在Python中,这一点很重要,用户应该能够复制/粘贴代码并重现错误。