python - Python 3 Tkinter。ValueError:无法将字符串转换为浮点数:'w'
问题描述
作为 Python 的 Tkinter 的初学者,我正在尝试在 Tkinter 上创建一个“终极健身计算器”,供用户输入他们的体重、身高、年龄并找出他们的 BMR(基础代谢率)和 TDEE(每日总能量消耗)。我已经把大部分代码都写下来了,但我一直在调试算法的某个部分。
问题是将字符串转换为浮点数。
我很困惑,因为我已经写下了所有必要的全局变量,而且我认为 W、H 和 A 已经是浮点数,因为我是这样编码的。比如我说 H = (float(Height_CM.get())), W = (float(Weight_KG.get())) 等等。这是错误:
line 53, in Q1d_Gender
BMR = (66 + (13.7*float(W)) + (5*float(H)) - (6.8*float(A)))
ValueError: could not convert string to float: 'w'
另外,我通过简单地将语句打印到控制台来测试上面的算法,如下所示:
W = input("enter weight")
H = input("enter height")
A = input("enter age")
BMR = (66 + (13.7*float(W)) + (5*float(H)) - (6.8*float(A)))
print(BMR)
它奏效了。我不明白为什么它不适用于 tkinter GUI。
查看 tkinter 的完整代码,并将其复制并粘贴到 Pycharm 或任何 Python 程序中。感谢您的帮助,是的,我是初学者:(
解决方案
您需要确保用户输入的每个值都是有效数字。如果您尝试使用float()
除仅包含整数或浮点数的字符串以外的任何内容,那么这将导致错误。如果是我,我会使用try/except
这里的方法来检查每个值,如果其中一个不是浮点数,则要求用户重新输入值。
这可以通过使用在所有答案完成后检查的功能来完成。我将使用一个列表来存储所有值,因为它更干净,更容易使用多个变量名称。
请参阅下面的代码。
var_list = []
def get_input(question):
global var_list
var_list = []
print(question)
var_list.append(input("enter weight: "))
var_list.append(input("enter height: "))
var_list.append(input("enter age: "))
for value in var_list:
try:
float(value)
except ValueError:
get_input("Error: One of the values you entered was not a number.\nPlease answer the following questions with a number.")
get_input("Please answer the following questions with a number.")
BMR = (66 + (13.7*float(var_list[0])) + (5*float(var_list[1])) - (6.8*float(var_list[2])))
print(BMR)
推荐阅读
- mysql - MySQL:在 SELECT 查询期间为每个唯一出现的事件标记 1
- angular - 在 Angular 8 和 springboot 2.2.1 之间配置 CSRF
- python - 通过 Pandas.groupby().ngroup() 分组后如何通过 ID 取回组名
- javascript - 将元素属性道具的大对象传递给组件
- azure - Azure 数据工厂将数据 Blob 复制到 Cosmos db - 需要帮助跳过 2MB 文件
- python - 如何通过优雅的编码更快地将一些逻辑应用于数据框列
- karate - 空手道使用模式匹配验证多个可能的值
- java - 在 jre/bin 目录中找不到 javaws.exe
- amazon-web-services - How to call a grpc service running on ec2 from aws lambda
- python - Python程序不会读取文本文件中的新行