[英]How to avoid division by zero error when calculating average value from entry in tkinter
root = Tk()
def calc_avg():
s = entry.get()
digit_list = [float(x) for x in s]
avg = sum(digit_list) / len(digit_list)
b = f'{avg:.3f}'
if avg >= 1.450:
avg_value = Label(side_frame, text=employee + ": " + str(b), font=('Helvetica 10 bold'), fg="green")
avg_value.place(relx='0.03', rely='0.05')
elif avg <= 1.449 and avg >= 1.400:
lpd_value = Label(side_frame, text=employee + ": " + str(b), font=('Helvetica 10 bold'), fg="orange")
avg_value.place(relx='0.03', rely='0.05')
else:
avg_value = Label(side_frame, text=employee + ": " + str(b), font=('Helvetica 10 bold'), fg="red")
avg_value.place(relx='0.03', rely='0.05')
avg_value.after(1000, calc_avg)
employee = "John"
main_frame = LabelFrame(root, width=650, height=500)
side_frame = LabelFrame(root, width=200, height=500)
main_frame.grid(row=0, column=0)
side_frame.grid(row=0, column=1)
label1 = Label(main_frame, text=employee, font=('Helvetica 12 bold'))
label1.place(relx='0.03', rely='0.05')
entry = Entry(main_frame, width=42, borderwidth=1, font=('Helvetica 12'))
entry.place(relx='0.22', rely='0.05')
calc_avg()
root.mainloop()
我遇到了一个问题,当我在输入框中输入一串数字时,程序应该计算这些数字的平均浮点值。
我已经实现了 '''after()''' 方法,所以值是实时更新的。
问题是,当我启动我的程序时,由于一开始的输入框中没有数字,我马上得到 ZeroDivisionError。
当没有输入而不是错误消息时,如何使 label 显示“无值”; 以及进行数字输入时的实际值?
首先,你不需要最后的str(b)
,因为b
已经是一个字符串。 您可以只使用一个简单的 if 语句来检查长度是否非零:
def calc_avg():
s = entry.get()
digit_list = [float(x) for x in s]
# check to make sure it has elements
if digit_list:
avg = sum(digit_list) / len(digit_list)
b = f'{avg:.3f}'
else:
avg = None
b = "No value"
if avg is None:
avg_value = Label(side_frame, text=employee + ": " + b, font=('Helvetica 10 bold'), fg="red")
avg_value.place(relx='0.03', rely='0.05')
elif avg >= 1.450:
avg_value = Label(side_frame, text=employee + ": " + b, font=('Helvetica 10 bold'), fg="green")
avg_value.place(relx='0.03', rely='0.05')
elif avg <= 1.449 and avg >= 1.400:
lpd_value = Label(side_frame, text=employee + ": " + b, font=('Helvetica 10 bold'), fg="orange")
avg_value.place(relx='0.03', rely='0.05')
else:
avg_value = Label(side_frame, text=employee + ": " + b, font=('Helvetica 10 bold'), fg="red")
avg_value.place(relx='0.03', rely='0.05')
avg_value.after(1000, calc_avg)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.