Piccolo esercizio facoltativo su stringhe

iacopomasi (2710 points)
13 19 38
asked Oct 7, 2021 in Eserciziario d'esame by iacopomasi (2,710 points)

Vi allego un file zip con dentro un file python che dovete completare per fare l'esercizio. 

L'esercizio è facoltativo ma è bene iniziare a farlo perchè simula una versione facile del primo esercizio di esame.

Le istruzioni sono al interno del file python ex_string_vuoto.py. 

Brevemente: se assert vi da un errore allora dovete migliorare il programma, controllando cosa non va

Nel momento in cui vi stampa che passate i 3 test avete finito.

Link all'esercizio sulle stringhe tramite Google Drive. Scaricatelo e unzippatelo.

Buon lavoro

6 Answers

Wahya (7760 points)
1 2 15
answered Oct 8, 2021 by Wahya (7,760 points)
Ho completato il programma tramite un ciclo for e qualche istruzione condizionale all'interno, ma ho notato che è possibile portare avanti un compito simile anche tramite il metodo string.translate() e mi domandavo: in questo caso è possibile farsi restituire in qualche modo il numero dei caratteri sostituiti nella stringa?
iacopomasi (2710 points)
13 19 38
commented Oct 9, 2021 by iacopomasi (2,710 points)
Bene la soluzione. Ottima osservazione: è possibile usare str.translate() che prende in ingresso o una lista oppure un dizionario che ancora dobbiamo spiegare.

Per usare la lista c'è da spiegare come sono codificati i caratteri e stare attenti ad usare la lista con translate ad alcuni side-effects.

No, con translate() non puoi contare il numero di caratteri sostituiti. Vedremo più avanti nel corso come è possibile risolvere l'esercizio con due linee di istruzioni python.
Lovecrafts_Cat (530 points)
2 4 8
answered Oct 9, 2021 by Lovecrafts_Cat (530 points)

Risolto il problema usando il metodo str.translate() menzionato da @Wahya, creando un dizionario per convertire i caratteri delle stringhe date.
Per verificare il numero di caratteri modificati ho usato anche io un for con alcuni controlli interni.

Conviene usare un unico dizionario o applicare più traduzioni con dizionari piccoli per migliorare la leggibilità del codice?

Exyss (21080 points)
1 2 79
commented Oct 9, 2021 by Exyss (21,080 points)
Credo che nel momento in cui si vada ad usare la funzione str.translate() convenga usare direttamente un singolo dizionario, altrimenti il codice diventerebbe ripetitivo e la lettura non ne beneficerebbe poi così tanto
Exyss (21080 points)
1 2 79
answered Oct 9, 2021 by Exyss (21,080 points)
Esercizio molto interessante. Sono riuscito a ridurre il codice di molto utilizzando le proprietà (o comodità) dei cicli for forniti da python, ad esempio le list comprehension o i classici one-line for
Mi chiedevo se, nonostante sia un esercizio facoltativo, sia prevista una discussione ulteriore a questa riguardo questo esercizio dove magari sia possibile confrontarsi con le soluzioni degli altri
Loriv3 (7960 points)
8 20 84
commented Oct 9, 2021 by Loriv3 (7,960 points)
Probabilmente non ci sarà un confronto del genere anche perchè è un esercizio molto base. Probabilmente verrà utilizzato tra un pò per introdurvi al pythonismo vero e proprio che vi permetterà di risolvere un esercizio del genere in due linee
S
S3b4stian82 (2200 points)
3 6 27
answered Oct 9, 2021 by S3b4stian82 (2,200 points)

Buonasera

Ho fatto anche io l'esercizio, ho implementato la funzione in due modi diversi, il codice per chi volesse confrontarlo è a disposizione nel mio repo Github

