如何在函数中使用字典键来获取类中的校准方法或函数的值?

时间:2019-04-02 21:48:44

标签: python python-3.x

我对pythonx3.6非常陌生。我有一类使用三种方法的类,它们假定以与计算器相同的方式计算拖拉机的校准值。

方程式中有八个值。最初,我编写了用于在一个函数中计算所有八个值的代码,但是因为开始时需要的某些变量仅在函数的末尾计算,因此我无法找到有效的方程式的顺序。 。我决定为要计算的每个变量创建一个函数,并在所有其他需要它们的函数中返回该函数的值。

注意:在这个问题中,我仅将代码修改为包含方程式的两个相关函数

第一种方法声明具有特定键和值的字典数据类型,并具有两个属性“ fact”和“ tim”作为键和值,这些值将根据可用等式中的数据进行计算。

第二个函数计算“事实”值,如果它的“ tim”值大于0并且不等于null,则计算表示方程式的事实,然后计算出60秒的分数。 / p>

第三个功能与第二个功能相同,不同之处在于它计算时间或“ tim”,即拖拉机驾驶100m并喷洒田地所需的时间

我将使用奇异的textinput插入变量(但目前还不是)-但是我首先必须使类函数起作用。我从Idle开始尝试,首先创建了answ = Calibrated类的对象;然后我尝试了answ.calibrationVar(90,“”)。我遇到错误:

Traceback (most recent call last):
   File "<pyshell#8>", line 1, in <module>
     faktor.calibrationVar(90,"")
   File "<pyshell#3>", line 3, in calibrationVar
     k = {'tim':self.tim, 'fact':self.fact}
 AttributeError: 'Calibrated' object has no attribute 'tim'

请参见下面的错误代码

class Calibrated:
    def calibrationVar(self, fact, tim):
        k = {'tim':self.tim, 'fact':self.fact}

    def factorVar(self):
        if k['fact'] == "" and k['tim'] != "" and float(k['tim']):
            try:
                k['fact'] = float(k['tim']) / 60
                                return k['fact']
            except TypeError:

    def timeVar(self):
        if k['fact'] != '' and k['tim'] == "" and float(k['fact']):
            try:
                k['tim'] = 60 * float(k['fact'])
                return k['tim']
            except TypeError:

结果应为字典k,其中包含函数方程的结果,例如如果时间= 90,则等于字典k {'tim':90,'fact':1.5}。然后,我可以将结果打印到一个临时数据库中,该数据库最终将输出包含会话结果的pdf。

有人可以告诉我我做错了什么吗?

...

我设法解决了我的问题:我使用了for循环并遍历每个方程,直到字典中的所有值都被求解。

@Patrick Artner:您是正确的,这是一个范围问题,也是我如何使用自我的东西。感谢您的帮助。

我的正确代码:

class Calibrated:
    def calibrationVar(self, tim, fact):
        self.tim=tim
        self.fact=fact
        k = {'tim':tim, 'fact':fact}
        for x in range(2):
            if k['fact'] == "" and k['tim'] != "" and float(k['tim']):
                k['fact'] = float(k['tim']) / 60

            if k['fact'] != '' and k['tim'] == "" and float(k['fact']):
                k['tim'] = 60 * float(k['fact'])
        print(k['tim'],k['fact'])

0 个答案:

没有答案