在 Python 中生成列表时除以零
Dividing by Zero while Generating List in Python
我正在尝试制作一个由用户输入生成的百分比列表到 table。 table 正在工作并且有来自 e1 - e24 的输入。问题是一些输入为零,因此我的程序在遇到错误时停止。
这是用户输入(由 Tkinter 生成):
第一列是e1-e12,第二列是e13-e24。因此,我将 e1 除以 e13 以沿行划分。
这是列表:
Percents= [("%.2f" % (int(e1.get())/int(e13.get()))), ("%.2f" % (int(e2.get())/int(e14.get()))),\
("%.2f" % (int(e3.get())/int(e15.get()))),("%.2f" % (int(e4.get())/int(e16.get()))),\
("%.2f" % (int(e5.get())/int(e17.get()))),("%.2f" % (int(e6.get())/int(e18.get()))),\
("%.2f" % (int(e7.get())/int(e19.get()))),("%.2f" % (int(e8.get())/int(e20.get()))),\
("%.2f" % (int(e9.get())/int(e21.get()))),("%.2f" % (int(e10.get())/int(e22.get()))),\
("%.2f" % (int(e11.get())/int(e23.get()))),("%.2f" % (int(e12.get())/int(e24.get())))]
但是,当它到达零时,它会卡住。我尝试了 try:
和 except ZeroDivisionError:
但由于它不可避免地会遇到错误,因此它不会存储百分比列表中的任何内容。我希望通过循环制作列表,但尝试 e(i) 与 e1 不同,所以我被那个问题挡住了。
for i in range(1, 12):
if 5 > i:
Percents.append("%.2f" % (int(e(i).get())/int(e(i+12).get())))
编辑:根据以下答案,我尝试:
def calc_percent(foo,bar):
try:
return ("%.2f" % (int(foo.get())/int(bar.get())))
except ZeroDivisionError:
return "0"
Percents = [calc_percent(e1,e13),calc_percent(e2,e14)]
print Percents
我明白了 TclError: invalid command name ".286005808"
所以我将 Percents
和 print Percents
放在 def 中并得到 TypeError: calc_percent() takes exactly 2 arguments (0 given)
一种方法是用零预填充:
百分比 = [0]*12
然后,在你能插入的地方插入:
try:
Percents[x] = #stuff
...
最好创建 2 个条目列表(每列一个),然后执行:
my_list = [e_left.get() / e_right.get() for e_left, e_right in zip(left_entries_list, right_entries_list) if e_right.get() != 0 else y]
y
是您决定使用的任何值,以防正确的值为 0
.
编辑: 显然你可以在列表理解中使用 if
但 if...else
不起作用。所以你可以使用 map
代替。这是一个简化的例子:
a = [1, 2, 3, 4]
b = [1, 1, 0, 1]
# -1 or other `default value` you wish to use
my_list = map(lambda x, y: x / y if y != 0 else -1, a, b)
print my_list
>> [1.0, 2.0, -1, 4.0]
解决这个问题的最简单方法是创建一个函数定义来为您进行计算,然后您可以在其中进行错误处理。
def calc_percent(foo, bar):
try:
return "%.2f" % (int(foo)/int(bar))
except ZeroDivisionError:
return "0" # or whatever you wanted to return
然后在您的百分比定义中调用它。
percents = [calc_percent(e1.get(),e13.get()),....
您可能还想查看此 post 以执行您实际建议的操作:Looping over widgets in Tkinter
我正在尝试制作一个由用户输入生成的百分比列表到 table。 table 正在工作并且有来自 e1 - e24 的输入。问题是一些输入为零,因此我的程序在遇到错误时停止。
这是用户输入(由 Tkinter 生成):
第一列是e1-e12,第二列是e13-e24。因此,我将 e1 除以 e13 以沿行划分。
这是列表:
Percents= [("%.2f" % (int(e1.get())/int(e13.get()))), ("%.2f" % (int(e2.get())/int(e14.get()))),\
("%.2f" % (int(e3.get())/int(e15.get()))),("%.2f" % (int(e4.get())/int(e16.get()))),\
("%.2f" % (int(e5.get())/int(e17.get()))),("%.2f" % (int(e6.get())/int(e18.get()))),\
("%.2f" % (int(e7.get())/int(e19.get()))),("%.2f" % (int(e8.get())/int(e20.get()))),\
("%.2f" % (int(e9.get())/int(e21.get()))),("%.2f" % (int(e10.get())/int(e22.get()))),\
("%.2f" % (int(e11.get())/int(e23.get()))),("%.2f" % (int(e12.get())/int(e24.get())))]
但是,当它到达零时,它会卡住。我尝试了 try:
和 except ZeroDivisionError:
但由于它不可避免地会遇到错误,因此它不会存储百分比列表中的任何内容。我希望通过循环制作列表,但尝试 e(i) 与 e1 不同,所以我被那个问题挡住了。
for i in range(1, 12):
if 5 > i:
Percents.append("%.2f" % (int(e(i).get())/int(e(i+12).get())))
编辑:根据以下答案,我尝试:
def calc_percent(foo,bar):
try:
return ("%.2f" % (int(foo.get())/int(bar.get())))
except ZeroDivisionError:
return "0"
Percents = [calc_percent(e1,e13),calc_percent(e2,e14)]
print Percents
我明白了 TclError: invalid command name ".286005808"
所以我将 Percents
和 print Percents
放在 def 中并得到 TypeError: calc_percent() takes exactly 2 arguments (0 given)
一种方法是用零预填充: 百分比 = [0]*12 然后,在你能插入的地方插入:
try:
Percents[x] = #stuff
...
最好创建 2 个条目列表(每列一个),然后执行:
my_list = [e_left.get() / e_right.get() for e_left, e_right in zip(left_entries_list, right_entries_list) if e_right.get() != 0 else y]
y
是您决定使用的任何值,以防正确的值为 0
.
编辑: 显然你可以在列表理解中使用 if
但 if...else
不起作用。所以你可以使用 map
代替。这是一个简化的例子:
a = [1, 2, 3, 4]
b = [1, 1, 0, 1]
# -1 or other `default value` you wish to use
my_list = map(lambda x, y: x / y if y != 0 else -1, a, b)
print my_list
>> [1.0, 2.0, -1, 4.0]
解决这个问题的最简单方法是创建一个函数定义来为您进行计算,然后您可以在其中进行错误处理。
def calc_percent(foo, bar):
try:
return "%.2f" % (int(foo)/int(bar))
except ZeroDivisionError:
return "0" # or whatever you wanted to return
然后在您的百分比定义中调用它。
percents = [calc_percent(e1.get(),e13.get()),....
您可能还想查看此 post 以执行您实际建议的操作:Looping over widgets in Tkinter