在Python 3.2中将字符串转换为浮点数
这个程序的目的是显示根据用户输入的数字计算出的总和、平均值、最大值和最小值。
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
这个名字存在得太久。