保持零除错误

时间:2018-02-07 20:13:36

标签: python python-2.7

我的代码中不断出现零错误,并且不确定如何修复它。

# coding: utf-8
# In[74]:
import numpy 
import math

Theta_ep = [253.15, 283.15, 313.15]
Theta_e = [[0.0, 0.0, 0.0],[0.0, 0.0, 0.0],[0.0, 0.0, 0.0],[0.0, 0.0, 0.0]]
p = [1000, 1050, 850, 500, 100]
Lambda = 3.504 
K1 = [0, 0, 0, 0]
K2 = [0, 0, 0, 0]
D = [0, 0, 0, 0,]
R_v = 461          #specific gas constant
Rho = 0.597728
C = 273.15
T_E = [[0, 0, 0],[0, 0, 0],[0, 0, 0],[0, 0, 0]] 
T_w = [[0, 0, 0],[0, 0, 0],[0, 0, 0],[0, 0, 0]]
A = 2675.0
e_s = [[0, 0, 0],[0, 0, 0],[0, 0, 0],[0, 0, 0]]
for i in range (0, 4):
    for j in range(0, 3):
        Pi = (p[i+1] / p[0]) ** (1.0 / Lambda)
        K1[i] = -38.5 * (Pi ** (2.0)) + 137.81 * Pi - 53.737
        K2[i] = -4.392 * (Pi ** (2.0)) + 56.831 * Pi - 0.384
        D[i] = (0.1859 * (p[i+1] / p[0]) + 0.6512) ** (-1.0)
        T_E[i][j] = Theta_ep[j] * Pi
        e_s[i][j] = 6.112 * math.exp((17.67*T_E[i][j]) / (T_E[i][j] + 243.5))
        r = 0.622 * (e_s[i][j] / (p[i+1] * 1000.0 - e_s[i][j]))
        Derivative = (4302.65) / ((T_E[i][j] + 243.5) ** 2.0)
        if (C / T_E[i][j]) ** (Lambda) > D[i]:
            T_w[i][j] = -(T_E[i][j] - C - ((A * r) / (1.0 + A * r * Derivative)))            
        elif 1.0 <= (C / T_E[i][j]) ** (Lambda) <= D[i]:
            T_w[i][j] = -(K1[i] - K2[i] * ((C / T_E[i][j]) ** (Lambda)))            
        elif 0.4 <= (C / T_E[i][j]) ** (Lambda) < 1.0:
            T_w[i][j] = ((K1[i] - 1.21) - (K2[i] - 121) * (C / T_E[i][j]) ** (Lambda))            
        elif (C / T_E[i][j]) ** (Lambda) < 0.4:
            T_w[i][j] = ((K1[i] - 2.66) - (K2[i] - 1.21) * (C / T_E[i][j]) ** (Lambda))
        Theta_e[i][j] = T_E[i][j]*((1000.0 / p[i+1]) ** (0.2854 * (1.0-0.28 * 10.0 ** (-3.0 * r)))) * math.exp(((3.376 / T_w[i][j] - 0.00254) * (r * (1.0 + 0.81 * 10.0 ** (-3.0 * r)))))

print ('T_w values:')
print (T_w)

print ('Theta_e values:')
print (Theta_e)

我在第一个if语句中得到一个零错误的浮点除法,并想知道是否有办法解决它?

1 个答案:

答案 0 :(得分:1)

2.7中的{p> Pi(850 / 1000 ) ** (1.0 / 3.504)评估为0.0,而在3.6中则为0.9414772388015634,因为根据{{3} 850/10000 }。

tl; dr:如果要使用2.7,则需要将p值更改为浮点数。

如何我认为这是直截了当的:

我将它包裹在try/except ZeroDivisionError:中然后打印变量,将零追溯到它的原点:

T_E[i][j]为零,通过T_E[i][j] = Theta_ep[j] * Pi创建。 Theta_ep永远不会更改且非零,因此Pi必须为零,这意味着:

Pi = (p[i+1] / p[0]) ** (1.0 / Lambda)评估为零。 Lambda没有变化且非零,因此它必须是p[i+1] / p[0],其评估为零。

p[0] == 1000 - 在2.7中,整数除法向下舍入,因此当除以1000时,小于1000的任何值都将为零。 p的最后三个值都符合该法案。

请参阅integer division了解我的所作所为。