我在代码中的赋值错误之前引用了这个,即使在实现 "global" 之后我也无法让它工作

I am having this referenced before assignment error in my code and I can't get it to work even after implementing the "global"

[已解决] 我似乎无法像他们在 [this post][1] 中所说的那样让它工作,它之前一直在工作,直到我添加了修改后的“BfToAA”部分“BfToARN”的副本,我不认为我有任何错误,因为这个全局修复已经足够了,我将我的所有代码留在旁边供您查看,并可能提供有关使其工作的建议。

#This is my "main"
def ElegirCamino():
    
    #here you can input your brainF*ck code that is going to be translated
    print("Inserte usted su código en notación especificada en el  README.txt")
    códigoBf = input()
    
    #here the code is sent to be translated to ARN by the convention that I've made.
    i=0
    print("El anterior código traducido a ARN según los datos datos en el README.txt es:")
    while i<len(códigoBf):
        BfToARN(códigoBf[i], i)
        i += 1
    códigoARN = códigoARN + "UAA"
    print(códigoARN)


    #here the code is sent to be translated to nucleic acids by the convention that I've made.
    i=0
    print("Lo que en ácidos nucléicos es:")
    while i<len(códigoBf):
        BfToAA(códigoBf[i], i)
        i += 1
    códigoAA = códigoAA + "STOP"
    print(códigoAA)

    

def BfToARN(Bf, i):
    if i==0:
        global códigoARN 
        códigoARN = "AUG"

    if(Bf == '+'):
        códigoARN = códigoARN + "UUU"
    elif(Bf == '-'):
        códigoARN = códigoARN + "UUA"
    elif(Bf == '.'):
        códigoARN = códigoARN + "UCU"
    elif(Bf == ','):
        códigoARN = códigoARN + "UAU"
    elif(Bf == '['):
        códigoARN = códigoARN + "UGU"
    elif(Bf == ']'):
        códigoARN = códigoARN + "UGG"
    elif(Bf == '<'):
        códigoARN = códigoARN + "CCU"
    elif(Bf == '>'):
        códigoARN = códigoARN + "CGU"
    else:
        print("    ERROR. Se esperaba uno de los caracteres del lenguaje Bf pero se ha encontrado un: \""+ Bf + "\"")

def BfToAA(Bf, i):
    if i==0:
        global códigoAA 
        códigoAA = "Met "

    if(Bf == '+'):
        códigoAA = códigoAA + "Phe "
    elif(Bf == '-'):
        códigoAA = códigoAA + "Leu "
    elif(Bf == '.'):
        códigoAA = códigoAA + "Ser "
    elif(Bf == ','):
        códigoAA = códigoAA + "Tyr "
    elif(Bf == '['):
        códigoAA = códigoAA + "Cys "
    elif(Bf == ']'):
        códigoAA = códigoAA + "Trp "
    elif(Bf == '<'):
        códigoAA = códigoAA + "Pro "
    elif(Bf == '>'):
        códigoAA = códigoAA + "Arg "
    else:
        print("    ERROR. Se esperaba uno de los caracteres del lenguaje Bf pero se ha encontrado un: \""+ Bf + "\"")

ElegirCamino()

感谢所有在这里回答并帮助我理解我的错误的人。 [1]: https://es.whosebug.com/questions/171863/local-variable-referenced-before-assignment

def BfToAA(Bf, i):
    global códigoAA

    if i==0:
        códigoAA = "Met "

您在条件语句中分配了全局变量,如果条件不成立则该语句可能不会执行。其他功能也一样

您的主要错误是在条件语句中分配了全局变量,而没有在您的“主”函数中包含全局关键字。我修改了您的代码以使其运行。注意全局关键字在两个函数中的位置。



#This is my "main"
def ElegirCamino():
    global códigoARN
    global códigoAA
    #here you can input your brainF*ck code that is going to be translated
    print("Inserte usted su código en notación especificada en el  README.txt")
    códigoBf = input()

    #here the code is sent to be translated to ARN by the convention that I've made.
    i=0
    print("El anterior código traducido a ARN según los datos datos en el README.txt es:")
    while i<len(códigoBf):
        BfToARN(códigoBf[i], i)
        i += 1
    códigoARN = códigoARN + "UAA"
    print(códigoARN)


    #here the code is sent to be translated to nucleic acids by the convention that I've made.
    i=0
    print("Lo que en ácidos nucléicos es:")
    while i<len(códigoBf):
        BfToAA(códigoBf[i], i)
        i += 1
    códigoAA = códigoAA + "STOP"
    print(códigoAA)

    

def BfToARN(Bf, i):
    global códigoARN 

    if i==0:
        códigoARN = "AUG"
    if(Bf == '+'):
        códigoARN = códigoARN + "UUU"
    elif(Bf == '-'):
        códigoARN = códigoARN + "UUA"
    elif(Bf == '.'):
        códigoARN = códigoARN + "UCU"
    elif(Bf == ','):
        códigoARN = códigoARN + "UAU"
    elif(Bf == '['):
        códigoARN = códigoARN + "UGU"
    elif(Bf == ']'):
        códigoARN = códigoARN + "UGG"
    elif(Bf == '<'):
        códigoARN = códigoARN + "CCU"
    elif(Bf == '>'):
        códigoARN = códigoARN + "CGU"
    else:
        print("    ERROR. Se esperaba uno de los caracteres del lenguaje Bf pero se ha encontrado un: \""+ Bf + "\"")

def BfToAA(Bf, i):
    global códigoAA 
    if i==0:
        códigoAA = "Met "
    if(Bf == '+'):
        códigoAA = códigoAA + "Phe "
    elif(Bf == '-'):
        códigoAA = códigoAA + "Leu "
    elif(Bf == '.'):
        códigoAA = códigoAA + "Ser "
    elif(Bf == ','):
        códigoAA = códigoAA + "Tyr "
    elif(Bf == '['):
        códigoAA = códigoAA + "Cys "
    elif(Bf == ']'):
        códigoAA = códigoAA + "Trp "
    elif(Bf == '<'):
        códigoAA = códigoAA + "Pro "
    elif(Bf == '>'):
        códigoAA = códigoAA + "Arg "
    else:
        print("    ERROR. Se esperaba uno de los caracteres del lenguaje Bf pero se ha encontrado un: \""+ Bf + "\"")

ElegirCamino()

ElegirCamino()códigoARNcódigoAA

一无所知

应该是这样的:

全局变量和局部变量之间的区别在于全局变量可以在所有地方访问而局部变量不能,但是这里有一个技巧,你可以在 python 中使用 global 来告诉函数您要引用此全局变量并将其用作自己的局部变量。

我建议阅读更多有关该主题的内容,因为还有其他方法