我对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'])