尝试使用Python从用户输入中找出最小值和最大值,哨兵值总是出现-99作为最小值

0 投票
2 回答
4409 浏览
提问于 2025-04-17 17:01

我在想怎么修复我的程序,这个程序会让用户输入任意数字。

如果想结束程序,就输入-99。输入的过程都很顺利,直到我输入-99来停止程序,这时候它却把-99当成了最小值。以下是我的代码。最后得到的最小值不应该是-99。

s = -99
n = 1
minimum = None
maximum = None
print ("Enter a series of numbers")
print ("Enter -99 to quit.")
while n != s:
    n = float(input("Number: "))
    if minimum is None or n < minimum:
        minimum = n
    if maximum is None or n > maximum:
        maximum = n
    print ("The maximum is: ", maximum)
    print ("The minimum is: ", minimum)

2 个回答

-1

你需要在循环结束时检查这个数字是否是-99。你还需要在循环之前获取这个数字n。此外,你需要在处理浮点数时使用一个try块,以防输入的不是浮点数(如果输入的不是浮点数,float会抛出一个异常,而不是返回None):

import sys

s = -99
n = 1
minimum = None
maximum = None
print ("Enter a series of numbers")
print ("Enter -99 to quit.")
try:
    n = float(input("Number: "))
except ValueError:
    sys.exit("You did not enter a float!")

while n != s:
    minimum = n if minimum is None else min(n, minimum)
    maximum = n if maximum is None else max(n, maximum)
    print ("The maximum is: ", maximum)
    print ("The minimum is: ", minimum)
    try:
        n = float(input("Number: "))
    except ValueError:
        sys.exit("You did not enter a float!")
1
1. n = 1
2. 1 == -99 ?
3. n = new input
4. set new minimum from n
5. n == -99?

首先(4.),你需要把新的最小值设为 n(即使 n==-99 也是如此),然后(5.)你再检查这个值是否是停止的条件。

我建议把循环改成一个无限循环(while True),然后检查这个值是否是 -99(如果是,就跳出循环),之后再设置新的最小值或最大值。

s = -99
n = 1
minimum = None
maximum = None
print ("Enter a series of numbers")
print ("Enter -99 to quit.")
while True:
    n = float(input("Number: "))
    if n == s:
        break
    if minimum is None or n < minimum:
        minimum = n
    if maximum is None or n > maximum:
        maximum = n
    print ("The maximum is: ", maximum)
    print ("The minimum is: ", minimum)

撰写回答