l
laertleba (2820 points)
7 25 40
commented Oct 10, 2021 by laertleba (2,820 points)
codice scritto in maniera molto elegante, complimenti!
Loriv3 (7960 points)
8 20 84
commented Oct 10, 2021 by Loriv3 (7,960 points)
Molto bravo, il tuo secondo modo di risolvere sarà sicuramente mostrato a lezione dal professore per mostrare le potenzialità di python
Wahya (7760 points)
1 2 15
commented Oct 10, 2021 by Wahya (7,760 points)
La "brain explosion edition" con la comprehension per calcolare i caratteri non sostituiti mi ha fatto letteralmente esplodere le meningi. Grazie per aver postato il codice perché mi è stato veramente utile per capire le altre possibilità di svolgimento a cui non ero arrivato.
S
S3b4stian82 (2200 points)
3 6 27
commented Oct 10, 2021 by S3b4stian82 (2,200 points)
Grazie a tutti per i commenti positivi
S
S3b4stian82 (2200 points)
3 6 27
commented Oct 11, 2021 by S3b4stian82 (2,200 points)
Sta mattina ho ridotto ancora il codice eliminando la seconda condizione sulla if e i caratteri uguali sulle stringhe. Funzione leetv_3, codice aggiornato su github allo stesso link. Saluti
g
giac (2750 points)
7 14 26
answered Oct 11, 2021 by giac (2,750 points)
Salve ragazzi, io sono riuscito a risolvere l'esercizio agevolmente ciclando i caratteri della stringa e poi trasformandoli grazie a if..elif e aggiornando il conto dei caratteri cambiati. Premetto che sono poco più che principiante e che per fortuna funziona tutto bene al primo tentativo, ma non ho idea di come rendere il codice più bello esteticamente e soprattutto più efficiente, più "astratto", più "fico" insomma (non mi riferisco solo a questo esercizio, ma in generale)
Wahya (7760 points)
1 2 15
commented Oct 11, 2021 by Wahya (7,760 points)

Essendo anche io un principiante provo a darti alcuni consigli (non esaustivi) che sto seguendo anche io, sperando ti siano utili:

  • Scrivi tanto codice, cercando di trovare soluzioni alternative per arrivare alla soluzione, aiutandoti con help() per studiare le funzioni e i metodi associati ai vari tipi di strutture presenti in python. Per quanto sia noioso (per me), non fare il mio stesso errore ed impara a commentare bene il tuo codice.
  • E' naturale che all'inizio il tuo pythonese sia brutto esteticamente e spesso lento, pieno di cicli e di istruzioni condizionali. Più avanti nel corso si farà luce su nuove strutture dati, nuove funzionalità (come le comprehension, le funzioni lambda ecc.) che ti aiuteranno ad avere più armi nel tuo arsenale. Per ora ti consiglio di imparare a suddividere i compiti che deve svolgere il tuo codice in varie funzioni in modo tale che esso risulti più veloce e spesso anche più comprensibile (sarà utile per superare i test che richiedono un certo tempo massimo).
  • Su internet è pieno di articoli e di video sul modo più "pythonico" di scivere codice, sono molto interessanti.
  • Lavora sull'eserciziario messo a disposizione qui e se ti interessa, esistono siti come Codewars dove puoi risolvere esercizi via via più complessi per allenarti (di solito è presente anche una funzione di peer assessment o simili).

La strada è lunga e lastricata di odio verso il proprio codice, vedrai che col tempo ti guarderai indietro e ti accorgerai di quanto il tuo modo di scrivere in pythonese si sia trasformato in meglio.

S
S3b4stian82 (2200 points)
3 6 27
commented Oct 11, 2021 by S3b4stian82 (2,200 points)
edited Oct 11, 2021 by S3b4stian82

Quoto il collega ed aggiungo un paio di cose:

- oltre ai video, parte della libreria python, implementazione cpython è scritta in python. Puoi buttare un'occhio direttamente li per avere subito davati del codice molto "Pythonic". cPython github

- pep 8 sullo stile relativo al codice python PEP8

- commenta il codice, allo stato attuale principalmente per te, in futuro per anche per il team con cui lo condividerai. Quando riguarderari il tuo stesso codice a distanza anche di qualche settimana non ti chiederai perche hai fatti in quel modo.

Saluti

Loriv3 (7960 points)
8 20 84
commented Oct 12, 2021 by Loriv3 (7,960 points)
Inoltre vorrei sottolineare che il prof ha lasciato alcuni link qui su q2a da cui puoi trarre ispirazione in cui ci sono errori comuni e altro. Se vuoi qualche spunto vedi anche le soluzioni dei diversi esercizi dell'eserciziario, potresti trarne spunto e conoscere dei modi di lavorare sulle strutture che hai studiato a cui tu non avresti pensato
simonemignanelli (2130 points)
1 2 22
answered Oct 13, 2021 by simonemignanelli (2,130 points)

Ho completato l'esercizio anche se non so se il codice è ottimale github. Vorrei sapere un'informazione poi riguardo a dove vengono pubblicati gli Homework e le modalità di svolgimento perché sinceramente non riesco a comprendere molto questo sito e non vorrei perdermi nulla.

andrea.sterbini (168140 points)
488 897 1729
commented Oct 13, 2021 by andrea.sterbini (168,140 points)
Quando pubblico ciascun HW faccio un annuncio qui con le istruzioni per scaricare lo zip, eseguire i test e caricare programma e descrizione dell'algoritmo. (vedi gli annunci dell'anno scorso)