[Python] Problema irrisolto e richiesta di aiuto

Marco Beri marcoberi a gmail.com
Dom 4 Feb 2018 16:18:10 CET


2018-02-04 16:01 GMT+01:00 Carpediem <i.carpediem a tiscali.it>:

> Un ringraziamento per Daniele e tutta la mia disponibilità a seguire il
> consiglio di Marco.
>
> Intanto grazie per avermi fatto notare gli errori che sono stati
> evidenziati con i punti interrogativi. Dopodiché, ho continuato col provare
> a cercare autonomamente una soluzione. Pensavo di esserci riuscito ma
> ancora una volta il risultato non è stato quello che mi aspettavo anche se
> apparentemente è meno disastroso del precedente tentativo: Ho accorciato il
> codice per facilitarne la lettura. Il risultato che mi attendevo alla fine
> del ciclo for,* una volta inserito il numero 2 in input*, era la lista
> ritardo_cavalli così composta: [1, 0, 0, 1, 0, 1, 1, 0] invece il risultato
> che ottengo è questo:
>
> [1, 0, 1, 0, 1, 0, 0, 1].
>
> Perché? il mio dubbio è che quando chiedo di incrementare il valore
> indicato nel rispettivo indice della lista, in realtà, nel corso del ciclo,
> viene incrementato l'indice stesso. Non comprendo l'errore. Il codice si
> conclude senza segnalazioni ma il risultato non è quello che volevo.
> Riuscite a spiegarmi l’errore? Vi ringrazio. Questo il codice all'osso:
>
> cavallo_0_1 = [0, 1]
> cavallo_0_2 = [0, 2]
> cavallo_0_3 = [0, 3]
> cavallo_1_2 = [1, 2]
> cavallo_1_4 = [1, 4]
> cavallo_2_3 = [2, 3]
> cavallo_2_5 = [2, 5]
> cavallo_3_6 = [3, 6]
> riepilogo_cavalli = [cavallo_0_1, cavallo_0_2, cavallo_0_3, cavallo_1_2,
> cavallo_1_4, cavallo_2_3, cavallo_2_5,
>                      cavallo_3_6,]
> ritardo_cavalli = [0, 0, 0, 0, 0, 0, 0, 0]
> print()
> numero_uscito = int(input("inserisci il numero uscito "))
> print()
> lunghezza_ritardo_cavalli = len(ritardo_cavalli)
> for valore_indice in range(lunghezza_ritardo_cavalli):
>     if numero_uscito not in riepilogo_cavalli[valore_indice]:
>         ritardo_cavalli[valore_indice] += 1
>     else:
>         ritardo_cavalli[valore_indice] = 0
>

Il codice fa esattamente quello che gli stai facendo fare.

Tu scorri il contenuto della lista dei cavalli che vale questo:

    [[0, 1], [0, 2], [0, 3], [1, 2], [1, 4], [2, 3], [2, 5], [3, 6]]

Inserendo 2 e scorrendo gli 8 elementi di questa lista, incrementi il
corrispondente valore di ritarto_cavalli se il cavallo che stai
controllando non contiene 2.

Degli 8 cavalli, quelli che non hanno il 2 sono il primo (posizione 0), il
terzo (2), il quinto (4) e l'ultimo (7).

Quindi è corretto che alla fine ritardo_cavalli valga [1, 0, 1, 0, 1, 0, 0,
1] con incrementati gli elementi 0, 2, 4 e 7 e azzerati gli altri quattro.

Ciao.
Marco.
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20180204/3e3a85af/attachment.html>


Maggiori informazioni sulla lista Python