Python 仅在类中指定的变量

Python 仅在类中指定的变量,python,python-3.x,Python,Python 3.x,我试图在findDist()类中分配变量,但是一旦分配了变量,并且它移到closeDist()上,它就会说变量没有分配 这是错误:“名称错误:未定义全局名称'Dist1'” 这是代码,有解决方案吗 n=int(0) Pro1='alive' Pro2='alive' Pro3='alive' Pro4='alive' Pro5='alive' Pro6='alive' xYou = 1 yYou = 1 xPro1 = 3 yPro1 = 0 xPro2 = 2 yPro2 = 3 xPro3

我试图在findDist()类中分配变量,但是一旦分配了变量,并且它移到closeDist()上,它就会说变量没有分配

这是错误:
“名称错误:未定义全局名称'Dist1'”

这是代码,有解决方案吗

n=int(0)
Pro1='alive'
Pro2='alive'
Pro3='alive'
Pro4='alive'
Pro5='alive'
Pro6='alive'
xYou = 1
yYou = 1
xPro1 = 3
yPro1 = 0
xPro2 = 2
yPro2 = 3
xPro3 = 1
yPro3 = 6
xPro4 = 5
yPro4 = 6
xPro5 = 6
yPro5 = 2
xPro6 = 8
yPro6 = 5
proDists = []

def findDist():
    if Pro1 == 'alive':
        Dist1 = (abs(xYou-xPro1)+abs(yYou-yPro1))
        print(Dist1)
    if Pro2 == 'alive':
        Dist2 = (abs(xYou-xPro2)+abs(yYou-yPro2))
        print(Dist2)
    if Pro3 == 'alive':
        Dist3 = (abs(xYou-xPro3)+abs(yYou-yPro3))
        print(Dist3)
    if Pro4 == 'alive':
        Dist4 = (abs(xYou-xPro4)+abs(yYou-yPro4))
        print(Dist4)
    if Pro5 == 'alive':
        Dist5 = (abs(xYou-xPro5)+abs(yYou-yPro5))
        print(Dist5)
    if Pro6 == 'alive':
        Dist6 = (abs(xYou-xPro6)+abs(yYou-yPro6))
        print(Dist6)
    findClose()

def findClose():
    proDists.extend((Dist1,Dist2,Dist3,Dist4,Dist5,Dist6))
    print ("".join(proDists))

findDist()

您需要从调用函数将局部变量作为参数发送:

def findDist():

    if Pro1 == 'alive':
        Dist1 = (abs(xYou-xPro1)+abs(yYou-yPro1))
        print(Dist1)
    if Pro2 == 'alive':
        Dist2 = (abs(xYou-xPro2)+abs(yYou-yPro2))
        print(Dist2)
    if Pro3 == 'alive':
        Dist3 = (abs(xYou-xPro3)+abs(yYou-yPro3))
        print(Dist3)
    if Pro4 == 'alive':
        Dist4 = (abs(xYou-xPro4)+abs(yYou-yPro4))
        print(Dist4)
    if Pro5 == 'alive':
        Dist5 = (abs(xYou-xPro5)+abs(yYou-yPro5))
        print(Dist5)
    if Pro6 == 'alive':
        Dist6 = (abs(xYou-xPro6)+abs(yYou-yPro6))
        print(Dist6)
    findClose(Dist1, Dist2, Dist3, Dist4, Dist5, Dist6)

def findClose(Dist1, Dist2, Dist3, Dist4, Dist5, Dist6):

    proDists.extend((Dist1,Dist2,Dist3,Dist4,Dist5,Dist6))
    print ("".join(proDists))

您需要从调用函数将局部变量作为参数发送:

def findDist():

    if Pro1 == 'alive':
        Dist1 = (abs(xYou-xPro1)+abs(yYou-yPro1))
        print(Dist1)
    if Pro2 == 'alive':
        Dist2 = (abs(xYou-xPro2)+abs(yYou-yPro2))
        print(Dist2)
    if Pro3 == 'alive':
        Dist3 = (abs(xYou-xPro3)+abs(yYou-yPro3))
        print(Dist3)
    if Pro4 == 'alive':
        Dist4 = (abs(xYou-xPro4)+abs(yYou-yPro4))
        print(Dist4)
    if Pro5 == 'alive':
        Dist5 = (abs(xYou-xPro5)+abs(yYou-yPro5))
        print(Dist5)
    if Pro6 == 'alive':
        Dist6 = (abs(xYou-xPro6)+abs(yYou-yPro6))
        print(Dist6)
    findClose(Dist1, Dist2, Dist3, Dist4, Dist5, Dist6)

def findClose(Dist1, Dist2, Dist3, Dist4, Dist5, Dist6):

    proDists.extend((Dist1,Dist2,Dist3,Dist4,Dist5,Dist6))
    print ("".join(proDists))

您可以使用
global
语句轻松实现它

def findDist():
    global Dist1, Dist2, Dist3, Dist4, Dist5, Dist6
但是,鼓励避免使用太多全局变量。您可以将它们作为参数传递给
findClose()
,正如karthikr所建议的:

findClose(Dist1, Dist2, Dist3, Dist4, Dist5, Dist6)
以及:


希望这有帮助

您可以使用
global
语句轻松实现它

def findDist():
    global Dist1, Dist2, Dist3, Dist4, Dist5, Dist6
但是,鼓励避免使用太多全局变量。您可以将它们作为参数传递给
findClose()
,正如karthikr所建议的:

findClose(Dist1, Dist2, Dist3, Dist4, Dist5, Dist6)
以及:


希望这有帮助

全球变量。。。你真的需要吗?你这里没有课。你只有一些独立的函数。此外,你应该查看列表或元组,而不是制作许多名为*something*1、*something*2等的变量。专业提示:有一条规则叫做“DRY”,表示“不要重复你自己”。当您看到重复相同的代码时,只有细微的变化,这表明您需要在不同的抽象级别上工作。您了解列表(例如,
proDists
),因此您已经了解了一部分——如果您也了解
for
循环,您应该能够了解如何修改代码,使其更简短。全局变量。。。你真的需要吗?你这里没有课。你只有一些独立的函数。此外,你应该查看列表或元组,而不是制作许多名为*something*1、*something*2等的变量。专业提示:有一条规则叫做“DRY”,表示“不要重复你自己”。当您看到重复相同的代码时,只有细微的变化,这表明您需要在不同的抽象级别上工作。你知道列表(例如,
proDists
),所以你已经做到了一半——如果你也知道
for
循环,你应该能够看到如何修改你的代码,使其更加简短。谢谢!谢谢你把它整理好了!