当我尝试运行此代码时,我得到的错误最大值和最小值。谁能告诉我如何解决它?我不允许使用'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,"."
答案 0 :(得分:4)
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
的身份来解决此问题。
答案 1 :(得分:3)
除了伊格纳西奥所说的,你过早地摆脱了循环。您想要在中断之前处理您输入的最后一个数字,因此在最小/最大设置块之后移动if count == number: break
块。
答案 2 :(得分:1)
因为这是你应该学习的功课。以下是如何解决问题的一些想法:
一个错误是您在程序启动时初始化maximum
和minimum
到0
。如果您只输入正数,则最小值将保持在0
但不是真正的最小值。要解决这种情况,您应该查看列表或将两个变量初始化为一些唯一标识无效初始值的值,这些值不会泄漏到您的计算中(我建议None
)。在第一次迭代中,将minimum
和maximum
设置为第一个输入的值。
修改后:您正在比较字符串,因为raw_input
返回字符串,而不是数字。您必须使用int
将这些字符串转换为整数值,例如int(raw_input( ... ))
。另外,你有一个严重缩进的break
我修复了缩进。
其他想法:由于您不允许使用min
和max
,您可以使用
tmp=sorted([int(raw_input('Number: ')) for x in xrange(number)])
minimum, maximum = tmp[0], tmp[-1]
但我猜这会破坏你的任务:)
答案 3 :(得分:1)
请注意,您可以通过
将数字设置为无穷大或负无穷大maximum=float('-inf')
minimum=float('inf')
print minimum, maximum
这可能对你的作业有用;)
如果您想考虑用户输入0
number
的情况,那么Ignacio的答案会更好(因为None
将是一个更加及时的最大数字比-inf
)。
编辑:
备注mVChr的正确发现:
而不是使用带有while True
的{{1}}循环,为什么不写
break
甚至使用for循环:
while count < number:
答案 4 :(得分:0)
需要对特殊值进行最少处理的解决方案是将两个变量初始化为+/-无穷大。
minimum=float("-inf")
maximum=float("inf")