您能解释下面的普通代码语句功能是否不清楚的原因吗?
numbers = "677 2584 238 3126 1366 646 2560 2439 543 379 1048 2053 2518 1496 2537 1983 118 2105 1175 145 311 1881"
listed_numbers = numbers.split(" ")
max = listed_numbers[0]
min = listed_numbers[0]
for each in listed_numbers:
if each >= max:
max = each
if each <= min:
min = each
print(str(max) + " " + str(min))
已附加代码链接 https://repl.it/join/grsvacto-nihilisticrefor
PS 如果问题不清楚或不正确,请指出令人困惑的片段,或编辑我的问题。这将有助于我稍后提出这个问题。
答案 0 :(得分:4)
当您对字符串类型而不是数字类型(int,float等)使用比较运算符(>
,<
,>=
,<=
)时,这两个使用字母排序比较值,以确定哪一个更大-即使您的字符串仅包含数字。以1
开头的字符串将被排序为低,即使该字符串为100
也是如此。以9
开头的字符串将被高排序,即使该字符串是9
。
例如,在您的python REPL中尝试以下操作:
>>> 9 < 100
True
>>> "9" < "100"
False
如您所见,您正在执行字符串比较而不是数值比较。您需要先将值转换为int。代替:
listed_numbers = numbers.split(" ")
…仅创建一个字符串列表,请尝试:
listed_numbers = [int(i) for i in numbers.split(" ")]
…将每个值转换为一个int并使用list comprehension语法创建一个值列表。
尝试一下更改后的代码,您将获得输出3126 118