Global variable is not defined

Asked

Viewed 828 times

2

I have been investigating for hours why this mistake. I have used the global and it didn’t work and other programs I created worked. Code that gives error:

def editor():
texto = raw_input("digite o texto que quer que o menu principal imprima:")
if texto == str():
    print "%s" %(texto)
else:
    print "%s" %(texto)

def arranque():
    print "%s" %(texto)
    maquina = raw_input("")
    if machine == "B".upper():
        print "A iniciar a BIOS..."
    for i in range(1000):
        print "..."
arranque()

Complete code:

#============<<<código de carregamento de dados>>>============#
def ler():                                                    #
    with open('maquina virtual 1ªversão.txt', 'r') as f:      #
        linhas = f.readlines()                                #
        return linhas                                         #
    f.close()                                                 #
                                                              #
if __name__ == "__main__":                                    #
    dados = ler()                                             #
#============<<<código de carregamento de dados>>>============#
def editor():
    texto = raw_input("digite o texto que quer que o menu principal imprima:")
    if texto == str():
        print "%s" %(texto)
    else:
        print "%s" %(texto)

#============<<<código de salvação de dados>>>============#
def guardarAlteracao(dado):                               #
    with open('maquina virtual 1ªversão.txt', 'r+') as f: #
        f.write(dado)                                     #
    f.close()                                             #
#============<<<código de salvação de dados>>>============#


#função que inicia a máquina virtual (função que coopera com a função bios()-> se esta    tiver sido indevidamente alterada pelo usuário, esta impede o arranque do SO):
def arranque():
    print "%s" %(texto)
    maquina = raw_input("")
    if machine == "B".upper():
        print "A iniciar a BIOS..."
    for i in range(1000):
        print "..."
arranque()

#função principal(1ª)--> bios:
def bios():
    print "------------------ \n"
    print "BIOS setup utility \n"
    print "------------------"
    opcao =raw_input("Está no menu da BIOS. Escolha o que pretende aceder: Informações do sistema, Data, Avançadas(secção ainda a concluir), Configurações do SO (escreva quit para voltar ao menu e back se quiser voltar ao menu principal da BIOS) \n")
    if opcao == "Informações do sistema":
        print "--------------"
        print "Maquina virtual"
        print "--------------"
        print "Versão: 1.0v 32bit \n Data da criação: 07/06/14 \n Compatível com Windows XP, Windows Vista, Windows 7, Windows 8, Unix, Linux, Ubuntu e Mac OS"
        print "Todos os direitos reservados © 2014"
        rebobinar = raw_input("")
        if rebobinar == "back":
            bios()
    elif opcao == "Data":
        print "--------------"
        print "Data"
        print "--------------"
        print "Sistema Operativo(simulado): BITsky one® \nInterface: Literal (e GUI nas próximas atualizações) \nLinguagem de programação predefinida: Python"
        import win32api
        path = "C:/"
        info = win32api.GetVolumeInformation(path)
        print( "Número da série do disco rígido: = %d" % info[1] )
        rebobinar = raw_input("")
        if rebobinar == "back":
            bios()
    elif opcao == "Avançadas":
        print "--------------"
        print "Avançadas"
        print "--------------"
        configurar = raw_input("Para configurar as defenições da máquina virtual, escreva a password bitwise para aceder: \n")
        if configurar == "0b10b100b110b100":
            print "As opções disponíveis são: \nAlterar a forma de inicialização, \nDesinstalar SO, \nCriar permissões especiais para a VM, \nVer código fonte da VM"
            avanced = raw_input("")
            if avanced == "Alterar a forma de inicialização":
                alterar = raw_input("O que deseja alterar: \nApresentação inicial da VM, \nApresentar código de arranque, \nEditar código(aviso: qualquer alteração incorreta destes pode instabilizar a VM)?")
                if alterar == "Apresentação inicial da VM":
                    editor()
                    save = raw_input("Guardar alterações?")
                    if save == "sim" or save == "si" or save == "s".lower():
                        guardarAlteracao('Alguma coisa aqui')
                    rebobinar = raw_input("")
                    if rebobinar == "back":
                        bios()
                elif alterar == "Apresentar código de arranque":
                    #código ainda não concluído
                    if rebobinar == "back":
                        bios()
                elif alterar == "Editar código":
                    #código ainda não concluído
                    quit()
            elif avanced == "Desinstalar SO":
                deletar_so = raw_input("Tem mesmo a certeza (atenção: depois não pode restaurar e pode perder dados)?)")
                if deletar_so == "sim" or deletar_so == "yes":
                    for i in range(1234):
                        print "A desinstalar o SO..."
                    #função bitsky_one--> deletar
                    print "SO desinstalado."
            elif avanced == "Criar permissões especiais para a VM":
                password()
bios()

Error:

Traceback (most recent call last):
  File "C:\Documents and Settings\Cristina\Ambiente de trabalho\maquina virtual 1ªversão.py", line 36, in <module>
    arranque()
  File "C:\Documents and Settings\Cristina\Ambiente de trabalho\maquina virtual 1ªversão.py", line 28, in arranque
    print "%s" %(texto)
NameError: global name 'texto' is not defined

1 answer

2


Declare the variable texto out of function.

texto = ""

def editor():
   global texto
   texto = raw_input("digite o texto que quer que o menu principal imprima:")

def arranque():
    print "%s" %(texto)
    maquina = raw_input("")
    if machine == "B".upper():
        print "A iniciar a BIOS..."
    for i in range(1000):
        print "..."

arranque()
  • It worked, but it prints the text variable. How do I not print the text variable?

  • I did, but I discovered another problem (about how to edit the text that is at the beginning).

Browser other questions tagged

You are not signed in. Login or sign up in order to post.