gpt4 book ai didi

python - "ValueError: could not convert string to float"转换输入时

转载 作者:行者123 更新时间:2023-12-01 12:08:59 25 4
gpt4 key购买 nike

最近我一直在研究一个代码,并因为这个错误而卡住了好几天。
基本上,该程序会计算您每天必须摄入多少卡路里。我必须从条目中获取输入,但我不知道如何将该输入(默认为字符串)转换为浮点数以开始使用数字。
我在 Tkinter 中使用 Python 3。

这是代码:

from tkinter import *

root = Tk()
root.geometry("1000x500")
root.resizable(FALSE, FALSE)
root.title("BMI Calculator")

def calc(args):

def BMI_temp(args):
print(str(boyage))
BMI = IntVar()
BMI = 66.5 + (13.75 * float(boykg)) + (5.003 * float(boycm)) - (6.755 * float(boyage))
bmi_temp = Label(root, text="This is how many calories you have to eat if you have a non-active life: " + str(float(BMI)))
bmi_temp.grid(row=3, sticky=W)

def boy_age_fnct(args):
boy_age_entry.focus_set()
boy_cm_entry.delete(0, "end")
boy_age.grid(row=2, sticky=W)
boy_age_entry.grid(row=2, column=1)
boy_age_entry.bind("<Return>", BMI_temp)

def boy_cm_fnct(args):
boy_cm_entry.focus_set()
boy_kg_entry.delete(0, "end")
boy_cm.grid(row=1, sticky=W)
boy_cm_entry.grid(row=1, column=1)
boy_cm_entry.bind("<Return>", boy_age_fnct)

boy_kg_entry.focus_set()
temp = boygirle.get()
gender = temp.title()
welcome.destroy()
hello_lbl.destroy()
boygirle.destroy()
boygirlq.destroy()

if gender[0] == 'B':
boy_kg.grid(row=0, sticky=W)
boy_kg_entry.grid(row=0, column=1)
boy_kg_entry.bind("<Return>", boy_cm_fnct)

boyage = boy_age_entry.get()
boycm = boy_cm_entry.get()
boykg = boy_kg_entry.get()

def hello(args):
name_user = name_entry.get()
name2 = name_user.title()
name_entry.delete(0, "end")
hello = "Hello " + name2 + "!"
hello_lbl["text"] = hello
hello_lbl.grid(row=2, sticky=W)
btn_cont.grid(row=3, sticky=W)
name.destroy()
name_entry.destroy()
btn_cont.focus_set()

def BMI():
btn_cont.destroy()
boygirlq.grid(row=3, sticky=W)
boygirle.grid(row=3, column=0, ipadx=35)
boygirle.bind("<Return>", calc)
boygirle.focus_set()

welcome = Label(root, text="Hello! This is a BMR calculator. It tells you how many calories you have to eat!", font="System 14 bold")
name = Label(root, text="Please enter your name:", font="System 12")
hello_lbl = Label(root, font="System 14")
boygirlq = Label(root, text="Are you a boy or a girl?", font="System 12 bold")
boy_kg = Label(root, text="Please enter your weight(in kg):", font="System 12 bold")
boy_cm = Label(root, text="Please enter your height(in cm):", font="System 12")
boy_age = Label(root, text="Please enter your age(in years):", font="System 12")

btn_cont = Button(root, text="Continue", font="Helvetica 12", command=BMI, relief=RAISED)

boy_kg_entry = Entry(root, font="System 12", relief=SUNKEN)
boy_cm_entry = Entry(root, font="System 12", relief=SUNKEN)
boy_age_entry = Entry(root, font="System 12", relief=SUNKEN)
name_entry = Entry(root, font="System 12", relief=SUNKEN)
boygirle = Entry(root, font="System 12", relief=SUNKEN)
name_entry.bind("<Return>", hello)
name_entry.focus_set()

welcome.grid(row=0, columnspan=2, ipadx=200)
name.grid(row=1, sticky=W)
name_entry.grid(row=1, column=0)

root.mainloop()

我尝试了在互联网上找到的所有方法,但没有任何效果。

最佳答案

可能的原因:您忘记填写一项
解释
float 可以从 str 构造,它只需要具有正确的格式。
您应该能够仅使用 float(mystr) 将看起来像浮点数的字符串转换为浮点数。
注意:

  • 无空格(或非数字字符)
  • 句点 ( . ) 作为小数点分隔符,而不是逗号 ( , )
  • 允许一些特殊的东西(例如 inf5e3
    ...)

  • 很可能(如果您没有从错误消息中删除任何内容),您忘记填写一个字段并因此尝试执行 float('')
    一些例子
    >>> float('')  # probably your case
    Traceback (most recent call last):
    File "<pyshell#74>", line 1, in <module>
    float('')
    ValueError: could not convert string to float:
    >>> float('1')
    1.0
    >>> float('1.0')
    1.0
    >>> float('no number')
    Traceback (most recent call last):
    File "<pyshell#64>", line 1, in <module>
    float('no number')
    ValueError: could not convert string to float: 'no number'
    >>> float('10e30')
    1e+31
    >>> float('inf')
    inf
    >>> float('123.456')
    123.456
    >>> float('123,456') # , not allowed
    Traceback (most recent call last):
    File "<pyshell#68>", line 1, in <module>
    float('123,456')
    ValueError: could not convert string to float: '123,456'
    >>> float('123 456') # no whitespace as separator
    Traceback (most recent call last):
    File "<pyshell#69>", line 1, in <module>
    float('123 456')
    ValueError: could not convert string to float: '123 456'
    进一步的想法
    获取浮点值的另一种方法是在弹出窗口中询问它们——这可以用 tkinter.simpledialog.askfloat 来完成。如果输入的字符串无法转换,这将直接返回 float 并显示错误消息。
    但是 ,当用户单击“取消”按钮时,它也可能返回 None,因此您可能需要在计算内容之前检查结果。
    例子:
    import tkinter as tk
    from tkinter.simpledialog import askfloat

    def click():
    val = askfloat('Title', 'The prompt:') # float or None (cancel)
    if val is not None:
    tk.Label(root, text=f'The value "{val}" is a valid float').pack() # f-string, replace with `'The value "{}" is ...'.format(val)` if you get an error (Python < 3.6)

    root = tk.Tk()
    tk.Button(root, text='Click!', command=click).pack()
    root.mainloop()
    编辑:
    如果您保留 Entry 小部件,您可能希望捕获错误并向用户显示一条消息。这可以使用 tkinter.mesagebox 轻松完成,特别是在这种情况下 showerror 函数。
    例子:
    import tkinter as tk
    from tkinter.messagebox import showerror

    def click():
    try:
    val = float(entry.get())
    except ValueError as e:
    showerror('Error title', 'The number could not be converted to float:\n'+str(e))
    else:
    entry.delete(0, tk.END)
    Label(root, text=val).pack()

    root = tk.Tk()
    entry = tk.Entry(root)
    tk.Label(root, text='insert a float value below:').pack()
    entry.pack()
    tk.Button(root, text='and click!', command=click).pack()
    root.mainloop()

    关于python - "ValueError: could not convert string to float"转换输入时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54065751/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com