Python 为什么代码只适用于前三次迭代?

Python 为什么代码只适用于前三次迭代?,python,Python,请您帮助解释为什么代码只在前三次迭代中给出正确的最小和最大输出 我的前三个迭代的输出工作正常。最小和最大变量被锁定到这些值,并且不会根据新输入进行更新。 其余的计算(总和、计数和平均数)工作正常 [enter image description here][1] count= 0 sum=0 average=0 minimal=None maximum=None while True: number=raw_input("Enter a number: ") try:

请您帮助解释为什么代码只在前三次迭代中给出正确的最小和最大输出

我的前三个迭代的输出工作正常。最小和最大变量被锁定到这些值,并且不会根据新输入进行更新。 其余的计算(总和、计数和平均数)工作正常

[enter image description here][1]
count= 0
sum=0
average=0
minimal=None
maximum=None
while True:
    number=raw_input("Enter a number: ")
    try:
        if (number=='done'):
            break
        else:
            count=count+1
            sum=sum+float(number)
            if minimal==None:
                minimal=float(number)
                maximum=float(number)
            else:
                minimal=min(number,minimal)
                maximum=max(number,maximum)
                print maximum
                print minimal
            average=sum/count
            #print ("Calc done")
    except:
        print ("Invalid input")
print("Count: %d, Sum=%d and Average=%d" %(count,sum,average))
print("smallest number is %d" %minimal)
print("largest number is %0.2f" %float(maximum))

下面的代码起作用。请看区别:

count= 0
sum=0
average=0
minimal=None
maximum=None
while True:
    number=raw_input("Enter a number: ")
    try:
        if (number=='done'):
            break
        else:
            count=count+1
            sum=sum+float(number)
            if minimal==None:
                minimal=float(number)
                maximum=float(number)
            else:
                minimal=min(float(number),minimal)
                maximum=max(float(number),maximum)
                print maximum
                print minimal
            average=sum/count
            #print ("Calc done")
    except:
        print ("Invalid input")
print("Count: %d, Sum=%d and Average=%d" %(count,sum,average))
print("smallest number is %d" %minimal)
print("largest number is %0.2f" %float(maximum))

在函数调用
min(number,minimal)
max(number,maximum)
时,您没有将
number
强制转换为浮点数。必须这样做,因为
最小值
最大值
是浮动类型

尝试将参数
number
替换为
float(number)
,如下所示:

minimal=min(float(number),minimal)
maximum=max(float(number),maximum)

您忘记在
min(number,minimal)
中将
number
强制转换为浮点。使用
max
的行也存在同样的问题。您没有在
else
块中将数字键入到
float
。通常最好快速解释差异。感谢您的回复。这就解决了问题。我考虑过这一点,所以在if条件中添加了类型转换,并假设“如果”块总是在else块之前实现,那么“最小”和“最大”将被转换为float。我仍然不明白为什么它在前几次迭代中有效(我的意思是在else块中没有float(number))。