Python 排序功能不支持';t排序,并复制一些输入
我正在为我的Python类开发一个排序函数。以下是我目前得到的信息: 编辑:我不能使用Python的任何内置排序函数Python 排序功能不支持';t排序,并复制一些输入,python,list,sorting,Python,List,Sorting,我正在为我的Python类开发一个排序函数。以下是我目前得到的信息: 编辑:我不能使用Python的任何内置排序函数 def main(): my_list = [] my_input = input("Input a number >>> ") my_list.append(float(my_input)) while my_input != "stop": for i in range(0, len(my_list)):
def main():
my_list = []
my_input = input("Input a number >>> ")
my_list.append(float(my_input))
while my_input != "stop":
for i in range(0, len(my_list)):
if float(my_input) < my_list[i]:
my_list[i - 1] = float(my_input)
break
my_list.append(float(my_input))
my_input = input("Input a number >>> ")
print(my_list)
if __name__ == "__main__":
main()
def main():
我的清单=[]
我的输入=输入(“输入一个数字>>”)
my_list.append(float(my_输入))
而我的_输入!=“停止”:
对于范围(0,len(我的列表))中的i:
如果浮点(my_输入)>”)
打印(我的列表)
如果名称=“\uuuuu main\uuuuuuuu”:
main()
现在很晚了,我有两个小时的时间交上来。我筋疲力尽,我觉得我错过了一些相对简单的东西
我假设用户输入的第一个值不是“stop”,它将停止函数。或者应该,无论如何
因此,我将第一个值添加到列表中,以便传入的新值可以进行比较
当用户输入为1、9、2、8、3、7、4时,这会将输出更改为:
7,8,9,2,8,3,4,4
里面有一个重复的4,而且没有排序
我试图做的是将用户的输入与列表的第一个值进行比较。如果较小,则将其添加到列表之前的位置。如果不是,请移动到列表中的下一个值并再次测试。如果它不小于列表中的任何值,只需附加它即可
然而,这似乎不起作用。或者我只是做错了
谢谢你的帮助 我想你需要的是
while my_input != "stop":
for i in range(0, len(my_list)):
if float(my_input) < my_list[i]:
my_list[i - 1] = float(my_input)
break
else: # no break encountered
my_list.append(float(my_input))
当我输入时!=“停止”:
对于范围(0,len(我的列表))中的i:
如果浮点(my_输入)
但是,当有许多好的实现可以查询时,尝试实现自己的排序似乎很愚蠢
要在位置0(即prepend)插入列表,您只需
my\u list.insert(0,value)
您的代码中只有两个错误,请注意,我们将列表索引更改为使用.insert()函数调用,并在for循环的末尾添加了一个else:
def main():
my_list = []
my_input = raw_input("Input a number >>> ")
my_list.append(float(my_input))
while my_input != "stop":
for i in range(0, len(my_list)):
if float(my_input) < my_list[i]:
my_list.insert(i, float(my_input)) ### -- first change
break
else: ### -- second change
my_list.append(float(my_input))
my_input = raw_input("Input a number >>> ")
print my_list
这里有差不多相同的东西被分解成两个函数
def my_sort(a, b):
for num in a:
for i, val in enumerate(b[:]):
if num > val:
b.insert(i, num)
break
else:
b.append(num)
return b
def main():
my_list = []
while True:
try:
my_input = raw_input("Input a number >>> ")
if "stop" == my_input:
break
my_input = float(my_input)
my_list = my_sort([my_input], my_list[:])
except ValueError:
pass
print my_list
样本输入
>>> main()
Input a number >>> 4
Input a number >>> 5
Input a number >>> 6
Input a number >>> 1
Input a number >>> 2
Input a number >>> 3
Input a number >>> stop
[6.0, 5.0, 4.0, 3.0, 2.0, 1.0]
my_list[i-1]
不在列表前面,它将替换该索引处的值。在执行此行之前,我的列表[i-1]中的值会发生什么变化?对不起。我的帖子澄清了一点。我不需要附加它。如果它发现用户输入的数字小于它当前在列表中查看的数字,则会将该数字添加到该数字之前。您只有两行需要更改,请参阅下面的我的答案。我试过了,但似乎不太管用。另外,为什么else与for循环位于同一缩进中?这不应该是“如果”语句吗?因为这是一项家庭作业,我强烈建议不要使用for…else
,因为你的老师很可能知道你作弊了。没有其他人属于for。。。但我支持@OozeMeister的评论。。。很难说问题出在哪里。。。但是你可以很容易地实现冒泡排序,或者用另一个解决你第二个问题的答案:P
>>> main()
Input a number >>> 4
Input a number >>> 5
Input a number >>> 6
Input a number >>> 1
Input a number >>> 2
Input a number >>> 3
Input a number >>> stop
[6.0, 5.0, 4.0, 3.0, 2.0, 1.0]