基本上我想把'energy'函数中的变量'en'称为'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()
答案 0 :(得分:2)
以最直接的方式回答您的问题:energy()
应为self.energy(en)
。但如果你理解课程,你就会知道。您的代码在其他方面也存在问题。
你真的需要考虑你想要实现的目标:
读取更丰富的比例。如果错误则重读。
从比例计算焦耳。
从焦耳计算TNT数量。
打印信息。
重复。
您的代码应该反映这一点。如果你看一下stricter_richter.read_loop
,就会发生这种情况。
代码中单词的选择表明混淆了函数和数据点之间的区别。这就是energy
已重命名为calc_energy
和TNT
至calc_TNT
的原因,因为它们会产生与其输入相关的输出;它们本身并不是产出。相关变量(如richter
,energy
和TNT
)应存在于同一范围内,因此它们在同一循环中计算。
以下内容基于Lafexlos' answer。
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()
答案 1 :(得分:1)
您可以return en
使用能量函数并将其分配给TNT中的其他变量或使用global
s 或,因为您使用的是类您也可以使用self.en
作为变量名,而不仅仅是en
,以指出en
在该类中是&#39;范围。
在这种情况下,可能最好的一个是使用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
在课堂外调用该变量。
此外,使用递归可能不是你最好的镜头。如果用户输入 lot 错误的条目,您的程序将给出有关最大递归深度的错误。您应该根据this answer更改请求输入样式。