首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python中“int类型的对象没有长度”是什么意思?

在python中“int类型的对象没有长度”是什么意思?
EN

Stack Overflow用户
提问于 2018-06-10 07:29:49
回答 3查看 410关注 0票数 0

我试图在Windows10上用Python 3.6.5编写一个程序,它可以接受整数,然后打印出奇数。

这是我的代码:

代码语言:javascript
复制
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()

这是应该发生的事情:

代码语言:javascript
复制
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]

这是实际发生的情况:

代码语言:javascript
复制
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()

谁能告诉我为什么会发生这个错误,正确的代码应该是什么?

EN

回答 3

Stack Overflow用户

发布于 2018-06-10 07:38:52

问题出在filterOddInList内部的递归中。您正在使用item调用它,这是一个数字。当您到达len(a)时,它试图提取数字的长度,但失败了。

票数 2
EN

Stack Overflow用户

发布于 2018-06-10 08:05:31

您可能希望将其简化一点。您可以使用列表理解将两个函数合并为一行。我已经重写了你下面的一些代码。

代码语言:javascript
复制
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 for x in list if x % 2 == 1]。它说:“让我们在list中处理每一项。我们将每一项称为x。如果x是奇数,则将其放入新列表中。”

换句话说,(新列表中的东西) for (旧列表中的项) if (include子句)中的(项)

票数 0
EN

Stack Overflow用户

发布于 2018-06-10 08:10:19

你的代码有几个问题:

1)也许你想打电话给odd = isOddNumber(a[i-1])

在你解决了这个问题之后,你会遇到下面的错误:"name 'x' is not defined".我假设你想在函数开始的时候纠正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.remove(item)

总而言之,将您的filterOddInList更正为:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50779389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档