为什么这段代码会产生这样的输出,而不是这样?

时间:2019-04-13 23:39:36

标签: python

当我将这些输入信息列出时:

List: 123 234 543 2 22 9
min = 123, max = 9

返回最小值为123,最大值为9,而最大值为543,最小值为2

while True:
    input_string = input("List: ")
    if not input_string:
            exit()
    ListArray = input_string.split()
    max_value = max(ListArray)
    min_value = min(ListArray)
    print("min = {}, max = {}" .format(min_value, max_value))

我希望输出最大为543,最小为2

3 个答案:

答案 0 :(得分:1)

Python中的每个值都是特定的数据类型-例如,字符串,数字,列表,字典,对象(各种类型)等。它们具有不同的语义。让我们尝试一下:

>>> "abc" + "def"
'abcdef'
>>> 1000 + 999
1999

将用户输入的字符串拆分为项目时,这些项目仍为字符串。对于字符串,"a" < "aa" < "b",以及类似的"1" < "11" < "2"(请参阅Lexicographical order)。

要在列表中找到最大和最小数字,必须转换所有单个字符串:

ListArray = [int(s) for s in ListArray]

请注意,如果输入中除了数字以外没有其他内容,程序现在将引发异常。

答案 1 :(得分:0)

不使用jhpratt的注释,可以通过列表理解来做到这一点。您可以将行ListArray = [int(i) for i in input_string.split()]更改为input_string.split(),这会将for中的每个元素转换为一个int。

如果您更愿意使用for i in range(len(ListArray)): ListArray[i] = int(ListArray[i]) 循环而不是列表理解,可以执行以下操作:

/

这应该使您的代码如您所愿!

答案 2 :(得分:0)

一旦获得用户输入的input_string,就可以使用列表推导将input_string.split()的每个字符串元素转换为一个整型。此时ListArray基本上是一个数字列表,您现在可以轻松地计算最小值和最大值。

input_string = input("Insert a list of numbers: ")
ListArray = [int(i) for i in input_string.split()]
print("min = {}, max = {}" .format(min(ListArray), max(ListArray)))