Quindi sono verde come l'erba e la programmazione di apprendimento da How to think like a computer scientist: Learn python 3. Sono in grado di rispondere alla domanda (vedi sotto) ma temo di perdere la lezione.Scrittura di una funzione generalizzata per stringhe e liste in python
Scrivere una funzione (chiamata insert_at_end) che passerà (restituire il grassetto visti i due argomenti prima) per tutti e tre:
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)**)
Il libro dà questo suggerimento: "Queste esercitazioni illustrano bene che l'astrazione successione è generale, (perché slicing, indexing e concatenazione sono così generali), quindi è possibile scrivere funzioni generali che funzionano su tutti i tipi di sequenza. ".
Questa versione non ha soluzioni on-line (che ho potuto trovare), ma in ho trovato le risposte di qualcuno a una versione precedente del testo (per Python 2.7) e hanno fatto in questo modo:
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)
Quale sembra risolvere la domanda distinguendo tra elenchi e stringhe ... andando contro il suggerimento. Quindi, c'è un modo per rispondere alla domanda (e circa 10 più simili) senza distinguere? cioè non usando "type()"
Non penso che imparerai qualcosa di utile dal tentativo di risolvere questo problema. –