Python 3 Tkinter。值错误:无法将字符串转换为浮点数:"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程序中。感谢您的帮助,是的,我是一个初学者:(

链接!

程序正在尝试将输入字符串转换为浮点数。有时这将起作用,即23.5.但是,用户也可以输入不是浮点数的东西,例如w。正如你所看到的,它将尝试投射并失败。

您必须检查这些非浮点数并对其进行处理。为了确定字符串是否是数字,请查看以下问题: 如何检查字符串输入是否为数字?

您需要确保用户输入的每个值都是有效的数字。如果您尝试对仅包含整数或浮点数的字符串以外的任何内容使用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)

最新更新