[英]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.