Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Perché 4 test sì e 4 no?

P
Powner (5600 points)
36 68 85
in Es2 by (5.6k points)
closed by
Ormai siamo agli sgoccioli, ma non sono ancora riuscito a risolvere il problema del mio programma (hm 2.2).

Il fatto è che il problema che mi crea è anomalo, e oltretutto si presenta in maniera apparentemente casuale: il mio grader mi restituisce 4 sì e 4 no. Tra l'altro, nemmeno in ordine, visto che a darmi l'ok sono: 1,2,3 e il 6; ciò non mi ha permesso di ipotizzare che il problema potesse riguardare l'input insi quando non era della classica forma {} ma con una "set comprehension", poiché non c'è una costanza di comportamento in questo senso. (non so se sono stato chiaro)

Riassumo velocemente l'algoritmo in pseudocodice: è composto da cicli annidati per ottenere da ciascun elemento dell'insi la lista dei compiti che devono essere fatti prima di quello, attraverso una variabile ausiliaria temp che cambia valore ad ogni iterazione e lo aggiunge all'attributo della chiave in questione.

Il problema iniziale era un "KeyError", che poi ho scoperto dipendere da "un'accumulazione" di stringhe nella variabile temp. Ovvero: invece di sostituire il valore, sembra aggiungerlo, ma dopo svariate ore ho capito di non essere in grado di rintracciare il punto in cui succede (ma solo quello in cui si presenta l'errore per la prima volta), nonostante le poche righe di codice.

Per evitare l'errore, ho utilizzato un "try-except", e ciò mi ha "salvato" un nuovo test (il settimo mi ha iniziato a dare l'ok, anche se dopo qualche altro cambiamento minimale di cui non mi sono accorto, è tornato a non funzionare), ma per il resto ha semplicemente sostituito il problema: da un KeyError sono passato ad un AssertionError, poiché ovviamente mettendo un break come except qualche elemento mi salta.

Qualcuno sa dirmi da cosa può dipendere questo errore? Ad esempio,si notano delle costanti in queste poche e disordinate informazioni che ho riportato su cui posso lavorare per smascherare l'errore? Perché succede solo con quei determinati test? Come possono accumularsi dei valori in una variabile ausiliaria se non ho mai utilizzato la concatenazione ma solo l'assegnazione?
592 views
closed with the note: deadline expired

2 Answers

G
Gyanluca (1690 points)
8 13 22
by (1.7k points)
potrebbe non entrarci nulla ma hai controllato le maiuscole e le minuscole?
P
Powner (5600 points)
36 68 85
by (5.6k points)
Le maiuscole e le minuscole di cosa?
G
Gyanluca (1690 points)
8 13 22
by (1.7k points)
il grader cerca parole in maiuscolo e in minuscolo, è possibile che non ti trovi tutto correttamente perchè magari controlli una parola al suo stato originario es: "Sorella" e che di conseguenza non ti trovi la parola "sorella" nel testo, se non lo hai fatto assicurati che sia tutto in minuscolo , questo se ovviamente hai incongruenze a trovare solo alcuni elementi dell'insieme restituito
P
Powner (5600 points)
36 68 85
by (5.6k points)
Io stavo dicendo dell'homework 2.2, quello con i compiti (wasntme)
G
Gyanluca (1690 points)
8 13 22
by (1.7k points)
oddio scusa ahah ho letto "4 test" e mi son fissato in testa che parlassi dell primo nel secondo homework
split (8700 points)
21 59 79
by (8.7k points)
non so qual'è il problema ovviamete, ma mi è capitato qualcosa di simile. il KeyError lo da magari se si accumulano le stringhe come dici tu e quindi cerca una chiave che non esiste, o se gli passi tu un valore che non ha comp (l'11 ad esempio nel primo grade), o se una volta trovato un sub vai cercando se quel compito ha un sub, magari non ce l'ha, quindi non c'è chiave-valore nel tuo dizionario e ti da errore, se il tuo dizionario è fatto in modo che non ce l'abbia. Ora, non so com'è fatto il tuo dizionario, ma ti direi di dargli una occhiata e vedere se si verifica una di queste cose, e cercare di "prevenirla" senza try except. try except "gestisce" un eventuale errore, non lo elimina, se non sai qual'è e dov'è l'errore non ti conviene usarlo
P
Powner (5600 points)
36 68 85
by (5.6k points)
Allora mi sento di escludere il caso in cui passo il valore che non ha comp (perché li ho esclusi prima del ciclo) e quello in cui non c'è un sub (in quel caso si tratta di lista vuota, e ho gestito anche quello).
Inoltre, nella segnalazione del KeyError mi printava anche la chiave che dava problemi, quindi ho avuto modo di verificare che si tratta di quel problema che dicevo (riuscivo a rintracciare i vari id tutti attaccati)
split (8700 points)
21 59 79
by (8.7k points)
ok allora spiega bene come cambia la tua variabile temp, e per cosa la usi perché non mi è chiaro cosa fai nel ciclo, proviamo a salvare tutto last minute :D
P
Powner (5600 points)
36 68 85
by (5.6k points)
In realtà ho cambiato algoritmo e va un po' meglio (7 su 8), quindi ormai questo problema è stato sostituito da un altro (che, ovviamente, non ho capito! :D ).

Però lascio il thread ancora aperto, se qualcuno vuole contribuire.
La variabile temp, per quanto sono riuscito a controllarla io con print e debug,mi dava errore (se utilizzata come chiave) perché tutto ad un tratto diventava un numero gigantesco composto da tutti gli attributi che (immagino) gli erano stati assegnati precedentemente.

Del tipo: se diventava prima '1358',poi'4120' e infine '567281', temp (in questo caso non alla seconda iterazione, ma alla terza, ovvero non le accumulava man mano ma di colpo) diventava '13584120567281'.
split (8700 points)
21 59 79
by (8.7k points)
ah ok quindi non la "azzeravi" ad ogni ciclo ridichiarandola vuota...ora lo hai fatto o hai proprio cambiato metodo? se vuoi riusare quello basta che prima che ricomincia il ciclo la ridichiari come stringa vuota, credo sia solo questo il problema