3

我是 Python 新手。首先,代码应该接受一个输入(以“x/y/z”的形式,其中 x、y 和 z 是任何正整数)并将其拆分为三个不同的变量。

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

我希望我的代码的第二部分采用这三个变量并根据它们的数值对它们进行排序。

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

虽然这对于大多数输入都非常有效,但我发现对于输入“23/9/2”和“43/8/2”,输出尚未排序,因此未按正确顺序返回。关于什么可能导致诸如此类的输入不起作用的任何想法?

4

2 回答 2

10

问题是您正在对字符串进行排序,并期望它们像整数一样排序。如果您想要数字排序,首先将您的字符串列表转换为整数列表。

>>> 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 回答