Así que estoy verde como la hierba y aprendiendo programación de How to think like a computer scientist: Learn python 3. Puedo responder la pregunta (ver más abajo) pero temo que me estoy perdiendo la lección.Escribir una función generalizada para ambas cadenas y listas en python
Escribir una función (llamada insert_at_end) que pasará (devolver la negrita dados los dos argumentos antes) para los tres:
test(insert_at_end(5, [1, 3, 4, 6]), **[1, 3, 4, 6, 5]**)
test(insert_at_end('x', 'abc'), **'abcx'**)
test(insert_at_end(5, (1, 3, 4, 6)), **(1, 3, 4, 6, 5)**)
El libro da este consejo: "Estos ejercicios ilustran muy bien que la abstracción secuencia es general, (porque el corte, la indexación y la concatenación son muy generales), por lo que es posible escribir funciones generales que funcionen en todos los tipos de secuencia ".
Esta versión no tiene soluciones en línea (que he podido encontrar) pero en la que encontré las respuestas de alguien a una versión anterior del texto (para Python 2.7) y lo hicieron de esta manera:
def encapsulate(val, seq):
if type(seq) == type(""):
return str(val)
if type(seq) == type([]):
return [val]
return (val,)
def insert_at_end(val, seq):
return seq + encapsulate(val, seq)
Lo que parece resolver la cuestión al distinguir entre listas y cadenas ... yendo en contra de la sugerencia. Entonces, ¿qué tal hay una manera de responder la pregunta (y alrededor de 10 más similares) sin distinguir? es decir, no se usa "tipo()"
No creo que aprenda algo útil al intentar resolver este problema. –