鱼C论坛

 找回密码
 立即注册
查看: 2261|回复: 15

[已解决]关于收集参数的问题

[复制链接]
发表于 2021-6-3 18:58:00 | 显示全部楼层 |阅读模式

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

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

x
>>> def sum(*x):
        s=0
        for n in x:
                for i in range(len(n)):
                        s+=n[i]
        return s

>>> sum(1,2,range(10))
Traceback (most recent call last):
  File "<pyshell#763>", line 1, in <module>
    sum(1,2,range(10))
  File "<pyshell#762>", line 4, in sum
    for i in range(len(n)):
TypeError: object of type 'int' has no len()
>>> 
请问我定义的这个sum函数是哪里错了?
又应当做出怎样的更改,才能让他既接受单个数字,又接受数列或元组的加总?
最佳答案
2021-6-3 19:14:13

多加个 if 条件判断吧,就像楼上说的

另外你 len 那报错先抛开,你的 n[ i] 也必定会报错,不能对数值进行索引,索引是对部分序列对象进行操作的

加了类型判断,参考代码:
def sum(*x):
    s = 0
    for n in x:
        if type(n) in [float, int]:
            s += n
            continue
        for i in range(len(n)):
            s += n[i]
    return s

print(sum(1,2,range(10)))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-3 19:04:39 | 显示全部楼层
len(1), len(2) 肯定会报错呀
而且单个数字咋求和...加个类型判断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-3 19:13:32 | 显示全部楼层
qiuyouzhi 发表于 2021-6-3 19:04
len(1), len(2) 肯定会报错呀
而且单个数字咋求和...加个类型判断

看来是貌似只能增加类别判断完成了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-3 19:14:13 | 显示全部楼层    本楼为最佳答案   

多加个 if 条件判断吧,就像楼上说的

另外你 len 那报错先抛开,你的 n[ i] 也必定会报错,不能对数值进行索引,索引是对部分序列对象进行操作的

加了类型判断,参考代码:
def sum(*x):
    s = 0
    for n in x:
        if type(n) in [float, int]:
            s += n
            continue
        for i in range(len(n)):
            s += n[i]
    return s

print(sum(1,2,range(10)))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-3 19:36:22 | 显示全部楼层
Twilight6 发表于 2021-6-3 19:14
多加个 if 条件判断吧,就像楼上说的

另外你 len 那报错先抛开,你的 n[ i] 也必定会报错,不能对数值 ...

那么如果要想判定n是否为列表或元组,是不是就写
if type(n) in [tuple,list]:
?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-3 20:01:26 | 显示全部楼层
fc5igm 发表于 2021-6-3 19:36
那么如果要想判定n是否为列表或元组,是不是就写

?

不行的 你这参数传range(10)也没法通过啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-3 20:03:20 | 显示全部楼层
fc5igm 发表于 2021-6-3 19:36
那么如果要想判定n是否为列表或元组,是不是就写

?



是的,语法没错的话,可以有多种写法

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-3 20:03:35 From FishC Mobile | 显示全部楼层
Twilight6 发表于 2021-6-3 19:14
多加个 if 条件判断吧,就像楼上说的

另外你 len 那报错先抛开,你的 n[ i] 也必定会报错,不能对数值 ...

大老,我想请问下那个range(10)是什么意思,我用(1.2.3)(4.5.6)出来是66,不知道是怎么出来的,望解答下,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-3 20:06:47 | 显示全部楼层
basketmn 发表于 2021-6-3 20:03
大老,我想请问下那个range(10)是什么意思,我用(1.2.3)(4.5.6)出来是66,不知道是怎么出来的,望解答下 ...



range() 函数的作用是生成一个整数序列

range 函数有三个参数  start、end、step ,start 默认值为0、end 默认值为 参数可迭代对象的总长度,step 步长的默认值为 1

比如这里的 range(10) 就相当于 range(0,10,1) 从 0~9 共生成 10 个整数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-3 20:10:31 From FishC Mobile | 显示全部楼层
Twilight6 发表于 2021-6-3 20:06
range() 函数的作用是生成一个整数序列

range 函数有三个参数  start、end、step ,start 默认值 ...

大老,你说的这个我知道,我就是想知道在那个函数里面加个range(10)为什么结果从21变成了66
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-3 20:21:38 | 显示全部楼层
basketmn 发表于 2021-6-3 20:10
大老,你说的这个我知道,我就是想知道在那个函数里面加个range(10)为什么结果从21变成了66



你填了什么参数?

只填 range 结果应该为 45
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-3 21:03:38 From FishC Mobile | 显示全部楼层
Twilight6 发表于 2021-6-3 20:21
你填了什么参数?

只填 range 结果应该为 45

就是sum((1.2.3).(4.5.6).range(10))就是66.用楼主代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-3 21:09:52 | 显示全部楼层
basketmn 发表于 2021-6-3 21:03
就是sum((1.2.3).(4.5.6).range(10))就是66.用楼主代码



参数分隔用 , 逗号,不是 .

range(10) 的总和值是 45 , 1+2+3+4+5+6 的值是 21 和 为 66

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-3 21:12:05 From FishC Mobile | 显示全部楼层
本帖最后由 basketmn 于 2021-6-3 21:18 编辑
Twilight6 发表于 2021-6-3 21:09
参数分隔用 , 逗号,不是 .

range(10) 的总和值是 45 , 1+2+3+4+5+6 的值是 21 和 为 66


我偷懒用了一下,写成range一下子蒙了。感谢大佬指正,谢谢大老解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-3 21:39:42 | 显示全部楼层
本帖最后由 fc5igm 于 2021-6-3 21:40 编辑
kogawananari 发表于 2021-6-3 20:01
不行的 你这参数传range(10)也没法通过啊


range(10)的话,就判断是否是range?
type(range(10))
<class 'range'>
>>> type(range(10))==range
True
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-3 21:43:37 | 显示全部楼层
basketmn 发表于 2021-6-3 21:03
就是sum((1.2.3).(4.5.6).range(10))就是66.用楼主代码

噗,我的代码是错的。我是因为想用循环解决元组、列表、浮点数、整数与range的和,结果发现解决不了就出来问了一下。也正是因为解决不了所以代码本身就错了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-15 13:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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