在Python中生成列表时除以零

时间:2015-08-11 16:42:04

标签: python list for-loop divide-by-zero

我正在尝试将User-Input生成的百分比列表放入表中。该表正在运行,并有来自e1-e24的输入。问题是某些输入为零,因此我的程序在遇到错误时会停止。

这是用户输入(由Tkinter生成):

enter image description here

第一列是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)

3 个答案:

答案 0 :(得分:3)

最好创建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]

答案 1 :(得分:2)

解决此问题的最简单方法是创建一个函数定义,为您进行计算,然后您可以在那里进行错误处理。

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()),....

您可能还想查看此帖子,了解您的实际建议:Looping over widgets in Tkinter

答案 2 :(得分:-1)

一种方法是预填充零: 百分比= [0] * 12 然后,插入尽可能:

try:
    Percents[x] = #stuff
...