min/max 的输出有时正确,有时不正确

output for min/max sometimes correct, other times not

所以我正在编写一个基本程序,部分输出是说明用户输入的最小和最大数字。出于某种原因,min 和 max 在某些时候是正确的,而在其他时候则不是。而且我无法弄清楚何时是对还是错的任何模式(不一定是最低数字是第一个或最后一个等)。其他一切都很完美,代码每次都运行良好。这是代码:

total = 0
count = 0
lst = []
while True:
    x = input("Enter a number: ")
    if x.lower() == "done":
        break
    if x.isalpha():
        print("invalid input")
        continue
    lst.append(x)
    total = total + int(x)
    count = count + 1
    avg = total / count

print("The total of all the numbers your entered is: " + str(total))
print("You entered " + str(count) + " numbers.")
print("The average of all your numbers is: " + str(avg))
print("The smallest number was: " + str(min(lst)))
print("The largest number was: " + str(max(lst)))

有什么想法吗?请记住,我(显然)还处于编码研究的早期阶段。谢谢!

如果在程序末尾添加:

print("Your input, sorted:", sorted(lst))

您应该按照 Python 认为的排序顺序看到 lst

您会注意到它并不总是与您认为的排序相匹配。

那是因为您认为 lst 在元素按数字顺序排列时进行排序。但是,元素不是数字;当您将它们添加到 lst 时,它们是字符串,并且 Python 将它们视为字符串,即使您调用 min()max()sorted()他们。

解决您的问题的方法是将 ints 添加到 lst 列表,方法是将您的行更改为:

lst.append(x)

至:

lst.append(int(x))

进行这些更改,看看是否有帮助。

P.S.: 而不是在打印语句中对所有这些整数值调用 str(),像这样:

print("The total of all the numbers your entered is: " + str(total))
print("You entered " + str(count) + " numbers.")
print("The average of all your numbers is: " + str(avg))
print("The smallest number was: " + str(min(lst)))
print("The largest number was: " + str(max(lst)))

您可以利用 Python 的 print() 函数将单独打印每个参数(默认情况下由 space 分隔)这一事实。所以改用这个,它更简单,更容易阅读:

print("The total of all the numbers your entered is:", total)
print("You entered", count, "numbers.")
print("The average of all your numbers is:", avg)
print("The smallest number was:", min(lst))
print("The largest number was:", max(lst))

(如果您愿意,可以使用 f-strings。但您可以自己查找。)

当您将输入添加到总数中时,您将输入转换为 int,但当您找到 minmax 时则不会。

当给定字符串时,minmax return 值基于 字母顺序 ,有时可能恰好对应于数字大小, 但一般不会。

您需要做的就是将输入附加为 ints。

total = 0
count = 0
lst = []
while True:
    x = input("Enter a number: ")
    if x.lower() == "done":
        break
    if x.isalpha():
        print("invalid input")
        continue
    lst.append(int(x)) # this should fix it.
    total = total + int(x)
    count = count + 1
    avg = total / count

您可能还想使用字符串格式来打印您的答案:

print(f"The total of all the numbers your entered is: {total}")
print(f"You entered {count} numbers.")
print(f"The average of all your numbers is: {avg}")
print(f"The smallest number was: {min(lst)}")
print(f"The largest number was: {max(lst)}")