在Python 3.2中将字符串转换为浮点数

3 投票
5 回答
26972 浏览
提问于 2025-04-17 03:40

这个程序的目的是显示根据用户输入的数字计算出的总和、平均值、最大值和最小值。

count=0.0
Sum=0.0
average=0.0
data=float(input("Enter a number or just ENTER to quit:"))
Min=data
Max=data

while data!="":
    count+=1
    number=float(data)
    Sum+=number
    average=Sum/count

    if data<Min:
        Min=data
    if data>Max:
        Max=data
    data=float(input("Enter a number or just ENTER to quit:"))

print(count,("numbers entered."))
print("Sum:",Sum)
print("Average:",average)
print("Min:",Min)
print("Max:",Max)

问题出在第20行:
data=float(input("输入一个数字,或者直接按ENTER退出:"))

当我按ENTER键结束循环时,它提示无法将字符串转换为浮点数,并出现错误。我到底哪里出错了???

5 个回答

1

float()这个函数在输入为空的时候会报错。为了让你的循环正常工作,你需要处理这个错误。这里有一个最简单的解决办法:

在Python 2.x版本中,实际上是input()这个调用导致了错误,而不是float()。所以,如果你在使用Python 2.x版本,我的解决办法是这里唯一有效的。

while True:
    count+=1
    Sum+=data
    average=Sum/count

    if data<Min:
        Min=data
    if data>Max:
        Max=data
    try:
      data=float(input("Enter a number or just ENTER to quit:"))
    except:
      break
2

默认情况下,input的类型是字符串。按下ENTER键会返回一个空字符串,这个空字符串不能转换成浮点数,因为它是空的,里面没有任何内容可以转换,这就导致了错误。下面有两种方法可以解决这个错误。

解决方案 1

不要直接把输入转换成浮点数,而是在把输入的值赋给任何变量时再进行转换。

data=input("Enter a number or just ENTER to quit:")

在循环之前添加以下语句,以处理用户想要退出但没有输入任何数字的情况。

if not data: # If user wants to exit without entering any number
    Max = 0
    Min = 0
else:  # Cast the inputs by user to float
    Max = float(data)
    Min = float(data)

最后,在循环内部的开头添加以下行。

data = float(data)

完整代码

count=0.0
Sum=0.0
average=0.0
data=input("Enter a number or just ENTER to quit:")
if not data:
    Max = 0
    Min = 0
else:
    Max = float(data)
    Min = float(data)

while data!='':
    data = float(data)
    count+=1 
    number=float(data)
    Sum+=number
    average=Sum/count

    if data<Min:
        Min=data
    if data>Max:
        Max=data
    data=input("Enter a number or just ENTER to quit:")

print(count,("numbers entered."))
print("Sum:",Sum)
print("Average:",average)
print("Min:",Min)
print("Max:",Max)

解决方案 2

你还可以为空输入设置一个默认值。在这里,由于你要把输入转换成浮点数,可以为空输入设置任何数字作为默认值。不过,我不太推荐这种方法,因为如果用户输入的数字和默认值相同,循环就会结束。在下面的例子中,我只修改了你代码的两行,把空输入的默认值设置为0。

count=0.0
Sum=0.0
average=0.0
data=float(input("Enter a number or just ENTER to quit:") or 0)
Min=data
Max=data

while data!=0:
    count+=1
    number=float(data)
    Sum+=number
    average=Sum/count

    if data<Min:
        Min=data
    if data>Max:
        Max=data
    data=float(input("Enter a number or just ENTER to quit:") or 0)

print(count,("numbers entered."))
print("Sum:",Sum)
print("Average:",average)
print("Min:",Min)
print("Max:",Max)
3

其实,你不应该马上把数据转换成 float 类型。而且,这样写并不是在 Python 中使用 do..while 循环的正确方法。

while True:
    data = input('Enter a number or ENTER to quit: ')
    if not data: break

    data = float(data)
    # ...

这样做可以避免重复代码,也不用让 data 这个名字存在得太久。

撰写回答