我的程序不允许我从python中的前一个函数调用变量

时间:2015-02-17 22:21:07

标签: python variables syntax-error

  1. 我的问题可在以下评论中找到

    def Distanceinput():
        distance = eval(input('Enter a distance (in light years):'))
        print("Velocity Relative time to reach", distance, "light years")
    

    问题出现在下面的代码块中,我尝试使用距离上面的距离,但它会以错误的形式返回。我该怎么做才能解决这个问题?

    def velocity(velocityPercent):
        DilationFactor = (((1 - (velocityPercent ** 2)) / 10000) ** 0.5)
        perceptualSpeed = (distance * DilationFactor) * 100
        print(velocityPercent, + "% of light", perceptualSpeed, "years.")
    

    上面的代码块是造成问题的原因

    def Time():
        Distanceinput()
        print()
        velocity(10)
        print()
        velocity(25)
        print()
        velocity(50)
        print()
        velocity(75)
        print()
        velocity(90)
        print()
        velocity(99)
        print()
    Time()
    

4 个答案:

答案 0 :(得分:3)

distance = None
def Distanceinput():
    global distance
    distance = eval(input('Enter a distance (in light years):'))
    print("Velocity Relative time to reach", distance, "light years")

答案 1 :(得分:1)

localglobal变量之间的区别在于局部变量只能在函数内部访问,而全局变量可以在整个程序中的任何位置访问。注意名称,本地(在某个区域内可用)和全局,在任何地方都可用。

def Distanceinput():
    distance = eval(input('Enter a distance (in light years):'))
    print("Velocity Relative time to reach", distance, "light years")

def velocity(velocityPercent):
    DilationFactor = (((1 - (velocityPercent ** 2)) / 10000) ** 0.5)
    perceptualSpeed = (distance * DilationFactor) * 100
    print(velocityPercent, + "% of light", perceptualSpeed, "years.")

您的Distanceinput()没问题。您应该返回该值,以便稍后可以在程序中使用它。返回本地和全局变量,distance中的velocity(velocityPercent)被视为局部变量。您无法在函数中的任何位置说过,您需要访问在程序中其他位置具有值的变量distance。你可以这样做:

# Somewhere at the top of your code...
distance = None

然后,在你的函数中:

def Distanceinput():
    global distance # Says that your function requires the following global variable
    # rest of your code
    return distance # In case you need the output of the function later on.

def velocity(velocityPercent):
    global distance # Again, the same action as above

    DilationFactor = (((1 - (velocityPercent ** 2)) / 10000) ** 0.5)
    perceptualSpeed = (distance * DilationFactor) * 100
    print(velocityPercent, " % of light ", perceptualSpeed, " years.")

希望它有所帮助! :)

答案 2 :(得分:1)

我的代码组织方式略有不同。 此外,如果我理解正确你的速度函数有一些错误,所以我也改变了它。


说明:

  • evalexec可以执行恶意代码,因此除非您是唯一使用您的程序的人,否则请尽量避免使用。对于给定的问题,int可以正常工作。
  • 我创建了一个类,您可以从中创建不同的实例。每次创建实例时,都可以输入distance
  • \n是换行符。
  • velocityPercent /= 100.相当于 set velocityPercent to 其先前值除以100 。请注意它的100.带点, 如果你使用python 2.7。然后我删除了/100000 DilationFactor中的100perceptualSpeed中的velocity

您可以更改的一件事是class Galaxy(object): DISTANCE = 'i like dogs' def Distanceinput(self): self.DISTANCE = int(input('\nEnter a distance (in light years):')) print("Velocity Relative time to reach", self.DISTANCE, "light years") def velocity(self, velocityPercent): velocityPercent /= 100. DilationFactor = ((1 - (velocityPercent ** 2)) ** 0.5) perceptualSpeed = self.DISTANCE * DilationFactor print(velocityPercent, "% of light", perceptualSpeed, "years.") def Time(self): self.Distanceinput() print() for vel in (10, 25, 50, 75, 90, 99): self.velocity(vel) galaxy_1 = Galaxy() galaxy_1.Time() 的输出。

{{1}}

答案 3 :(得分:0)

有两种方法:

  • 使用全局变量
  • 您在参数
  • 中传递变量

请看这里:http://paste2.org/_wpZH5I8m