鱼C论坛

 找回密码
 立即注册
查看: 716|回复: 7

[已解决]新人求帮助:下面这段代码为啥一直报错

[复制链接]
发表于 2019-3-5 11:11:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
直接打印numbers可以获取长度,放到循环条件里就报错呢?

  1. numbers = [12,37,5,42,8,3]
  2. print(len(numbers))
  3. even = []
  4. odd = []

  5. while len(numbers) > 0:
  6.     numbers = numbers.pop()
  7.     if (numbers % 2 == 0):
  8.         even.append(numbers)
  9.     else:
  10.         odd.append(numbers)

  11. print(even)
  12. print(odd)
复制代码



6
Traceback (most recent call last):
  File "C:/untitled/while 循环.py", line 17, in <module>
    while len(numbers) > 0:
TypeError: object of type 'int' has no len()
最佳答案
2019-3-5 13:34:07
    错误由用于存储弹出元素变量的名字与列表名字冲突造成:
  1. numbers = [12,37,5,42,8,3]
  2. print(len(numbers))
  3. even = []
  4. odd = []

  5. while len(numbers) > 0:
  6.     n = numbers . pop()     # 存储弹出元素的变量不可以叫 numbers,因为与列表名冲突。
  7.     if (n % 2 == 0):
  8.         even.append(n)
  9.     else:
  10.         odd.append(n)
  11. print(even)
  12. print(odd)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-3-5 11:28:22 | 显示全部楼层
在第一次循环中,numbers=numbers.pop()之后,numbers此时等于pop弹出的列表内最后一个值,此时numbers=3,为int类型,不再是列表类型,所以不能用len(numbers)这个函数了。错误类型为type  'int'  has  no  len()。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-5 11:33:56 | 显示全部楼层
看大意是为了判断 是否能被2整除么
numbers = [12, 37, 5, 42, 8, 3]
even = []
odd = []

for i in numbers:
    if i % 2 == 0:
        even.append(i)
    else:
        odd.append(i)

print(even)
print(odd)

是不是想要这样的效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-5 11:51:08 | 显示全部楼层
pop是对列表自身操作,返回值是你删去的那个元素
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-5 13:34:07 | 显示全部楼层    本楼为最佳答案   
    错误由用于存储弹出元素变量的名字与列表名字冲突造成:
  1. numbers = [12,37,5,42,8,3]
  2. print(len(numbers))
  3. even = []
  4. odd = []

  5. while len(numbers) > 0:
  6.     n = numbers . pop()     # 存储弹出元素的变量不可以叫 numbers,因为与列表名冲突。
  7.     if (n % 2 == 0):
  8.         even.append(n)
  9.     else:
  10.         odd.append(n)
  11. print(even)
  12. print(odd)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-5 14:53:24 | 显示全部楼层
erff 发表于 2019-3-5 11:28
在第一次循环中,numbers=numbers.pop()之后,numbers此时等于pop弹出的列表内最后一个值,此时numbers=3, ...

多谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-5 14:54:06 | 显示全部楼层
贱贱的酸奶 发表于 2019-3-5 11:33
看大意是为了判断 是否能被2整除么
numbers = [12, 37, 5, 42, 8, 3]
even = []

多谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-5 14:54:45 | 显示全部楼层
BngThea 发表于 2019-3-5 11:51
pop是对列表自身操作,返回值是你删去的那个元素

多谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-28 21:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表