鱼C论坛

 找回密码
 立即注册
查看: 2292|回复: 5

序列使用问题

[复制链接]
发表于 2016-2-6 09:40:30 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 冬雪雪冬 于 2016-2-6 18:30 编辑

在小甲鱼“零基础入门学习python”视频教程第16课(序列)课后习题“动动手第1题题目为:
视频中我们说 sum() 这个 BIF 有个缺陷,就是如果参数里有字符串类型的话就会报错,请写出一个新的实现过程,自动“无视”参数里的字符串并返回正确的计算结果
如果这样编码,结果正确为:5.4
def sum(x):
    result = 0
   
    for each in x:
        if (type(each) == int) or (type(each) == float):
            result +=each
        else:
            continue
        
    return result

print(sum([1, 2.1, 2.3, 'a', '1', True]))

但是我想在此基础上扩展一下,实现shell窗口人工输入字符串然后进行求和计算,但是结果却一直是0
def sum(x):
    result = 0
   
    for each in x:
        if (type(each) == int) or (type(each) == float):
            result +=each
        else:
            continue
        
    return result

print('请输入求和序列:')
x = input()
print(sum(x))

运行结果为:
请输入求和序列:
[1, 2.1, 2.3, 'a', '1', True]
0
不知道应该如何修改才好。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-2-6 10:27:42 | 显示全部楼层
因为用input输入的东西,默认是返回字符串的形式哦!
  1. >>> a
  2. "[1, 2.1, 2.3, 'a', '1', True]"
  3. >>> a = input('请输入需求和的数:')
  4. 请输入需求和的数:[1, 2.1, 2.3, 'a', '1', True]
  5. >>> a
  6. "[1, 2.1, 2.3, 'a', '1', True]"
  7. >>>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-6 10:33:58 | 显示全部楼层
不爱穿内裤 发表于 2016-2-6 10:27
因为用input输入的东西,默认是返回字符串的形式哦!

那请问应该怎样修改才好呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-6 13:15:37 | 显示全部楼层
炒鸡难!我办不到
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-6 14:23:19 | 显示全部楼层
上面有人说了,input进去的内容是按照字符串格式存储的,你首先要把他改成列表,再转格式。才能用你的sum函数。我这做了个简单的改进,通用性不强。
  1. def sum(x):
  2.     result = 0

  3.     for each in x:
  4.         print(each,type(each))
  5.         if (type(each) == int) or (type(each) == float):
  6.             result +=each
  7.         else:
  8.             continue

  9.     return result

  10. print('请输入求和序列:')
  11. x = input()
  12. x=x[1:-1]   #去掉列表符号
  13. a=x.split(",")   #分组形成列表
  14. print(a)    #打印看看结果  
  15. b=[]   #另外建一个列表接收转格式后的元素
  16. for each in a:   
  17.     if "'" not in each and'True' not in each and 'False' not in each:      #这里是枚举判断格式的办法,还需要改进~
  18.         each=float(each)  #转格式
  19.         print(type(each))
  20.     b.append(each)
  21. print(sum(b))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-6 15:11:20 | 显示全部楼层
65230215 发表于 2016-2-6 14:23
上面有人说了,input进去的内容是按照字符串格式存储的,你首先要把他改成列表,再转格式。才能用你的sum函 ...

谢谢!
我试过了输入'a,b,c'能够求出a+b+c的值了!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-19 13:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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