鱼C论坛

 找回密码
 立即注册
查看: 1477|回复: 7

[已解决]请问这道题的代码中 * 的作用是什么

[复制链接]
发表于 2020-9-11 14:09:38 | 显示全部楼层 |阅读模式

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

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

x
这是题目,我的代码,网上的代码。

                               
登录/注册后可看大图


我想问一下我的代码为什么不能排序负数;还有网上的代码那个 * 号的作用是什么。
最佳答案
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[j])
网上的代码那个 * 号的作用是什么。

*是解包,将原来打包好的数据进行解包,例如原来若干个元素在一个列表或元组中,用*号直接去掉外面的中括号或者括号,取出里面的各个元素
你的程序没有体现python的强大功能,还是按照其他语言的逻辑写的。
先不说网上的代码一句话解决整个问题了,那个的确可能会比较为难你,但是下面这些你应该是可以写出来的
a,b,c=input().split()
list1=[]
list1.append(a)
list1.append(b)
list1.append(c)
这几行代码可以用一行搞定
list1=input().split()

两个变量交换位置,在python中不需要中间变量
t=list1[i]
list1[i]=list1[j]
list1[j]=t
这三行也可以用一行搞定
list1[i],list1[j]=list1[j],list1[i]
另外排序不需要这样双层循环了。python中有直接排序的函数
for i in range(len(list1)):
    for j in range(len(list1)):
        if int(list1[i])<int(list1[j]):
            t=list1[i]
            list1[i]=list1[j]
            list1[j]=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='->')
网上的代码实际上就是这三行合并之后的结果
先把第二行带入到第三行中,然后在把第一行带入进去

题目

题目

我的代码

我的代码

网上的代码

网上的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-11 14:15:38 | 显示全部楼层

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

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

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

>>> func(1,'FishC',10086,'小甲鱼')
(1, 'FishC', 10086, '小甲鱼')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-9-11 14:36:34 | 显示全部楼层
sep -- 用来间隔多个对象,默认值是一个空格。
输入:print("10","20","30",sep="-")  # 设置间隔符
输出:10-20-30
*将元组或集合分解成各个参数
如果不带*
print([10,20,30],sep="-")这里print的参数个数为2
带*号
print(*[10,20,30],sep="-")这里的参数个数为4,相当于print("10","20","30",sep="-")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[j])
网上的代码那个 * 号的作用是什么。

*是解包,将原来打包好的数据进行解包,例如原来若干个元素在一个列表或元组中,用*号直接去掉外面的中括号或者括号,取出里面的各个元素
你的程序没有体现python的强大功能,还是按照其他语言的逻辑写的。
先不说网上的代码一句话解决整个问题了,那个的确可能会比较为难你,但是下面这些你应该是可以写出来的
a,b,c=input().split()
list1=[]
list1.append(a)
list1.append(b)
list1.append(c)
这几行代码可以用一行搞定
list1=input().split()

两个变量交换位置,在python中不需要中间变量
t=list1[i]
list1[i]=list1[j]
list1[j]=t
这三行也可以用一行搞定
list1[i],list1[j]=list1[j],list1[i]
另外排序不需要这样双层循环了。python中有直接排序的函数
for i in range(len(list1)):
    for j in range(len(list1)):
        if int(list1[i])<int(list1[j]):
            t=list1[i]
            list1[i]=list1[j]
            list1[j]=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='->')
网上的代码实际上就是这三行合并之后的结果
先把第二行带入到第三行中,然后在把第一行带入进去
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-13 10:38:15 | 显示全部楼层
Twilight6 发表于 2020-9-11 14:15
直接  *变量名 是解包的意思,就是将容器中的元素全部取出

举个例子:

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

使用道具 举报

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

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

使用道具 举报

 楼主| 发表于 2020-9-13 10:40:07 | 显示全部楼层
sunrise085 发表于 2020-9-11 14:38
这是因为你的代码中 a b c 都是str类型不是数字,str比较大小是比较ASCII码值,所以在if中比较大小的时候 ...

太厉害了哥,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-13 11:08:35 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-18 16:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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