Python 异常。 我不能保证这个版本会解决你最初的问题,我尝试了另一个解决方案,但因为这个问题有一个正确的答案,这不是我的主要目标
我看到你的帖子说一卡路里的差异是可以接受的,所以我建议创建一个函数,它的treshold为一卡路里,如果两个对象之间的差值小于treshold,则返回true。Python 异常。 我不能保证这个版本会解决你最初的问题,我尝试了另一个解决方案,但因为这个问题有一个正确的答案,这不是我的主要目标,python,class,Python,Class,我看到你的帖子说一卡路里的差异是可以接受的,所以我建议创建一个函数,它的treshold为一卡路里,如果两个对象之间的差值小于treshold,则返回true。如果Vitals.activity==Decimal(1.20):如果importVitals.activity==Decimal(1.20):那不应该是吗?嗨,约翰尼。我直接使用了类引用,因为我想确保它正确地从元组传递到类变量。我刚刚尝试了另一种方法(使用类的实例),但不幸的是,它返回了相同的结果。由于importVitals=Vita
如果Vitals.activity==Decimal(1.20):
如果importVitals.activity==Decimal(1.20):那不应该是吗?嗨,约翰尼。我直接使用了类引用,因为我想确保它正确地从元组传递到类变量。我刚刚尝试了另一种方法(使用类的实例),但不幸的是,它返回了相同的结果。由于importVitals=Vitals,因此importVitals是指向Vitals的指针,所以我想这无关紧要。但是我建议你试试importVitals.activity==Decimal(1.20)@secondary你能发布你程序的输出吗?嗨@nagyl。没问题;OP现在已经更新为包含文件的输出,并且我也根据您和Johnny Mopp的建议更改了最终if语句。Decimal(1.20)==1.20,返回True。Decimal(1.20)=Decimal(1.20),也返回True。@这是因为您正在使用与之比较的相同的float
值创建一个Decimal
实例1.2
不是有理数12/10
。因为您在所有方面都使用浮点数。这不是真实的1.20数字,只是表示不准确。好吧,我错过了字符串1.20!=浮动1.20。我不会用字符串来表示数字。特定的用例(计算TDEE)依赖于离散值;看见因此,activityText()
方法应该将activity
转换为相应的字符串。在tdee()
方法中执行计算。出于这一特定目的,舍入误差可能是允许的,因为它的计算结果大约比预期值多或少1卡路里。将activity
呈现为字符串以用于条件的目的可用于此目的。谢谢你,哇。非常感谢你这么做。有没有办法标记两种解决方案?第一个答案直接帮助我解决这个问题,但你的答案也帮助我更好地理解OOP。无论哪种情况,我都对你的和其他人投了更高的票。发布一个不同的问题,我将把这个答案复制到那里!这里接受另一个解决方案,因为它解决了您最初的问题。我会在这里发布一个链接,一旦我的计时器再次发布。谢谢你的帮助。还感谢您关于1卡路里阈值的说明。我也要加进去!什么时候可以?我相信大约5分钟左右。
>>> Decimal(1.20)
Decimal('1.1999999999999999555910790149937383830547332763671875')
>>> Decimal("1.20")
Decimal('1.20')
import sys
import psycopg2
from datetime import date
from decimal import Decimal
from config import config
class Vitals:
def __init__(self, row):
self.birth = date(1990, 12, 12)
self.today = date.today()
self.years = today.year - birth.year
self.age = today.year - birth.year - ((today.month, today.day) < (birth.month, birth.day))
self.weight = row[2]
self.height = row[3]
self.activity = Decimal(float(row[4]))
self.goal = row[5]
self.fatRatio = row[6]
self.carbohydrateRatio = row[7]
self.proteinRatio = row[8]
def activityText(self):
if self.activity == Decimal(1.20):
return self.activity * 2
def bmr(self):
return (Decimal(10) * self.weight) +
(Decimal(6.25) * self.height) -
(Decimal(5) * self.age) +
Decimal(5)
def tdee(self):
return Decimal(self.bmr() * self.activity)
def net(self):
if self.goal == 1:
return self.tdee() - (self.tdee() * Decimal(0.1))
else:
return self.tdee()
def getDataFromDatabase(sql):
conn = None
try:
params = config()
conn = psycopg2.connect(**params)
cur = conn.cursor()
cur.execute(sql)
except (Exception, psycopg2.DatabaseError) as error:
print(error)
return None
return cur.fetchone()
def main():
sql = 'SELECT * FROM testdb.vitals ORDER BY "vitalsID"'
row = getDataFromDatabase(sql)
vitals = Vitals(row)
#Here you can do your stuff with vitals
main()