es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se puede concatenar cadenas.

Estoy tratando de hacer un programa de codificación para un cifrado que hice y no pude concatenar cadenas, aquí está mi código:

charToBin = {
  "a":1,
  "b":10,
  "c":11,
  "d":100,
  "e":101,
  "f":110,
  "g":111,
  "h":1000
}
binToWrd = {
  1:"Intel",
  10:"Info",
  11:"Indipendent",
  101:"Imposibble",
  100:"Info-stolen",
  110:"Indian-Ogres",
  111:"Initially",
  1000:"Infant-Orphan-Ogre-Ogle"
}

endTxt = " "
cipher = " "

def txtToBin():

  txt = input(":")
  txtArray = txt.split(" ")
  for x in range(len(txt)):
    endTxt += str(charToBin[txtArray[x]])+" "
  print(endTxt)

def binToCip():
  codeTxtArr = endTxt.split(" ")
  for x1 in codeTxtArr:
    for x2 in binToWrd:
      cipher =+ x1.replace(str(x2), binToWrd[x2])
  print(cipher)

txtToBin()
binToCip()

Devuelve este error:
Traceback (most recent call last):
File “main.py”, line 40, in
txtToBin()
File “main.py”, line 30, in txtToBin
endTxt = endTxt + str(charToBin[txtArray[x]])+” ”
UnboundLocalError: local variable ‘endTxt’ referenced before assignment

¿Alguien puede explicar por qué está sucediendo esto y cómo solucionarlo?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error “UnboundLocalError: variable local ‘endTxt’ referenciada antes de la asignación” ocurre porque estás intentando usar la variable “endTxt” dentro de una función sin inicializarla como una variable global.

    Para solucionar esto, agrega la línea “global endTxt” al comienzo de ambas funciones “txtToBin” y “binToCip”. Esto le indicará a Python que use la variable global “endTxt” en lugar de crear una variable local con el mismo nombre.

    Aquí está el código corregido:

    charToBin = {
      "a":1,
      "b":10,
      "c":11,
      "d":100,
      "e":101,
      "f":110,
      "g":111,
      "h":1000
    }
    binToWrd = {
      1:"Intel",
      10:"Info",
      11:"Indipendent",
      101:"Imposibble",
      100:"Info-stolen",
      110:"Indian-Ogres",
      111:"Initially",
      1000:"Infant-Orphan-Ogre-Ogle"
    }
    
    endTxt = " "
    cipher = " "
    
    def txtToBin():
      global endTxt
      txt = input(":")
      txtArray = txt.split(" ")
      for x in range(len(txtArray)):
        endTxt += str(charToBin[txtArray[x]])+" "
      print(endTxt)
    
    def binToCip():
      global endTxt
      global cipher
      codeTxtArr = endTxt.split(" ")
      for x1 in codeTxtArr:
        for x2 in binToWrd:
          cipher += x1.replace(str(x2), binToWrd[x2])
      print(cipher)
    
    txtToBin()
    binToCip()
    

    Ten en cuenta que también cambié la línea “endTxt = ” “” a “endTxt = ” ” ” y “cipher = ” “” a “cipher = ” ” “, ya que usar “” “” crea una cadena con espacios y comillas, lo cual puede causar problemas más adelante.

Comments are closed.