当我尝试运行这段代码时,我得到了不正确的最大值和最小值。有人能告诉我怎样才能修复它吗?我不允许使用'max‘和'min’。
更新:我已经更新了代码,但它仍然不能正常工作。更新2:代码现在可以工作了!非常感谢大家!
minimum=float('inf')
maximum=None
count=0
total=0
number=input ("Please enter the amount of numbers you wish to categorize: ")
while True:
num = input("Enter a number: ")
count+=1
total+=num
if num is None or num < minimum:
minimum = num
if num is None or num > maximum:
maximum = num
if count == number:
break
print "The average of your numbers is ", round ((total / count),2),"."
print 'The largest number is:', maximum,"."
print 'The smallest number is:', minimum,"."
发布于 2012-03-26 01:52:24
您的minimum
和maximum
的初始值和条件不正确。
minimum = None
maximum = None
...
if minimum is None or num < minimum:
minimum = num
if maximum is None or num > maximum:
maximum = num
...
您还可以通过检查count
是否等于1而不是None
的标识来修复此问题。
发布于 2012-03-26 02:01:42
除了Ignacio所说的,你还过早地打破了你的循环。您希望在中断前处理输入的最后一个数字,因此将if count == number: break
块移动到最小/最大设置块之后。
发布于 2012-03-26 01:53:14
因为这是你应该学习的作业。下面是一些如何解决这个问题的想法:
一个错误是您在程序启动时将maximum
和minimum
初始化为0
。如果只输入正数,minimum将保留为0
,但不是真正的最小值。要解决这种情况,您应该查看列表,或者将两个变量都初始化为一些唯一标识不会泄漏到计算中的无效初始值的值(我建议使用None
)。在第一次迭代中,将minimum
和maximum
都设置为第一个输入的值。
modfifications之后的:由于raw_input
返回字符串,而不是数字,所以您正在比较字符串。您必须使用int
将这些字符串转换为整数值,例如int(raw_input( ... ))
。此外,你有一个严重缩进的break
,我修复了它的缩进。
Other idea:既然你不能使用min
和max
,你可以直接使用
tmp=sorted([int(raw_input('Number: ')) for x in xrange(number)])
minimum, maximum = tmp[0], tmp[-1]
但我猜这会让你的任务失败:)
https://stackoverflow.com/questions/9865702
复制相似问题