3

私はPythonを初めて使用します。まず、コードは入力( "x / y / z"の形式でx、y、zは任意の正の整数)を受け取り、それを3つの異なる変数に分割することになっています。

input = raw_input()
a, b, c = input.split("/", 2)

コードの2番目の部分で、これら3つの変数を取得し、数値に基づいて並べ替えます。

order = [a, b, c]
print order
order.sort()
print order

これはほとんどの入力で完全に機能しますが、入力「23/9/2」および「43/8/2」の場合、出力がソートされていないため、正しい順序で返されないことがわかりました。これらのような入力が機能しなくなる原因について何か考えはありますか?

4

2 に答える 2

10

問題は、文字列をソートしていて、それらが整数のようにソートされることを期待していることです。数値ソートが必要な場合は、最初に文字列のリストを int のリストに変換します。

>>> sorted(['23', '9', '2'])
['2', '23', '9']
>>> sorted(map(int, ['23', '9', '2']))
[2, 9, 23]

コードを書き直す方法は次のとおりです。

input = raw_input()
a, b, c = map(int, input.split("/", 2))
order = [a, b, c]
print order
order.sort()
print order

それらを文字列に戻す必要がある場合は、単にmap(str, order). Python 2.x ではmap()リストが返され、3.x ではジェネレータが返されることに注意してください。

于 2012-06-05T18:55:17.177 に答える
0

文字列をソートしていますが、整数をソートする必要があります。したがって、次を使用して各文字列を整数に変換する必要がありますint

order = [int(a), int(b), int(c)]
于 2012-06-05T18:55:35.323 に答える