[英]Calling variable from one function into another function
基本上,我想将变量从“ energy”函数调用为“ TNT”函数。 我该怎么做?
class richter_Stuff():
def energy(self):
richter = float(input("Enter a Richter scale value from 1 to 10: "))
if richter >= 1.0 and richter <= 10.0 :
en = 10**(1.5 * richter + 4.8)
print "For a Richter scale value of %.2f, the energy equivalent in Joules is: %.2f" %(richter, en)
return
else:
print "You have entered an incorrect number. Please try again"
energy()
def TNT(self, energy):
one_tonne_tnt_to_joules = 4.184*(10**9)
TNT = en/one_tonne_tnt_to_joules
print TNT
TNT()
要从最真实的意义上回答您的问题: energy()
应该是self.energy(en)
。 但是,如果您了解课程,就会知道。 您的代码在其他领域也有问题。
您确实需要考虑要实现的目标:
阅读更丰富的量表。 如果错误,请重读。
从刻度计算焦耳。
从焦耳计算TNT量。
打印信息。
重复。
您的代码应反映出这一点。 如果您查看stricter_richter.read_loop
,那么事情就是这样。
代码中单词的选择暗示了对函数和数据点之间差异的困惑。 这就是为什么将energy
重命名为calc_energy
并将TNT
重命名为calc_TNT
原因,因为它们产生的输出与其输入有关; 它们本身不是输出。 相关变量(例如richter
, energy
和TNT
)应该存在于同一范围内,因此它们在同一循环中计算。
以下内容基于Lafexlos的答案 。
class stricter_richter(object):
tnt_joule_ratio = 4.184 * (10 ** 9)
def __init__(self):
self.continue_reading = True
def read_loop(self):
while self.continue_reading:
richter_str = input("Enter a Richter scale value from 1 to 10: ")
richter = float(richter_str)
if richter < 1.0 or richter > 10.0 :
print "You have entered an incorrect number. Please try again"
continue
energy = self.calc_energy(richter)
TNT = self.calc_TNT(energy)
print "For a Richter scale value of %.2f, the energy equivalent in Joules is: %.2f" % (richter, energy)
print "THATS %.2f tonnes of TNT!!!" % TNT
def calc_energy(self, richter):
energy = 10**(1.5 * richter + 4.8)
return energy
def calc_TNT(self, energy):
TNT = energy/self.tnt_joule_ratio
return TNT
richt = stricter_richter()
richt.read_loop()
您可以在能量函数中return en
并将其分配给TNT中的其他变量或使用global
或者由于您使用的是类,因此也可以使用self.en
作为变量名,而不仅仅是en
指出en
在该类中。范围。
在这种情况下,最好的办法是使用class
。
class richter_Stuff():
def energy(self):
richter = float(input("Enter a Richter scale value from 1 to 10: "))
if richter >= 1.0 and richter <= 10.0 :
self.en = 10**(1.5 * richter + 4.8)
print "For a Richter scale value of %.2f, the energy equivalent in Joules is: %.2f" %(richter, self.en)
else:
print "You have entered an incorrect number. Please try again"
self.energy()
def TNT(self):
en = self.en
one_tonne_tnt_to_joules = 4.184*(10**9)
TNT = en/one_tonne_tnt_to_joules
print TNT
richt = richter_Stuff()
richt.energy()
richt.TNT()
您可以使用richt.en
在类之外调用该变量。
另外,使用递归可能不是您的最佳选择。 如果用户输入很多错误的条目,您的程序将给出有关最大递归深度的错误。 您应该根据此答案更改询问输入样式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.