簡體   English   中英

從一個函數調用變量到另一個函數

[英]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) 但是,如果您了解課程,就會知道。 您的代碼在其他領域也有問題。

您確實需要考慮要實現的目標:

  1. 閱讀更豐富的量表。 如果錯誤,請重讀。

  2. 從刻度計算焦耳。

  3. 從焦耳計算TNT量。

  4. 打印信息。

  5. 重復。

您的代碼應反映出這一點。 如果您查看stricter_richter.read_loop ,那么事情就是這樣。

代碼中單詞的選擇暗示了對函數和數據點之間差異的困惑。 這就是為什么將energy重命名為calc_energy並將TNT重命名為calc_TNT原因,因為它們產生的輸出與其輸入有關; 它們本身不是輸出。 相關變量(例如richterenergyTNT )應該存在於同一范圍內,因此它們在同一循環中計算。

以下內容基於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM