在 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" 所以我将 Percentsprint 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.

编辑: 显然你可以在列表理解中使用 ifif...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