3

规格: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 多个数字的用户输入,这可能会非常不灵活。

如果您可以就上述问题或如何以不同方式解决此问题分享一些指导,我将非常感激!谢谢你。

4

3 回答 3

10

对于三个项目,您可以使用maxandmin对它们进行排序:

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)

这是非常低效的,但它的工作原理。

于 2013-06-06T16:17:02.133 回答
1

使用冒泡排序算法:

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
于 2017-10-29T15:26:01.150 回答
0

对于手动排序列表,您可以实现任何类型的排序算法,如bubble sort,等selection sortinsertion 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)
于 2021-03-13T02:39:12.090 回答