Python 处理公式的方式与预期不同

Python handling formula differently than expected

我正在创建供私人使用的潜水 table,但我 运行 遇到了计算 EAD

的错误
def calculate_ead(self):
    nitrogen = 100 - self.mix
    EAD = (self.depth + 10) * nitrogen / 0.79 - 10
    self.depth = int(EAD)

这个计算给出了一个非常高的数字(大约数千)。我从 this 网站和英尺部分的计算中得到了公式。混合高于 21 时的计算应该给出比深度更小的数字。

我对深度和其他东西的初始化:

def __init__(self, d=35, t=30, m=21, p=1.6):
        self.depth = int(d)  # Depth
        self.time = int(t)  # Time
        self.mix = int(m)  # Mix (Oxygen integer)
        self.max_po2 = float(p)

在这种情况下混合氧气的百分比,因此当用它减去一百时,它应该给出该公式的氮分数 EAD = (深度 + 10) × N2 的分数 / 0.79 − 10

告诉我我做错了什么? 来自交互式 shell:

的示例测试
depth = 90
mix = 36
nitrogen = 100 - mix
EAD = (depth + 10) * nitrogen / 0.79 + 10
EAD
8111.26582278481

预期输出:

>>>depth = 90
>>>mix = 36
>>>nitrogen = 100 - mix
>>>EAD = (depth + 10) * nitrogen / 0.79 + 10
>>>EAD
67

数字格式: self.depth为自然数(25, 30,35) self.mix是自然数(30,45,60)

在您提供的 link 上, 对于以英尺为单位的深度,等效空气深度可以计算如下:

EAD = (Depth + 33) × Fraction of N2 / 0.79 − 33

应用你的数字,

depth = 90
mix = 36
nitrogen = float(100 - mix) /100 #Fraction of N2
EAD = (depth + 33) * nitrogen / 0.79 - 33
print EAD

将给出以英尺为单位的正确结果。

Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
66.6455696203
>>> 

你应该使用 N2 的 fraction(%),试试下面的代码。

def calculate_ead(self):
    nitrogen = (100 - self.mix)/100
    EAD = (self.depth + 10) * nitrogen / 0.79 - 10
    self.depth = int(EAD)