尝试使用Python从用户输入中找出最小值和最大值,哨兵值总是出现-99作为最小值
我在想怎么修复我的程序,这个程序会让用户输入任意数字。
如果想结束程序,就输入-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)