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()
他们。
解决您的问题的方法是将 int
s 添加到 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
,但当您找到 min
和 max
时则不会。
当给定字符串时,min
和 max
return 值基于 字母顺序 ,有时可能恰好对应于数字大小, 但一般不会。
您需要做的就是将输入附加为 int
s。
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)}")
所以我正在编写一个基本程序,部分输出是说明用户输入的最小和最大数字。出于某种原因,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()
他们。
解决您的问题的方法是将 int
s 添加到 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
,但当您找到 min
和 max
时则不会。
当给定字符串时,min
和 max
return 值基于 字母顺序 ,有时可能恰好对应于数字大小, 但一般不会。
您需要做的就是将输入附加为 int
s。
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)}")