ZCYDHHX 发表于 2018-1-5 15:53:41

课后作业16讲,sum求和

a = input("请输入数组:")
a = list(a)
b = 0
for each in a:
    if each.isdigit()==True:
      b += each
      
    else:
      break
print(b)
这是我写的,总是没法计算出结果。说不支持int和str的求和。但是我输入的也没有str啊。
此外,如果我用type(each)去判断,因为each已经是列表,所以无法求出结果。这个不能用列表么?

°蓝鲤歌蓝 发表于 2018-1-5 16:00:01

each 是列表 a 里的元素,就是 str 类型。

冬雪雪冬 发表于 2018-1-5 16:03:55

简单的说,可以把b += each改为b += int(each)
但是a = list(a)还是有问题,可以改为a = a.split(),这样输入数据时用空格分隔就可以了。

像番茄加两个蛋 发表于 2018-1-5 19:21:48

b += str(each)强制转换成字符串

ZCYDHHX 发表于 2018-1-6 14:03:50

冬雪雪冬 发表于 2018-1-5 16:03
简单的说,可以把b += each改为b += int(each)
但是a = list(a)还是有问题,可以改为a = a.split(),这样 ...

不对,这样更改了,运行结果是将数字连起来,不是求和

ZCYDHHX 发表于 2018-1-6 14:05:11

像番茄加两个蛋 发表于 2018-1-5 19:21
b += str(each)强制转换成字符串

更改了报错
   TypeError: unsupported operand type(s) for +=: 'int' and 'str'

xxpy_601 发表于 2018-1-8 17:34:21

a = input("请输入数组:")
a = list(a)
b = 0
for each in a:
    if each.isdigit()==True:
      b += each
      
    else:      
      break   
print(b)

看你上面代码,b += each          each要加个int()转换成整型。
这样代码,在输入纯数字的时,就可以求和了,但一旦以字母开头或者数字和字母混合出现,会无法获得正确的值。
原因:
你下面添加了else:break,在迭代进行的时候,一旦出现字母了,会跳出for循环,所以会出现问题。
将else:break 去掉就好了。
修改后:
a = input("请输入数组:")
a = list(a)# 这里也可以去掉,没必要非得转换成列表进行切片,直接字符串也可以切片操作哈。。
b = 0
changdu = len(a)
while (changdu == 0):
    a = input('请重新输入数组:')
    changdu =len(a)
for each in a:
    if each.isdigit():
       b += int(each)
print(b)
页: [1]
查看完整版本: 课后作业16讲,sum求和