Possibile postare codice sbagliato? (NO)

P
Powner (5600 points)
24 68 85
asked Oct 29, 2017 in Altri argomenti by Powner (5,600 points)
closed Oct 30, 2017 by andrea.sterbini
Svolgendo l'homework 2.2, tra le varie soluzioni che stavo cercando ce n'era una che prevedeva di creare un dizionario a partire da una lista di liste (chiamiamola txt). Scritto e controllato numerose volte il codice, continua a nascere un problema nelle prime due liste di txt, che riguarda unicamente quelle (tant'è che spostandole a posizioni diverse, il problema continua a rimanere circoscritto a quelle due righe), nonostante siano strutturalmente identiche alle altre.

Quello che mi chiedevo è, quindi: nel divieto assoluto di scambio codice, rientra anche il postare una funzione di poche righe per spiegare meglio il problema e ricevere assistenza? Chiarisco che si tratterebbe di una funzione sbagliata, sia per il problema di cui parlo sia perché non è adatta ad affrontare il problema dell'homework.
289 views
closed with note: answered

3 Answers

francesco.dev (33560 points)
14 51 129
answered Oct 29, 2017 by francesco.dev (33,560 points)

Ciao!

Purtroppo le regole in questo ambito sono molto severe:
Sul forum non possiamo scambiare alcun tipo di codice, ma solo pseudo-codice.
Quindi puoi spiegare passo passo tale funzione e noi saremo lieti di aiutarti! :)

- Francesco Pio Scognamiglio

P
Powner (5600 points)
24 68 85
commented Oct 29, 2017 by Powner (5,600 points)
Visto che si tratta di un problema con due liste specifiche, come ho già detto, postare lo pseudo codice sarebbe inutile. Le liste sono strutturalmente uguali e con le altre l'algoritmo funziona. Attendo la conferma del professore, nel caso chiederò dopo la deadline.
francesco.dev (33560 points)
14 51 129
commented Oct 29, 2017 by francesco.dev (33,560 points)
Perché non provi a spiegare tale funzione? Dicendo innanzi tutto cosa contengono le liste, in che modo riscontri il problema, se usi cicli e da che posizione a che posizione vanno.

Ps.: anonimo downvoter, i voti negativi servono qualora la risposta sia sbagliata, invece la mia è più che giusta visto che ho riportato una delle regole principali del forum!  ;)
P
Powner (5600 points)
24 68 85
commented Oct 29, 2017 by Powner (5,600 points)
Scusa se te lo dico, ma devi sempre sindacare i downvote? Non è neanche vero che nascono per essere dati soltanto qualora la risposta sia sbagliata, ma comunque se non hai voglia di riceverli non rispondere no?

Tornando al problema, che mi pare più pertinente:
itero con un for su una lista di liste txt, ciascuna delle quali è formata da due elementi: la sottostringa ('comp' o 'sub') e l'id del compito corrispondente. Ciò che itero sono gli indici, utilizzando range sulla lunghezza di txt. Se la sottostringa della lista successiva ha 'sub', allora mi aggiunge l'id corrispondente nel dizionario (la chiave sarà l'id del compito precedente).

In pratica, il ciclo funziona perfettamente dalla terza riga in poi, mentre le prime due righe (rispettivamente ['comp','7'] e ['sub','4']) creano due voci del dizionario vuote: '7'=[] e '4'=[].

Non credo si capisca qualcosa, ad ogni modo.
francesco.dev (33560 points)
14 51 129
commented Oct 29, 2017 by francesco.dev (33,560 points)
Io parlo dei downvote quando penso che non siano giusti. Quando sbaglio risposta sono il primo ad accettarne le conseguenze! Ma qui come in altri casi vorrei proprio una spiegazione plausibile, visto che la mia risposta è più che giusta.
andrea.sterbini (172780 points)
513 935 1789
answered Oct 29, 2017 by andrea.sterbini (172,780 points)
Hai provato col debugger?
P
Powner (5600 points)
24 68 85
commented Oct 29, 2017 by Powner (5,600 points)
In realtà no, essendo abituato coi print non saprei come usarlo (facepalm)
Luca T. (5410 points)
3 20 38
answered Oct 29, 2017 by Luca T. (5,410 points)
Da come hai spiegato ho capito cosa vuoi che il programma faccia, ma trovare l'errore è un altro paio di maniche. Sei sicuro che tutti gli altri elementi del dizionario siano corretti? Potrebbe essere un errore di indici, perché il programma non vede che il compito 7 necessita del 4. Come hai gestito la scelta quando scorri la lista? Se è sub passa oltre? Perché a sub 4 attribuisce la valenza di comp 4.
P
Powner (5600 points)
24 68 85
commented Oct 29, 2017 by Powner (5,600 points)
Per quanto riguarda il dizionario, la mia idea iniziale (ora sto lavorando su un'altra) era di creare una versione base del dizionario finale, in cui le chiavi sono tutti gli id con 'comp' prima e come attributi la lista con il compito alla riga sotto se è sub, altrimenti una lista vuota.

Quindi nel caso delle due righe che non funzionano, ovvero  ['comp','7'] e ['sub','4'] doveva restituirmi: '7':['sub','4']. Ed è quello che fa per tutto il txt, ma non per queste due righe. ---> il resto degli attributi sono come dovrebbero: lista vuota o lista con ['sub',id].

Un problema di indici l'ho escluso in teoria, perché ho fatto prove scambiando tra loro le liste, printando gli indici in vari momenti del ciclo e tutto gira come dovrebbe.

Poi non ho capito l'ultima parte, la scelta quando scorro la lista è che se l'elemento successivo ha 'sub' faccio quanto detto.
Luca T. (5410 points)
3 20 38
commented Oct 29, 2017 by Luca T. (5,410 points)
Hai provato a stampare la lista e vedere se c'è qualcosa di strano?
P
Powner (5600 points)
24 68 85
commented Oct 29, 2017 by Powner (5,600 points)
Certo, l'ho fatto in tutte le salse, anche (come ho detto) invertendo gli elementi per vedere se era questione di indici.

Vabbè, mi metterò l'anima in pace, grazie comunque.