函数的练习我创建了一个函数来对数字列表排序(Python 3.x):
def insertion_sort(list):
for index in range(1, len(list)):
value = list[index]
i = index -1
while i >= 0:
if value < list[i]:
list[i+1] = list[i]
list[i] = value
i = i - 1
else:
break
使用python解释器我得到这个:
>>> a = [5,3,7,9,1,8,6,2,4]
>>> insertion_sort(a)
>>> print(a)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
如果在python解释器中使用,这个函数可以很好地工作,但我想做更多,并使用输入法来"询问"数字,所以我这样做了…
a = input("Enter a list of numbers separated by a comma: ")
c = set(a)
b = []
b.append(c)
insertion_sort(b)
print (b)
当我运行代码并输入数字537918624
时,我得到这个:
[{'8', '9', '2', '3', '1', '6', '7', '4', '5'}]
为什么它不排序,我怎么能让它打印没有引号的列表?
引号表示您的集合中有字符串,而不是整数。input
总是会给你一个字符串;您可以使用int()
将字符串转换为整数。
另外,您正在为排序函数提供一个列表,其中包含单个项目set
。对只有一个元素的列表进行排序没有任何意义。
我将这样处理:
ui = input(...) # take input e.g. "1, 2, 3"
numbers = list(map(int, ui.split(","))) # turn to list of ints [1, 2, 3]
insertion_sort(numbers) # sort the list
没有必要使用set
-如果有重复的数字你的排序算法应该能够管理这一点。
您的输入没有逗号-我假设(根据提示!)用户应该真正输入例如5,3,79,...
.
最后,注意您不应该调用insertion_sort
list
的参数,因为这会遮蔽内置的。