Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 异常。 我不能保证这个版本会解决你最初的问题,我尝试了另一个解决方案,但因为这个问题有一个正确的答案,这不是我的主要目标_Python_Class - Fatal编程技术网

Python 异常。 我不能保证这个版本会解决你最初的问题,我尝试了另一个解决方案,但因为这个问题有一个正确的答案,这不是我的主要目标

Python 异常。 我不能保证这个版本会解决你最初的问题,我尝试了另一个解决方案,但因为这个问题有一个正确的答案,这不是我的主要目标,python,class,Python,Class,我看到你的帖子说一卡路里的差异是可以接受的,所以我建议创建一个函数,它的treshold为一卡路里,如果两个对象之间的差值小于treshold,则返回true。如果Vitals.activity==Decimal(1.20):如果importVitals.activity==Decimal(1.20):那不应该是吗?嗨,约翰尼。我直接使用了类引用,因为我想确保它正确地从元组传递到类变量。我刚刚尝试了另一种方法(使用类的实例),但不幸的是,它返回了相同的结果。由于importVitals=Vita

我看到你的帖子说一卡路里的差异是可以接受的,所以我建议创建一个函数,它的treshold为一卡路里,如果两个对象之间的差值小于treshold,则返回true。

如果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()