将变量从一个函数调用到另一个函数

时间:2014-05-24 10:18:26

标签: python

基本上我想把'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()

2 个答案:

答案 0 :(得分:2)

以最直接的方式回答您的问题:energy()应为self.energy(en)。但如果你理解课程,你就会知道。您的代码在其他方面也存在问题。

你真的需要考虑你想要实现的目标:

  1. 读取更丰富的比例。如果错误则重读。

  2. 从比例计算焦耳。

  3. 从焦耳计算TNT数量。

  4. 打印信息。

  5. 重复。

  6. 您的代码应该反映这一点。如果你看一下stricter_richter.read_loop,就会发生这种情况。

    代码中单词的选择表明混淆了函数和数据点之间的区别。这就是energy已重命名为calc_energyTNTcalc_TNT的原因,因为它们会产生与其输入相关的输出;它们本身并不是产出。相关变量(如richterenergyTNT)应存在于同一范围内,因此它们在同一循环中计算。

    以下内容基于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更改请求输入样式。