Python 3-代码不会将大于1的用户输入识别为数字
我为python for informatics中的一个练习创建了以下python代码。代码将运行,但不会将大于1的用户输入表单识别为数字。任何协助都将不胜感激Python 3-代码不会将大于1的用户输入识别为数字,python,python-3.x,Python,Python 3.x,我为python for informatics中的一个练习创建了以下python代码。代码将运行,但不会将大于1的用户输入表单识别为数字。任何协助都将不胜感激 def isfloat(string): try: float(string) if float(string) == True: return True except ValueError: return False user_input = i
def isfloat(string):
try:
float(string)
if float(string) == True:
return True
except ValueError:
return False
user_input = input('Please enter a real number. Type \"done\" to exit and tally your entries \n> ')
data = 0
count = 0
while isfloat(user_input) == True:
data = data + float(user_input)
count = count + 1
user_input = input("Please enter another value \n> ")
isfloat(user_input)
else:
if (isfloat(user_input) == False) and (user_input == "done"):
print("The sum of your entries is: " + str(data))
print("The number of entries was: " + str(count))
exit()
else:
print("The entry was not a numeric value \n")
print("The sum of your valid entries is: " + str(data))
print("The number of valid entries was: " + str(count))
exit()
问题在于
float(string)
永远不会返回True
;它将始终返回一个类型为float
的数字,或者如果无法将输入转换为float,它将引发一个ValueError
要解决此问题,您需要删除if
语句,并在调用isfloat
函数中的float(string)
后简单地返回True
。如果float(string)
引发ValueError
,isfloat
会像您预期的那样返回False
;否则,它将继续并返回True
def isfloat(string):
try:
float(string)
return True
except ValueError:
return False
问题在于您的
isfloat
。您不应该将float
的结果与True
进行比较。相反,你可以这样做:
def isfloat(string):
try:
float(string)
return True
except ValueError:
return False
您实际上不需要对float
的返回值执行任何操作。如果该调用没有触发错误——您有一个浮点数,那么只需返回True
def isfloat(string):
try:
float(string)
return True
except ValueError:
return False
使用这条线可能很有诱惑力
if float(string): return True
这几乎是可行的,但会将“0”
错误分类这是荒谬的:
if float(string) == True:
这是检查float
转换值是否等于True
(数值为1)
只需检查异常,然后执行以下操作:
def isfloat(string):
try:
float(string)
except ValueError:
return False
else:
return True
如果
string
是“1”
或“1.0”
,则float(string)=True
将通过,因为True
是值为1
的int
子类。但这是一个糟糕的测试,我同意,尽管我不是有意修改代码的其余部分;我只是想解决OP提出的问题。我会修改我的帖子,让它更清楚。谢谢你,约翰。我只呆了一个星期左右,所以雾还没有散。这绝对纠正了问题。