规格:Ubuntu 13.04,Python 3.3.1
背景:Python的初学者,遇到了这种“手动排序”问题。
我被要求做的事情:“让用户输入3个数值并将它们存储在3个不同的变量中。不使用列表或排序算法,手动将这3个数字从最小到最大排序。”
我能想到的是:
number = input("Please enter 3 numbers: ")
number = list(number)
a = int(number[0])
b = int(number[1])
c = int(number[2])
new_l = []
if a > b and a > c:
new_l.append(a)
if b > c:
new_l.append(b)
new_l.append(c)
else:
new_l.append(c)
new_l.append(b)
print(new_l)
if b > a and b > c:
new_l.append(b)
if a > c:
new_l.append(a)
new_l.append(c)
else:
new_l.append(c)
new_l.append(a)
print(new_l)
if c > a and c > b:
new_l.append(c)
if a > b:
new_l.append(a)
else:
new_l.append(b)
new_l.append(a)
print(new_l)
所以我的问题是: 我意识到我的解决方案非常有限。首先,它只能处理3个单位数字,因为一旦输入字符串被转换为列表,就无法将所有数字正确地分解为用户想要的单个数字。其次,通过使用这个解决方案,编码器被强制枚举所有可能的场景,以便将3个数字相互比较,如果说脚本被改为接受100多个数字的用户输入,则可能非常不灵活。 / p>
如果您可以就上述问题分享一些指导,或者如何以不同的方式解决这个问题,我会非常感激!谢谢。
答案 0 :(得分:7)
对于三个项目,您可以使用max
和min
对其进行排序:
a, b, c = 3, 1, 8
x = min(a, b, c) # Smallest of the three
z = max(a, b, c) # Largest of the three
y = (a + b + c) - (x + z) # Since you have two of the three, you can solve for
# the third
print(a, b, c)
print(x, y, z)
如果您不想使用排序算法但可以使用列表,您可以每次弹出最小的项目并将其存储在新列表中:
numbers = [1, 8, 9, 6, 2, 3, 1, 4, 5]
output = []
while numbers:
smallest = min(numbers)
index = numbers.index(smallest)
output.append(numbers.pop(index))
print(output)
效率很低,但它确实有效。
答案 1 :(得分:0)
使用冒泡排序算法:
num1=input("Enter a number: ")
num2=input("Enter another number: ")
num3=input("One more! ")
if num1<num2:
temp=0
temp=num1
num1=num2
num2=temp
if num1<num3:
temp=0
temp=num1
num1=num3
num3=temp
if num2<num3:
temp=0
temp=num2
num2=num3
num3=temp
print num3, num2, num1
答案 2 :(得分:0)
bubble sort
、selection sort
、insertion sort
等,因此您可以尝试以下 bubble sort
代码#Bubble sort in python
def bubbleSort(numbers):
for i in range(len(numbers)):
for j in range(len(numbers)-i-1):
if(numbers[j]>numbers[j+1]):
temp=numbers[j]
numbers[j]=numbers[j+1]
numbers[j+1]=temp
#taking space seperated numbers as input in list
numbers=list(map(int, input().split(' ')));
bubbleSort(numbers)
print(numbers)