本帖最后由 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)
复制代码
这几行代码可以用一行搞定
两个变量交换位置,在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的元素都是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='->')
复制代码
网上的代码实际上就是这三行合并之后的结果
先把第二行带入到第三行中,然后在把第一行带入进去