2016-08-27 31 views
0

我已经坚持了几天,但没有任何帮助。无论我做什么,最小的价值都不会改变。尽管它使用几乎相同的代码行,但它不会发生最大的值。如何使用if else语句更改变量的值?

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 
+4

你不处理“最小”和/或“最大”仍然是“无”的情况。 – jonrsharpe

+0

在Python 2中,'None'小于任何其他数字。在Python 3中,将一个整数与None比较会导致错误。 – Barmar

+0

第一次为最小和最大变量分配输入值 –

回答

1

首先,(几乎)从来没有使用裸except声明。你会发现你不能或不想处理的异常(如SystemExit)。至少,请使用except Exception

其次,您的except区块意味着您只想处理int(num)可能引起的ValueError。赶上,没有别的。

第三,比较xsmallestlargest是独立的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说法,因为如果用户只输入一个号码,你需要确保smallestlargest被设定为这一数字。 之后输入第一个数字,不存在单个数字将同时更新smallestlargest的情况,因此if/elif有效。

4

的问题是,你是,在这两种情况下,在第一次迭代比较数字来None。在Python 2中,与None相比,每个数字都会显示为“更大”,因此代码适用于查找最大值,但无法找到最小值。

顺便说一句,在Python 3中,同样会给你一个TypeError

要修复它,您可以比较改变这样的事情,走的是None情况考虑:

if smallest is None or x < smallest: