关于收集参数的问题
>>> def sum(*x):s=0
for n in x:
for i in range(len(n)):
s+=n
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函数是哪里错了?
又应当做出怎样的更改,才能让他既接受单个数字,又接受数列或元组的加总? len(1), len(2) 肯定会报错呀
而且单个数字咋求和...加个类型判断 qiuyouzhi 发表于 2021-6-3 19:04
len(1), len(2) 肯定会报错呀
而且单个数字咋求和...加个类型判断
看来是貌似只能增加类别判断完成了。
多加个 if 条件判断吧,就像楼上说的
另外你 len 那报错先抛开,你的 n[ i] 也必定会报错,不能对数值进行索引,索引是对部分序列对象进行操作的
加了类型判断,参考代码:
def sum(*x):
s = 0
for n in x:
if type(n) in :
s += n
continue
for i in range(len(n)):
s += n
return s
print(sum(1,2,range(10))) Twilight6 发表于 2021-6-3 19:14
多加个 if 条件判断吧,就像楼上说的
另外你 len 那报错先抛开,你的 n[ i] 也必定会报错,不能对数值 ...
那么如果要想判定n是否为列表或元组,是不是就写
if type(n) in :
? fc5igm 发表于 2021-6-3 19:36
那么如果要想判定n是否为列表或元组,是不是就写
?
不行的 你这参数传range(10)也没法通过啊{:10_338:} fc5igm 发表于 2021-6-3 19:36
那么如果要想判定n是否为列表或元组,是不是就写
?
是的,语法没错的话,可以有多种写法
Twilight6 发表于 2021-6-3 19:14
多加个 if 条件判断吧,就像楼上说的
另外你 len 那报错先抛开,你的 n[ i] 也必定会报错,不能对数值 ...
大老,我想请问下那个range(10)是什么意思,我用(1.2.3)(4.5.6)出来是66,不知道是怎么出来的,望解答下,谢谢 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 个整数
Twilight6 发表于 2021-6-3 20:06
range() 函数的作用是生成一个整数序列
range 函数有三个参数start、end、step ,start 默认值 ...
大老,你说的这个我知道,我就是想知道在那个函数里面加个range(10)为什么结果从21变成了66 basketmn 发表于 2021-6-3 20:10
大老,你说的这个我知道,我就是想知道在那个函数里面加个range(10)为什么结果从21变成了66
你填了什么参数?
只填 range 结果应该为 45 Twilight6 发表于 2021-6-3 20:21
你填了什么参数?
只填 range 结果应该为 45
就是sum((1.2.3).(4.5.6).range(10))就是66.用楼主代码 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
本帖最后由 basketmn 于 2021-6-3 21:18 编辑
Twilight6 发表于 2021-6-3 21:09
参数分隔用 , 逗号,不是 .
range(10) 的总和值是 45 , 1+2+3+4+5+6 的值是 21 和 为 66
我偷懒用了一下,写成range一下子蒙了。感谢大佬指正,谢谢大老解答 本帖最后由 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 basketmn 发表于 2021-6-3 21:03
就是sum((1.2.3).(4.5.6).range(10))就是66.用楼主代码
噗,我的代码是错的。我是因为想用循环解决元组、列表、浮点数、整数与range的和,结果发现解决不了就出来问了一下。也正是因为解决不了所以代码本身就错了。
页:
[1]