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

Do you need help?

Formato dei dati es2

a
ares.angeloni (1060 points)
9 24 37
in Es2 by (1.1k points)
recategorized by
all' interno del mio programma, per questioni di gestione, ho deciso di salvare in certi casi, i dati degli oggetti, piuttosto che gli oggetti stessi.

per esempio, rettangolo1.colore=(0,0,0) piuttoato che rettangolo1.colore=nero

è importante ai fini dei test? se si, un programma funzionante che salva i dati direttamente (attraverso le funzioni to_tuple comunque implementate nel programma), senza richiamare ogni volta gli oggetti, sarebbe logicamente sbagliato? (non ni confronti dei test superati o no per formato, ma nei confronti dello svolgimento in se)
667 views

3 Answers

_andrea_ (45670 points)
11 42 297
by (45.7k points)
il colore del rettangolo non puoi sceglierlo tu visto che sarà il test a fornire i dati necessari a instanziare i tuoi oggetti. durante l'esecuzione il test dovrà creare vari oggetti, per esempio il colore rosso, il verde, il nero, che poi userà per creare rettangoli di colore nero, bianco, rosso, che userà poi per aggiungerli a oggetti di tipo skyline con sfondo verde, rosso, nero ecc. se tu nelle tue classi assegni un colore all'oggetto, il test non avrà più lo stesso svolgimento. se tu per esempio nel Rettangolo.__init__ scrivi che il colore è (0,0,0), perdi quello passato come parametro. e se invece lo fai per esempio in uno skyline, avendo una lista di rettangoli e decidi di cambiare il colore di uno di essi, proprio come scritto lì rettangolo1.colore=(0,0,0), cambieresti per sempre gli attributi dell'oggetto rettangolo1, che potrebbe essere (anzi sarà sicuramente) necessario per altri test dopo quello. detto questo, se io non so come hai strutturato il programma. se tu pensi che cambiando l'attributo colore di un determinato rettangolo non influirà sul risultato di eventuali test futuri, allora puoi farlo. ma il fatto che non influisca su test futuri mi fa pensare che quel rettangolo non sarà più usato, quindi rende inutile il cambio di attributo colore. ora che sai queste cose, l'unico che può darsi una risposta sei tu, provando a cambiare quel colore di quel rettangolo e vedere se succede qualcosa nei test successivi
a
ares.angeloni (1060 points)
9 24 37
by (1.1k points)

credo di non essermi spiegato bene. non ho mai detto di voler assegnare io i valori all' interno del programma, ma soltanto di utilizzare un certo formato, per rappresentare i valori forniti dal tester.

ripeto l esempio scritto sopra: rettangolo1.colore=nero mette all interno dell attributo colore l oggetto nero (con rgb 0,0,0)

rettangolo1.colore=nero.to_tuple() utilizzando la funzione to_tuple, realizzata per richiesta dal programma stesso, ottengo invece un ugualianza del tipo rettangolo1.colore=(0,0,0)

sono due modi diversi per rappresentare la stessa cosa. è normale/giusto che uno dei due sia sbagliato?

_andrea_ (45670 points)
11 42 297
by (45.7k points)

La classe Rettangolo deve implementare i seguenti metodi:

...

- to_tuple(self) che torna la terna (base, altezza, colore)

la tupla deve ritornare colore, e credo che i test controllino che sia QUEL colore, quindi ritornando una tupla (r,g,b) i test lo vedrebbero sbagliato

a
ares.angeloni (1060 points)
9 24 37
by (1.1k points)

sono al corrente che sono due elementi diversi. la mia domanda era:

 utilizzare un formato diverso è sbagliato ai fini della soluzione del problema, o se semplicemente non è previsto dai test pur essendo corretto? ci può stare che i test non considerino tutte le possibilità di realizzazione, il punto è, dovrebbero permettere la realizzazione con questo formato, se il codice funziona?

_andrea_ (45670 points)
11 42 297
by (45.7k points)
Prova se funziona usando quel metodo. Secondo me no perché controlla che colore nella tupla sia un Colore, anzi per essere precisi deve essere QUEL colore con cui il rettangolo è stato inizializzato
a
ares.angeloni (1060 points)
9 24 37
by (1.1k points)
lo ripeto per la 3 volta: i test non funzionano con il formato differente. la mia domanda, per la 4 volta, è se io stia sbagliando, o semplicemente l alternativa non è stata tenuta in considerazione all atto di formulazione del tester. non fatemelo ripetere ancora plis
_andrea_ (45670 points)
11 42 297
by (45.7k points)
Ma cosa c'è da ripetere. Se i test dicono che devi tornare una tupla con l'oggetto Colore e tu torni una tupla con dentro una tupla che ha i valori rgb del Colore, cosa ti aspetti? È come chiedere se al primo esercizio invece di tornare il numero di rettangoli rossi puoi tornare una stringa con dentro x caratteri dove x è il numero di rettangoli rossi. Ritorna il numero e basta. Allo stesso modo qui devi ritornare il Colore e basta. Tanto ti viene passato come parametro al costruttore ed è anche più facile ritornare direttamente quello piuttosto che ritornare la versione to_tuple di sé stesso
_andrea_ (45670 points)
11 42 297
by (45.7k points)
Ovviamente da un punto di vista logico per una persona la tua versione non è sbagliata, dopotutto un colore è rappresentato solo da 3 interi r, g e b. Però se il test chiede quello tu devi fare quello. Poi che la tua versione possa funzionare lo stesso non lo metto in dubbio. Ma il test dice una cosa e quella devi fare
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
Se due Colori hanno lo stessa tripla r,g,b come li distingui?
a
ares.angeloni (1060 points)
9 24 37
by (1.1k points)
se le componenti del colore sono uguali non dovrebbero essere lo stesso colore? non capisco dove voglia arrivare, prof

è qualcosa di relativo a qualche funzione? perchè anche utilizzando le terne sono riuscito a implementarle
_andrea_ (45670 points)
11 42 297
by (45.7k points)
Il colore è lo stesso ma l'oggetto di tipo colore no, potrebbero esserci due oggetti, un rosso=Colore(255,0,0) e un rosso1=Colore(255,0,0) che sono uguali ma diversi
Xriuk (13590 points)
6 24 116
by (13.6k points)

Dipende tutto da come il tester controlla i dati: io ho effettuato confronti a livello di oggetti: colore1 == colore2 invece di confrontare i dati stessi: colore1.to_tuple() == colore2.to_tuple() e non mi da problemi

a
ares.angeloni (1060 points)
9 24 37
by (1.1k points)
infatti quello che sto dicendo è se utilizzare un formato diverso è sbagliato ai fini della soluzione del problema, o se semplicemente non è previsto dai test pur essendo corretto