请问这道题的代码中 * 的作用是什么
这是题目,我的代码,网上的代码。static/image/hrline/line4.png
我想问一下我的代码为什么不能排序负数;还有网上的代码那个 * 号的作用是什么。
直接*变量名 是解包的意思,就是将容器中的元素全部取出
举个例子:
>>> x =
>>> print(*x)
1 FishC 10086 小甲鱼
如果在函数定义参数中加上 *参数名 , 那么就是这个函数可以填入不定数量的参数,同样的举个例子:
>>> def func(*word):
print(word)
>>> func(1,'FishC',10086,'小甲鱼')
(1, 'FishC', 10086, '小甲鱼') 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: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='->')
网上的代码实际上就是这三行合并之后的结果
先把第二行带入到第三行中,然后在把第一行带入进去 Twilight6 发表于 2020-9-11 14:15
直接*变量名 是解包的意思,就是将容器中的元素全部取出
举个例子:
谢谢{:10_301:} CH10 发表于 2020-9-11 14:36
sep -- 用来间隔多个对象,默认值是一个空格。
输入:print("10","20","30",sep="-")# 设置间隔符
输出 ...
懂了,谢谢{:10_298:} sunrise085 发表于 2020-9-11 14:38
这是因为你的代码中 a b c 都是str类型不是数字,str比较大小是比较ASCII码值,所以在if中比较大小的时候 ...
太厉害了哥,谢谢{:10_323:} {:10_256:}{:10_256:}
页:
[1]