Como parte del código de práctica de Python de Hackerrank, estaba probando el problema de mutación donde la tarea se cita a continuación.

Lea una cadena dada, cambie el carácter en un índice dado y luego imprima la cadena modificada.

Este es el código que se me ocurrió:

string = 'audiophile'
character = 'u'
position = 5

def mutate_string(string, position, character):
    string = string[:int(position)] + {} + string[int(position)+1:].format(character)
    return string

mutate_string(string, position, character)

Levanta un TypeError: must be str, not dict y aquí está todo el mensaje Traceback:

Traceback (most recent call last):
  File "mutations.py", line 13, in <module>
    mutate_string(string, position, character)
  File "mutations.py", line 6, in mutate_string
    string = string[:int(position)] + {} + string[int(position)+1:].format(str(character))
TypeError: must be str, not dict

Estoy tratando de decodificar y entender el mensaje Traceback para poder seguir con el código. También sería maravilloso si pudiera obtener algunas sugerencias sobre el enfoque que he tomado al escribir el código.

0
Jarmos 16 oct. 2018 a las 15:43

2 respuestas

La mejor respuesta

Estás en el camino correcto, pero tu sintaxis es incorrecta

Aquí como debería ser:

string = 'audiophile'
character = 'u'
position = 5

def mutate_string(string, position, character):
    string = string[:int(position)] + '{}'.format(character) + string[int(position)+1:]
    return string

mutate_string(string, position, character)

format() es una función de clase String(), es por eso que su código no funciona

Espero que haya ayudado

1
Guilherme Uzeda 16 oct. 2018 a las 12:52

Creo que es mucho más legible y comprensible usar el método de formato así:

string = 'audiophile'
character = 'u'
position = 5


def mutate_string(string, position, character):
    string = '{0}{1}{2}'.format(string[:position], character, string[position+1:])
    return string


mutate_string(string, position, character)

El rastreo en sí mismo fue causado por {} en su concatenación. No estaba entre corchetes, por lo que se interpretó como un dict vacío. Tan pronto como trató de agregar eso a sus subcadenas, el intérprete de Python abandonó.

0
kb-0 16 oct. 2018 a las 12:59