ここに私の問題があります。これは以下にある私のコードです。このプログラムは、ユーザーが選択した多数のルートを見つけます。私の問題は、このコードを実行すると、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()