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.

Igualando caracteres de una cadena con claves de un diccionario y convirtiendo cadenas en valores de las claves si coinciden.

Tengo un diccionario llamado my_dict={‘A’:1, ‘B’:1,’C’:1,’D’:2,’E’:2,’F’:2,’G’:3,’H’:3,’I’:3}

Quiero escribir una función que tome una cadena y, si su longitud es 5, compruebe los caracteres de la cadena con las claves del diccionario y, si coinciden, imprima los valores de esas claves, de lo contrario, debería devolver falso. Por ejemplo, si ingreso una cadena de “ABIFA”, debería producir 11321. A continuación se muestra mi código, pero no produce lo que espero:

my_dict={‘A’:1, ‘B’:1,’C’:1,’D’:2,’E’:2,’F’:2,’G’:3,’H’:3,’I’:3}

def string_to_number(mystring):

if len(mystring)==5:

    result = [val for key, val in my_dict.items() if mystring in key]

    print(str(result))

else:
    return False

string_to_number(“ABIFA”) # debería producir 11321

string_to_number(“ABIFAA”) # debería devolver false

¿Podrías decirme dónde está mi error, por favor?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El error en tu código es que estás usando el operador in para verificar si los caracteres de la cadena están en las claves del diccionario. El operador in verifica si una subcadena está presente en una cadena, no si un carácter está presente en una cadena. Para verificar si un carácter está presente en una cadena, debes usar el método find().

    Entonces, el código corregido debería verse así:

    my_dict={'A':1, 'B':1, 'C':1, 'D':2, 'E':2, 'F':2, 'G':3, 'H':3, 'I':3}
    
    def string_to_number(mystring):
    
        if len(mystring)==5:
    
            result = [my_dict[mystring[i]] for i in range(len(mystring)) if mystring[i] in my_dict]
    
            if len(result) == 5:
                print(''.join(map(str,result)))
            else:
                return False
    
        else:
            return False
    
    string_to_number("ABIFA") # debería producir 11321
    
    string_to_number("ABIFAA") # debería devolver False
    

Comments are closed.