1

现在这是我的问题,这是我的代码位于下面。这个程序找到了一些用户选择的根源。我的问题是,当我运行此代码时,我得到NameError: global name 'x' is not defined. 它来自第一次遇到main值时的函数。x我假设所有其他值都会发生同样的情况,所以基本上我想知道的是我是否必须在ValueGrabber函数之外定义这些值?还是我可以保持原样并稍微改变一下?

def ValueGraber():
    x = input("What number do you want to find the root of?:  ")
    root = input("Which root do you want to find?:  ")
    epsilon = input("What accuracy do you want the value to be to? e.g 0.01 :  ")
    high = float(x) + 1
    low = 0.0
    ans = (high + low)/2.0
    Perfect = None
    return x, root, epsilon, ans, high, low, Perfect

def RootFinder(x, root, epsilon, ans, high, low):
    while (ans**float(root)-float(x)) > epsilon and ans != float(x):
        if ans**float(root) > float(x):
        ans = high
        else:
        ans = high
            ans = (high + low)/2.0
    return ans

def PerfectChecker(ans, x, root, Perfect):
    if round(ans, 1)**float(root) == x:
        Perfect = True
    else:
        Perfect = False
    return Perfect

def Output(ans, x, root, perfect, epsilon):
    if Perfect == True:
        print("The number {0} has a perfect {1} root of    {2}".format(float(x),float(root),float(ans)))
    else:
        print("The root of the number {0} has a {1} root of {2} to an accuracy of {3}".format(float(x),float(root),float(ans),float(epsilon)))

def main():
    InputData = ValueGraber()
    DataOpp = RootFinder(x, root, epsilon, ans, high, low)
    PCheck = PerfectChecker(ans, x, root, Perfect)
    DataOutput = Output(ans, x, root, Perfect, epsilon)

main()
4

1 回答 1

3

main您提到x但从未定义过它。

您的ValueGraber()函数确实返回一个值x,但该名称不会自动提供给调用者。

main()函数中的名称是本地的;在任何情况下,它们都不会自动反映函数返回的名称。这是一个固定main函数,它恰好使用与返回值的函数相同的名称:

def main():    
    x, root, epsilon, ans, high, low, PerfecutData = ValueGraber()
    ans = RootFinder(x, root, epsilon, ans, high, low)
    Perfect = PerfectChecker(ans, x, root, Perfect)
    Output(ans, x, root, Perfect, epsilon)

我删除了DateOutput;它将永远是None因为Output()不返回任何东西。

您仍然可以在 ; 中使用不同名称。是一个完全有效的本地名称(尽管我个人总是会使用本地名称的样式),但是您不应该期望存在,而是在任何地方使用。mainDataOpplower_case_with_underscoresansDataOppmain

于 2013-09-10T14:42:07.597 回答