如何使用if else语句更改变量的值?

时间:2016-08-27 12:48:24

标签: python python-2.7 python-3.x

我已经好几天了,但没有任何帮助。无论我做什么,最小的值都不会改变。虽然它使用几乎相同的代码行,但它不会发生最大值。

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

2 个答案:

答案 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)。赶上那个,别无其他。

第三,将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有效。