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 つの 1 桁の数字しか処理できません。第 2 に、このソリューションを使用することにより、コーダーは 3 つの数字を比較するために考えられるすべてのシナリオを列挙することを余儀なくされます。たとえば、100 以上の数字のユーザー入力を受け入れるようにスクリプトを変更する必要がある場合、これは非常に柔軟性に欠ける可能性があります。

上記の質問、またはこの問題を別の方法で解決する方法に関するガイダンスを共有していただければ、非常に助かります。ありがとうございました。

4

3 に答える 3

10

3 つの項目については、 と を使用maxminて並べ替えることができます。

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 に答える