鱼C论坛

 找回密码
 立即注册
查看: 3821|回复: 6

[已解决]课后作业16讲,sum求和

[复制链接]
发表于 2018-1-5 15:53:41 | 显示全部楼层 |阅读模式

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

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

x
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-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)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-1-5 16:00:01 | 显示全部楼层
each 是列表 a 里的元素,就是 str 类型。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-5 16:03:55 | 显示全部楼层
简单的说,可以把b += each改为b += int(each)
但是a = list(a)还是有问题,可以改为a = a.split(),这样输入数据时用空格分隔就可以了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-5 19:21:48 | 显示全部楼层
b += str(each)强制转换成字符串
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-6 14:03:50 | 显示全部楼层
冬雪雪冬 发表于 2018-1-5 16:03
简单的说,可以把b += each改为b += int(each)
但是a = list(a)还是有问题,可以改为a = a.split(),这样 ...

不对,这样更改了,运行结果是将数字连起来,不是求和
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-6 14:05:11 | 显示全部楼层
像番茄加两个蛋 发表于 2018-1-5 19:21
b += str(each)强制转换成字符串

更改了报错
   TypeError: unsupported operand type(s) for +=: 'int' and 'str'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-19 22:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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