我已经好几天了,但没有任何帮助。无论我做什么,最小的值都不会改变。虽然它使用几乎相同的代码行,但它不会发生最大值。
smallest = None
largest = None
while True:
num = raw_input("Enter a number: ")
if num == "done":
break
try:
x = int(num)
if x < smallest:
smallest = x
elif x > largest:
largest = x
except:
print"Invalid input"
continue
print "Maximum is", largest
print "Minimum is", smallest
答案 0 :(得分:4)
问题在于,在这两种情况下,您在第一次迭代中将数字与None
进行比较。在Python 2中,与None
相比,每个数字都会显示为“更大”,因此代码可用于查找最大值,但无法找到最小值。
BTW,在Python 3中,同样会给你一个TypeError
。
要解决此问题,您可以将您的比较更改为类似的内容,并考虑None
案例:
if smallest is None or x < smallest:
答案 1 :(得分:1)
首先,(几乎)从不使用裸except
语句。您将捕获您无法或不想处理的异常(例如SystemExit
)。至少,请使用except Exception
。
其次,您的except
阻止意味着您只想处理ValueError
可能引发的int(num)
。赶上那个,别无其他。
第三,将x
与smallest
和largest
进行比较的代码与ValueError
处理无关,因此请将其从try
块移出在try/except
陈述之后。
smallest = None
largest = None
num = "not done" # Initialize num to avoid an explicit break
while num != "done":
num = raw_input("Enter a number: ")
try:
x = int(num)
except:
print "Invalid input"
continue
if smallest is None:
smallest = x
if largest is None:
largest = x
if x < smallest:
smallest = x
elif x > largest:
largest = x
print "Maximum is", largest
print "Minimum is", smallest
请注意,您无法将None
支票折叠到if/elif
语句中,因为如果用户只输入一个号码,则需要确保两者 smallest
和largest
设置为该数字。输入 后输入第一个号码,不会有一个号码同时更新smallest
和largest
,因此if/elif
有效。