Devilinside. 发表于 2020-9-11 14:09:38

请问这道题的代码中 * 的作用是什么

这是题目,我的代码,网上的代码。
static/image/hrline/line4.png

我想问一下我的代码为什么不能排序负数;还有网上的代码那个 * 号的作用是什么。

Twilight6 发表于 2020-9-11 14:15:38


直接*变量名 是解包的意思,就是将容器中的元素全部取出

举个例子:
>>> x =
>>> print(*x)
1 FishC 10086 小甲鱼

如果在函数定义参数中加上 *参数名 , 那么就是这个函数可以填入不定数量的参数,同样的举个例子:
>>> def func(*word):
    print(word)

>>> func(1,'FishC',10086,'小甲鱼')
(1, 'FishC', 10086, '小甲鱼')

CH10 发表于 2020-9-11 14:36:34

sep -- 用来间隔多个对象,默认值是一个空格。
输入:print("10","20","30",sep="-")# 设置间隔符
输出:10-20-30
*将元组或集合分解成各个参数
如果不带*
print(,sep="-")这里print的参数个数为2
带*号
print(*,sep="-")这里的参数个数为4,相当于print("10","20","30",sep="-")

sunrise085 发表于 2020-9-11 14:38:40

本帖最后由 sunrise085 于 2020-9-11 14:51 编辑

我的代码为什么不能排序负数
这是因为你的代码中 a b c 都是str类型不是数字,str比较大小是比较ASCII码值,所以在if中比较大小的时候会出错。
因此,if比较那一句应该加上 int 将之转为数字,即: if int(list1[i])<int(list1)
网上的代码那个 * 号的作用是什么。
*是解包,将原来打包好的数据进行解包,例如原来若干个元素在一个列表或元组中,用*号直接去掉外面的中括号或者括号,取出里面的各个元素
你的程序没有体现python的强大功能,还是按照其他语言的逻辑写的。
先不说网上的代码一句话解决整个问题了,那个的确可能会比较为难你,但是下面这些你应该是可以写出来的
a,b,c=input().split()
list1=[]
list1.append(a)
list1.append(b)
list1.append(c)
这几行代码可以用一行搞定
list1=input().split()

两个变量交换位置,在python中不需要中间变量
t=list1
list1=list1
list1=t
这三行也可以用一行搞定
list1,list1=list1,list1
另外排序不需要这样双层循环了。python中有直接排序的函数
for i in range(len(list1)):
    for j in range(len(list1)):
      if int(list1)<int(list1):
            t=list1
            list1=list1
            list1=t
这个双层循环排序,可以用内置函数搞定
list1=sorted(list1)
这里list1的元素都是str,但是我们需要将其以数字的大小进行排序,所以需要在排序的时候加入map映射
list1=sorted(map(int,list1))
或者是添加sorted的key参数
list1=sorted(list1,key=lambda x:int(x))
这样最终程序应该是三行搞定。
list1=input().split()
list1=sorted(map(int,list1)) # 或者用 list1=sorted(list1,key=lambda x:int(x))
print(*list1,sep='->')
网上的代码实际上就是这三行合并之后的结果
先把第二行带入到第三行中,然后在把第一行带入进去

Devilinside. 发表于 2020-9-13 10:38:15

Twilight6 发表于 2020-9-11 14:15
直接*变量名 是解包的意思,就是将容器中的元素全部取出

举个例子:


谢谢{:10_301:}

Devilinside. 发表于 2020-9-13 10:39:28

CH10 发表于 2020-9-11 14:36
sep -- 用来间隔多个对象,默认值是一个空格。
输入:print("10","20","30",sep="-")# 设置间隔符
输出 ...

懂了,谢谢{:10_298:}

Devilinside. 发表于 2020-9-13 10:40:07

sunrise085 发表于 2020-9-11 14:38
这是因为你的代码中 a b c 都是str类型不是数字,str比较大小是比较ASCII码值,所以在if中比较大小的时候 ...

太厉害了哥,谢谢{:10_323:}

wzdr 发表于 2020-9-13 11:08:35

{:10_256:}{:10_256:}
页: [1]
查看完整版本: 请问这道题的代码中 * 的作用是什么