榄仁榄苟 发表于 2021-9-10 15:57:31

求助!!

list1=
for each in list1:
    if not each.isdigit():
      list1.pop(each)
    print(sum(list1))
请问大佬们,这个程序为什么不能达到删除‘love’后计算总和的结果呢?
运行后报错是说“AttributeError: 'int' object has no attribute 'isdigit'”米有属性??看不懂

逃兵 发表于 2021-9-10 16:10:27

本帖最后由 逃兵 于 2021-9-10 16:11 编辑

list里面装的前面几个是数字,而非字符串,肯定用不了字符串的方法
这里把他转换为字符串就可以了
pop的参数只能删除下标,不能是元素
所以用remove就可以了
另外注意一下缩进
list1=
for each in list1:
    if not str(each).isdigit():
      list1.remove(each)
print(sum(list1))

Angelina_Jolie 发表于 2021-9-10 16:31:40

list1=
for each in list1:
    if not each.isdigit():#这个isdigit()函数判断的前提是字符串而你循环的list1列表包含数字和字符串 所以会报错
      list1.pop(each)
    print(sum(list1))






#这是另一种答案

list1=
list2 = []
for each in list1:
    if type(each)== str:#判断你循环的元素是不是字符串类型
      print(each)
    else:
      list2.append(each)
print(list2,sum(list2))

Angelina_Jolie 发表于 2021-9-10 16:39:40

Angelina_Jolie 发表于 2021-9-10 16:31
list1=
for each in list1:
    if not each.isdigit():#这个isdigit()函数判断的前提是 ...

list1=

for each in list1:
    if type(each)== str:#判断你循环的元素是不是字符串类型
      list1.remove(each)
print(list1,sum(list1))

这样感觉不错啊

傻眼貓咪 发表于 2021-9-10 19:56:49

本帖最后由 傻眼貓咪 于 2021-9-10 20:00 编辑

list1 =
for n, each in enumerate(list1): # 這裡把 n 當作索引 0 1 2 ... ,each 是元素 1 5 7 3 'love'
    if type(each) != int: # 應該用 type(),isdigit() 是一個字符串函數,您不能為整數調用此方法。
      list1.pop(n) # pop() 參數必須是索引位置,不是元素,你的代碼 pop(each) 是錯的
print(sum(list1))16
另外:
A = "123"
B = 123

print(A.isdigit()) # 字符串用 isdigit()
print(type(B) == int) # 整數用 type()True
True

榄仁榄苟 发表于 2021-9-10 22:06:20

逃兵 发表于 2021-9-10 16:10
list里面装的前面几个是数字,而非字符串,肯定用不了字符串的方法
这里把他转换为字符串就可以了
pop的 ...

每次都是大哥解决问题!!{:10_266:}
页: [1]
查看完整版本: 求助!!