鱼C论坛

 找回密码
 立即注册
查看: 54551|回复: 3

[技术交流] 新手求助,AttributeError: 'int' object has no attribute 'append',怎么解决?

[复制链接]
发表于 2017-10-10 20:21:44 | 显示全部楼层 |阅读模式

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

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

x
想实现输出结果为:result=[1,2,3,4,5,6],结果报错,想请问下应该怎么解决?
代码:
result=[]
def get_digits(num):
    if num>0:
        result=num%10
        result.append()
        get_digits(num//10)
get_digits(123456)
print(result)

报错:
未命名.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-10-10 20:59:27 | 显示全部楼层
本帖最后由 铁棍阿童木 于 2017-10-10 21:07 编辑

报错原因是:属性错误。“int”对象不能用append方法。
产生这个错误的原因是:
第一步,你把全局变量result = [ ]定义为空列表
然后在函数get_digits(num)内部又重新赋值成为result = num%10
这个时候result已经不是空列表了(其实是为了保护全局变量而重新生成的同名的局部变量),所以用append()方法报错。
解决办法:定义一个临时变量用来接收num%10的值
再用append()方法将取余后的值添加到result列表里去。
例外,append()方法是有参数的。
  1. result=[]
  2. def get_digits(num):
  3.     if num > 0:
  4.         temp = num % 10
  5.         result.insert(0,temp)
  6.         get_digits(num//10)
  7. get_digits(123456)
  8. print(result)
复制代码




之所以用insert()方法,原因就是始终把取余后的值添加到索引“0”的位置,保证输出是按照要求输出,否则如果用append方法,需要在添加完毕以后用sort方法重新排序,或者reverse方法原地翻转列表。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-10-11 09:19:19 | 显示全部楼层
谢谢,按照你的说法用append没有实现函数功能,能写下代码吗?不胜感激
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-28 14:04:41 | 显示全部楼层
把代码稍微改一下就可以了

results=[]
def get_digits(num):
    if num>0:
        result=num%10
        results.append(result)
        get_digits(num//10)
get_digits(123456)
results.reverse()
print(results)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-2 12:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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