fc5igm 发表于 2021-6-3 18:58:00

关于收集参数的问题

>>> 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函数是哪里错了?
又应当做出怎样的更改,才能让他既接受单个数字,又接受数列或元组的加总?

qiuyouzhi 发表于 2021-6-3 19:04:39

len(1), len(2) 肯定会报错呀
而且单个数字咋求和...加个类型判断

fc5igm 发表于 2021-6-3 19:13:32

qiuyouzhi 发表于 2021-6-3 19:04
len(1), len(2) 肯定会报错呀
而且单个数字咋求和...加个类型判断

看来是貌似只能增加类别判断完成了。

Twilight6 发表于 2021-6-3 19:14:13


多加个 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)))

fc5igm 发表于 2021-6-3 19:36:22

Twilight6 发表于 2021-6-3 19:14
多加个 if 条件判断吧,就像楼上说的

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

那么如果要想判定n是否为列表或元组,是不是就写
if type(n) in :
?

kogawananari 发表于 2021-6-3 20:01:26

fc5igm 发表于 2021-6-3 19:36
那么如果要想判定n是否为列表或元组,是不是就写

?

不行的 你这参数传range(10)也没法通过啊{:10_338:}

Twilight6 发表于 2021-6-3 20:03:20

fc5igm 发表于 2021-6-3 19:36
那么如果要想判定n是否为列表或元组,是不是就写

?



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

basketmn 发表于 2021-6-3 20:03:35

Twilight6 发表于 2021-6-3 19:14
多加个 if 条件判断吧,就像楼上说的

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

大老,我想请问下那个range(10)是什么意思,我用(1.2.3)(4.5.6)出来是66,不知道是怎么出来的,望解答下,谢谢

Twilight6 发表于 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 个整数

basketmn 发表于 2021-6-3 20:10:31

Twilight6 发表于 2021-6-3 20:06
range() 函数的作用是生成一个整数序列

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

大老,你说的这个我知道,我就是想知道在那个函数里面加个range(10)为什么结果从21变成了66

Twilight6 发表于 2021-6-3 20:21:38

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


你填了什么参数?

只填 range 结果应该为 45

basketmn 发表于 2021-6-3 21:03:38

Twilight6 发表于 2021-6-3 20:21
你填了什么参数?

只填 range 结果应该为 45

就是sum((1.2.3).(4.5.6).range(10))就是66.用楼主代码

Twilight6 发表于 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

basketmn 发表于 2021-6-3 21:12:05

本帖最后由 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: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

fc5igm 发表于 2021-6-3 21:43:37

basketmn 发表于 2021-6-3 21:03
就是sum((1.2.3).(4.5.6).range(10))就是66.用楼主代码

噗,我的代码是错的。我是因为想用循环解决元组、列表、浮点数、整数与range的和,结果发现解决不了就出来问了一下。也正是因为解决不了所以代码本身就错了。
页: [1]
查看完整版本: 关于收集参数的问题