Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2021-22 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2021-22 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

VIDEOLEZIONI DEL CORSO DI FONDAMENTI DI PROGRAMMAZIONE AA20-21

PROGRAMMING COURSE VIDEOCONFERENCES AY20-21

Come trovo il primo e l'ultimo bit verde???

Franciscus (4830 points)
5 6 16
in HW6 obbligatorio by (4.8k points)
Scusatemi,

nel mio programma scorro l'immagine con due for annidati e mi trovo una lista di liste con tutte le posizioni dei bit verdi; come faccio, però, a fermarmi al primo bit verde che incontro? E poi come posso fare la stessa cosa per trovare l'ultimo bit?
823 views
closed

6 Answers

Best answer
Tommaso Sgroi (12990 points)
7 11 91
by (13.0k points)
edited by
Tramite 2 for (riga, colonna) e 3 while (brevi), con il primo for scorri le righe e appena trovi un pixel verde ti salvi le coordinate, dopodiché con il secondo for e il  primo while ti trovi la larghezza tra un pixel e l'altro, con il secondo scorri la lista dal pixel verde salvato per vedere quando finiscono i verdi, e con il terzo la scorri dal pixel verde che hai trovato con il while precedente in verticale finché non trovi l'ultimo pixel verde.
Ovviamente devi fare attenzione a gestire i controlli.

EDIT: ovviamente devi mettere un controllo che ti indichi se la riga che stai guardando è verde o no.
s
simone.lioy (1420 points)
23 30 39
by (1.4k points)
la tua spiegazione mi sta aiutando molto a farmi un schema di quello che devo fare, ma come faccio a trovarmi le righe e le colonne, perchè facendo len dell'immagine e len dell'immagine da [0] mi da sempre 150 ad entrambi e sono sicuro che c'è qualcosa di sbagliato perchè le coordinate dei punti verdi che trovo sono le stesse sia nell'asse delle x che delle y
Kobrax (3020 points)
6 18 27
by (3.0k points)
Le dimensioni del file foto_1.png, come hai già detto tu, sono 150x150. Ma la griglia verde può essere posizionata a partire da qualsiasi punto nell'immagine. Se ci fai caso, le coordinate (x, y) del primo punto verde effettivamente sono uguali, questo perché il punto è posizionato alla stessa distanza dall'inizio dell'immagine andando avanti di x righe e y colonne. Quindi non c'è nulla di sbagliato nel calcolo
s
simone.lioy (1420 points)
23 30 39
by (1.4k points)
va bene grazie mille, però sono riuscito a trovare solo 6 punti verdi sia nelle righe che nelle colonne e infatti è molto strano per che nella prima riga dovrebbero essere 8
Kobrax (3020 points)
6 18 27
by (3.0k points)
Assicurati di scorrere prima per righe x, ovvero len(img), e poi per colonne y, ovvero len(img[0]). Quindi un punto sarà img[x][y]
fc-dev (16450 points)
12 20 34
by (16.5k points)
Metti i due for per trovare il primo bit verde in una funzione, appena lo trovi fai return.
Per trovare l'ultimo basta che fai la stessa cosa, ma scorrendo l'immagine dal basso e andando da destra verso sinistra.
Franciscus (4830 points)
5 6 16
by (4.8k points)
Ti ringrazio, e per scorrerla al contrario mi basta usare gli indici con -1 giusto?
F
Fra (2240 points)
4 4 7
by (2.2k points)
Si, dei mettere il for i in range(punto di partenza, punto di fine, -1):
plm (18850 points)
7 15 118
by (18.9k points)
Basta fare un return, ma ti consiglierei ti lavorare sulla griglia, comunque dovresti scorrerti quasi tutto il file anche nel caso migliore con il metodo di fc-dev, però sicuramente è leggermente più veloce rispetto a controllare tutta l'immagine
Andrea Sanchietti (3100 points)
4 7 40
by (3.1k points)
basta un doppio for che scorre i pixel dell'immagine e che trova i primo pixel verde. dopo di che puoi fare la stessa cosa ma partendo dalla fine per trovarti l'ultimo
E
Edward (25950 points)
2 4 172
by (26.0k points)
Per trovare il primo pixel verde ti conviene creare una funzione che fa return appena trova un pixel verde, scorrendo l'immagine dall'inizio alla fine.

Per trovare l'ultimo pixel verde puoi fare la stessa cosa, semplicemente devi partire dalla fine, ossia se H è l'altezza e W è la larghezza, devi partire dagli indici H-1 e W-1, sottraendo uno ogni volta.
Ti basta usare due for ed i parametri opzionali di range().
a
a.pietroluongo (11250 points)
15 38 131
by (11.3k points)
Non è necessario trovare l'ultimo pixel verde