Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“这是什么意思?”;int类型的对象没有长度;用python?_Python_Python 3.x_Int_Syntax Error - Fatal编程技术网

“这是什么意思?”;int类型的对象没有长度;用python?

“这是什么意思?”;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)

我尝试在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)
    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中,这一点很重要,用户应该能够复制/粘贴代码并重现错误。