我要求编写一个程序,其中包含一堆数字并打印出它们的最大和最小数量,下面是我的代码:
maximum = None
minimum = None
while True:
num = raw_input("Enter a number: ")
if num == 'done':
break;
try:
num = int(num)
if num >= maximum:
maximum = num
if num <= minimum:
minimum = num
except:
print "Please Enter A Number!"
continue
print "Max = ",maximum, "Min = ",minimum
事情就是当我运行这个程序时,Min总是等于它的初始值None,但如果我将第二个if语句更改为else,它将起作用。现在的错误是什么?
答案 0 :(得分:1)
如果问题中的缩进是正确的(而不是某些复制粘贴错误,那就是问题,minimum = num
行需要向右缩进。此外,您需要注意最大值和最小值是None
,当与Python 3.x中的int
进行比较时会抛出错误,并且在Python 2.x中无法正常工作,因为没有int会小于None。
maximum = None
minimum = None
while True:
num = raw_input("Enter a number: ")
if num == 'done':
break;
try:
num = int(num)
if maximum is None:
maximum = num
minimum = num
if num >= maximum:
maximum = num
if num <= minimum:
minimum = num
except:
print "Please Enter A Number!"
continue
print "Max = ",maximum, "Min = ",minimum
答案 1 :(得分:1)
这里的问题是你在这里使用None
作为默认值。它恰好起作用,因为所有数字都大于None
。但是,这样的最低条件永远不会成真。
有几种方法可以解决这个问题。明显的非pythonic方式是将最小值设置为float('inf')
。这显然是无限的。 “更好”的方式是将条件改为:
if num <= minimum or minimum==None:
将在第一次传递时自动设置min。
P.S。:我猜你正在为算法练习这样做,因为min()
和max()
函数都是内置的。
答案 2 :(得分:1)
我将如何做到这一点:
track = []
while True:
num = raw_input("Enter a number: ")
if num == 'done':
break
try:
num = int(num)
except ValueError:
print "Please Enter A Number!"
continue
track.append(num)
print "Max = ", max(track), "Min = ", min(track)