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

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 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 2023-24 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.

Problema con il while? (primo esercizio del terzo homework)

n
nicom (290 points)
3 8 12
in Es1 by (290 points)
closed by

Spero di non violare nessuna regola postando in maniera assolutamente generica un po' di codice, ma davvero altrimenti non saprei come spiegarmi.

Ho inserito nella mia funzione un while del tipo:

for y in img:

    while c in y[salta:]

All'interno di quel while viene appunto calcolato un "salta" in base a quante tuple del colore scelto vengono contate.

Nella mia testa, questo avrebbe dovuto far si che il programma ricominciasse a controllare la stessa riga ma partendo da un indice diverso, invece appena arriva alla fine del prima riga il while viene interrotto e non viene controllato il resto della riga.

Ovviamente ho controllato, e il "salta" calcolato è corretto, ho provato anche direttamente sulla console se su quella riga esattamente con la stessa impostazione (quindi ad esempio, se il salta era 40, usando y[40:]) venisse rilevato il colore, e veniva rilevato.

Dopo aver effettuato numerosi controlli del codice, la domanda mi viene spontanea: ci sta qualche peculiarità del while che non sto considerando? O sto sbagliando qualcosa nel ragionamento di base?

Allego immagine per far capire meglio la situazione, usando Ist2.png.

I pixel verdi sono quelli che il programma effettivamente controlla e registra.

384 views
closed with the note: deadline expired

2 Answers

Stefaniscion (1370 points)
6 15 32
by (1.4k points)
edited by
Avendo studiato perlopiù da solo, spero di non dire fandonie... nel caso qualcuno mi corregga

Il ciclo While non è come il ciclo For.

Con il ciclo For tu cicli al interno di un oggetto iterabile (lista, dizionario etc) finche questo non termina.

con un ciclo While cicli indipendentemente da oggetti iterabili (semplicemente ripeti il codice sottostante) al soddisfare di una condizione.

Appunto dopo un while devi specificare una condizione (un po come con l’if), per esempio

While a==1: (ripete il codice sottostante finche la condizione “a==1” è verificata)

Per il tuo problema credo tu debba usare un altro for (for annidato), quindi nella forma

For (condizione):

    For (condizione):

Spero di essere stato chiaro, anche se non ho risposto alla tua domanda... che devo dire, non ho capito benissimo, se non altro spero di averti dato un consiglio per trovare “la via”... scusa inoltre la formattazione del testo, ma sono da cellulare

-‘niscion
V
Valerio.Pescatori (1940 points)
11 25 38
by (1.9k points)

Credo di aver capito il tuo problema, è capitata la stessa cosa a me, e il problema non è il while, è il for.

Facciamo un esempio:

Vuoi iterare su una variabile x con un ciclo for che va da 0 a 10:

quando la x sarà ==5 le assegni il valore 8, quindi x=8,

quello che vorresti tu (sempre se ho capito bene) è che all'iterazione successiva la x continuasse proseguendo dall'8
quello che accade realmente però è che la x tornerà ad essere 6  e proseguirà da quel valore, quindi non viene registrato il "salto" del quale parli.

Per risolvere questo problema dovresti usare dei cicli while per scorrere l'immagine e incrementare di volta in volta le variabili, in questo modo la variabile sulla quale cicli potrà effettuare tutti i salti che vuoi.

Spero di averti aiutato :)