Re: [Python] Dove sbaglio?

2020-04-30 Per discussione Francesco Tuccia
E così sarebbe riprovevole fumare o giocare al lotto se la gente
pensasse un po' più ai fatti suoi francamente non fumo e non gioco al
lotto, ma non mi sognerei mai di giudicare chi si diletta a fare queste
cose.
Francy

Il giorno gio 30 apr 2020 alle ore 01:16 Carpediem 
ha scritto:

> Un saluto a tutti e un grazie anticipato al volenteroso che avrà avuto la
> pazienza e la capacità di darmi una soluzione.
>
> ho queste liste:
>
> riepilogo_numeri_singoli = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
> 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
> 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
>
> ritardo_numeri_singoli = [22, 0, 18, 34, 20, 7, 2, 1, 30, 22, 55, 47, 53,
> 49, 52, 38, 12, 41, 29, 5, 11, 44, 26, 33, 40, 13, 50, 39, 4, 21,
>   45, 3, 53, 32, 6, 25, 55]
>
> numeri_singoli_in_ordine = []
> ritardo_numeri_singoli_ordine_decrescente = []
>
>
> La mia intenzione è di inserire tutti gli elementi della lista
> ritardo_numeri_singoli nella lista
> ritardo_numeri_singoli_ordine_decrescente in modo da
>
> avere tutti gli elementi distribuiti in ordine di grandezza dal più grande
> al più piccolo. Ciò fatto, ho poi l'esigenza che gli elementi della lista
> riepilogo_numeri_singoli
>
> vengano inseriti all'interno della lista numeri_singoli_in_ordine in base
> all'indice corrispondente di ogni elemento contenuto nella lista
> ritardo_numeri_singoli ora inserito nella lista
> ritardo_numeri_singoli_ordine_decrescente.
>
> In pratica, nella lista ritardo_numeri_singoli_ordine_decrescente voglio
> ottenere questa situazione [55, 55, 53, 53, 52, .., 0]
>
> e nella lista numeri_singoli_in_ordine voglio ottenere questa situazione
> [10, 36, 12, 32, .] questo perchè il primo numero più grande
> della lista ritardo_numeri_singoli_ordine_decrescente (il primo 55)
>
> nella lista_ritardo_numeri_singoli aveva indice 10 e all'indice 10
> corrisponde il numero 10 della lista riepilogo_numeri_singoli.
>
> Quando eseguo il codice che ho scritto, il programma non segnala alcun
> errore ma resta in esecuzione senza concludersi. in pratica, come se
> entrasse in un loop infinito ma senza stampare nulla a video.
>
> Carta e penna alla mano e una riga di codice alla volta, continuo ad
> essere convinto che tutto dovrebbe girare bene fino a concludersi ma non è
> così e non comprendo perchè.
>
> Di seguito, inserisco il codice che sta causando la mia emicrania. Dov'è
> l'errore?
>
>
> riepilogo_numeri_singoli = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 
> 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
> 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
>
> ritardo_numeri_singoli = [22, 0, 18, 34, 20, 7, 2, 1, 30, 22, 55, 47, 53, 49, 
> 52, 38, 12, 41, 29, 5, 11, 44, 26, 33, 40, 13, 50, 39, 4, 21,
>   45, 3, 53, 32, 6, 25, 55]
>
> numeri_singoli_in_ordine = []
> ritardo_numeri_singoli_ordine_decrescente = []
>
>
> ritardo_numeri_singoli_ordine_decrescente = ritardo_numeri_singoli[0:]
> ritardo_numeri_singoli_ordine_decrescente.sort(reverse=True)
> lunghezza_ritardo_numeri_singoli_ordine_decrescente = 
> len(ritardo_numeri_singoli_ordine_decrescente)
> posizione = 0for ordine in range 
> (lunghezza_ritardo_numeri_singoli_ordine_decrescente):
> if ordine > 0 and ritardo_numeri_singoli_ordine_decrescente[ordine] == 
> ritardo_numeri_singoli_ordine_decrescente[ordine - 1]:
> non_trovato = Truewhile True:
> if ritardo_numeri_singoli_ordine_decrescente[ordine] == 
> ritardo_numeri_singoli[posizione + 1]:
> posizione = 
> ritardo_numeri_singoli.index(ritardo_numeri_singoli_ordine_decrescente[posizione
>  + 1])
> numeri_singoli_in_ordine.insert(ordine, 
> riepilogo_numeri_singoli[posizione])
> non_trovato = Falseelse:
> posizione += 1else:
> posizione = 
> ritardo_numeri_singoli.index(ritardo_numeri_singoli_ordine_decrescente[ordine])
> numeri_singoli_in_ordine.insert(ordine, 
> riepilogo_numeri_singoli[posizione])
> print()print(riepilogo_numeri_singoli)print(ritardo_numeri_singoli)print()print(numeri_singoli_in_ordine)print(ritardo_numeri_singoli_ordine_decrescente)
>
> ___
> Python mailing list
> Python@lists.python.it
> https://lists.python.it/mailman/listinfo/python
>
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Dove sbaglio?

2020-04-30 Per discussione Marco Beri
On Thu, Apr 30, 2020 at 9:45 PM Carpediem  wrote:

> Punto 5) ho cercato in rete info sulla funzione zip ma al momento non ho
> trovato nulla di spiegato in modo semplice ma comunque approfondito: hai
> riferimenti?
>

Questo tutorial spiega la funzione zip:
https://realpython.com/python-zip-function/

Questo spiega la funzione sorted:
https://www.programiz.com/python-programming/methods/built-in/sorted

Questo spiega le lambda function: https://realpython.com/python-lambda/

Punto 6) Addirittura due soluzioni diverse: geniale ed invidiabile. Una
> riga di codice contro le circa 30 da me utilizzate
>

In realtà le due soluzioni sono proprio simili. Un po' come dire che per
sommare 10 puoi fare x + 10 oppure x - ( - 10).
Non cambia la sostanza e le due soluzioni sono in realtà la stessa.

Punto 8) Ma dove hai imparato? Avevo immaginato che mi ero infilato in
> qualcosa di complicato e la tua conferma un poco mi consola
>

Il primo programma che ho scritto usava una calcolatrice programmabile per
controllare se un numero fosse primo o meno.
Ricordo che per calcolare se 17 fosse primo (lo è) girò tutta la
notte.
Era questa qui https://en.wikipedia.org/wiki/Casio_FX-602P_series ed era
anche il 1981 (ero in quarta liceo). Mi era arrivato lo sghiribizzo di
ricomprarmela (fino a pochi anni fa ce l'avevo, ma ora l'ho perduta). Ma
mannaggia alla morte costa 200$: sghiribizzo passato all'istante :-)

Quando fai una cosa (che per di più ti piace) per 40 anni diciamo che è
proprio impossibile non diventare almeno decente in quello che fai.
Attento: non sto dicendo che ci vogliono quarant'anni per diventare come
me, anche perché sarebbe un risultato ben misero visto che ci sono
ragazzini di 15 anni che mangiano in testa a noi boomer come niente fosse,
dico solo che nel mio caso è stata più che altro una questione di tempo.

La genialità sta proprio da un'altra parte (e lo dico con una grandissima
dose di "invidia mista ammirazione" per i geni).

Ciao.
Marco.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Dove sbaglio?

2020-04-30 Per discussione Carpediem


Il 30/04/2020 22:04, Carpediem ha scritto:


Il 30/04/2020 21:24, Alessandro T. ha scritto:

Il 30/04/20 19:53, Marco Beri ha scritto:

[...]

La funzione zip fa questo:

    >>> list(zip([1,2,3], ['a', 'b', 'c']))
    [(1, 'a'), (2, 'b'), (3, 'c')]


Passandogli un parametro con l'* in pratica gli facciamo fare il 
contrario:


    >>> list(zip(*[(1, 'a'), (2, 'b'), (3, 'c')]))
    [(1, 2, 3), ('a', 'b', 'c')]


Ma nel tuo caso lei fa il suo dovere, dobbiamo invece modificare il 
comportamento della funzione sorted:


    >>> ritardo_numeri_singoli_ordine_decrescente ,
    numeri_singoli_in_ordine = zip(*sorted(zip(ritardo_numeri_singoli,
    riepilogo_numeri_singoli), key=lambda x:(x[0],-x[1]), 
reverse=True))

    >>> ritardo_numeri_singoli_ordine_decrescente
    (55, 55, 53, 53, 52, 50, 49, 47, 45, 44, 41, 40, 39, 38, 34, 33,
    32, 30, 29, 26, 25, 22, 22, 21, 20, 18, 13, 12, 11, 7, 6, 5, 4, 3,
    2, 1, 0)
    >>> numeri_singoli_in_ordine
    (10, 36, 12, 32, 14, 26, 13, 11, 30, 21, 17, 24, 27, 15, 3, 23,
    33, 8, 18, 22, 35, 0, 9, 29, 4, 2, 25, 16, 20, 5, 34, 19, 28, 31,
    6, 7, 1)


In pratica diciamo alla funzione sorted di usare per l'ordinamento 
inverso il primo numero così com'è (il ritardo) e il secondo numero 
al contrario.
In alternativa potevamo dirgli di non fare l'ordine inverso e 
invertire il primo, il risultato non cambia:


    >>> ritardo_numeri_singoli_ordine_decrescente ,
    numeri_singoli_in_ordine = zip(*sorted(zip(ritardo_numeri_singoli,
    riepilogo_numeri_singoli), key=lambda x:(-x[0],x[1])))
    >>> ritardo_numeri_singoli_ordine_decrescente
    (55, 55, 53, 53, 52, 50, 49, 47, 45, 44, 41, 40, 39, 38, 34, 33,
    32, 30, 29, 26, 25, 22, 22, 21, 20, 18, 13, 12, 11, 7, 6, 5, 4, 3,
    2, 1, 0)
    >>> numeri_singoli_in_ordine
    (10, 36, 12, 32, 14, 26, 13, 11, 30, 21, 17, 24, 27, 15, 3, 23,
    33, 8, 18, 22, 35, 0, 9, 29, 4, 2, 25, 16, 20, 5, 34, 19, 28, 31,
    6, 7, 1)


Ok, confesso che è un po' complicato (le funzioni lambda sono un 
pochino avanzate), però anche quello che vuoi fare tu lo è.


Ciao.
Marco.




Ovviamente questa soluzione+spiegazione di Marco è preferibile, però 
dai, c'eri quasi:




numeri = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 
34, 35, 36]


ritardo = [22, 0, 18, 34, 20, 7, 2, 1, 30, 22, 55, 47, 53, 49, 52, 
38, 12, 41, 29, 5, 11, 44, 26, 33, 40, 13, 50, 39, 4, 21, 45, 3, 53, 
32, 6, 25, 55]


numeri_in_ordine = []
ritardo_dec = sorted(ritardo, reverse=True)


posizione = 0
for ordine in range(len(ritardo_dec)):
    if ordine > 0 and ritardo_dec[ordine] == ritardo_dec[ordine - 1]:
    non_trovato = True
    while non_trovato:  # sostituito il True
    if ritardo_dec[ordine] == ritardo[posizione + 1]:
    # posizione = ritardo.index(ritardo_dec[posizione + 1])
    numeri_in_ordine.insert(ordine, numeri[posizione + 
1])  # aggiunto +1

    non_trovato = False
    else:
    posizione += 1
    else:
    posizione = ritardo.index(ritardo_dec[ordine])
    numeri_in_ordine.insert(ordine, numeri[posizione])

print()
print(numeri)
print(ritardo)
print()
print(numeri_in_ordine)
print(ritardo_dec)


ciao



Grazie Alessandro ho giusto scritto a Marco che resto incuriosito sul 
perchè la mia soluzione non funzionasse


praticamente dov'era l'errore? nel posizione mentre ci voleva 
posizione +1? la voglio provare passo passo per capire.


Grazie, anche perchè sono contento che la sensazione di essere vicino 
alla soluzione era fondata.


Che bella lista!!!

Ciao Alessandro, come ti avevo detto, ho confrontato il tuo codice con 
il mio e ho compreso la stupidità del mio errore.


Come hai detto tu, c'ero quasi. Ma ero concentrato a cercare dove non 
dovevo. Hai tolto il while true ma anche con quello


e la relativa istruzione break funziona bene comunque. Perfetto così. Da 
domani mi devo concentrare per assimilare il


lavoro che fa la funzione zip illustrata da Marco e poi capire l'uso che 
ne ha fatto con quel key =lambda  Grazie ancora ad entrambi


mi avete regalato stimoli e consapevolezza.

Isidoro


___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python

___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Dove sbaglio?

2020-04-30 Per discussione Carpediem


Il 30/04/2020 21:24, Alessandro T. ha scritto:

Il 30/04/20 19:53, Marco Beri ha scritto:

[...]

La funzione zip fa questo:

    >>> list(zip([1,2,3], ['a', 'b', 'c']))
    [(1, 'a'), (2, 'b'), (3, 'c')]


Passandogli un parametro con l'* in pratica gli facciamo fare il 
contrario:


    >>> list(zip(*[(1, 'a'), (2, 'b'), (3, 'c')]))
    [(1, 2, 3), ('a', 'b', 'c')]


Ma nel tuo caso lei fa il suo dovere, dobbiamo invece modificare il 
comportamento della funzione sorted:


    >>> ritardo_numeri_singoli_ordine_decrescente ,
    numeri_singoli_in_ordine = zip(*sorted(zip(ritardo_numeri_singoli,
    riepilogo_numeri_singoli), key=lambda x:(x[0],-x[1]), reverse=True))
    >>> ritardo_numeri_singoli_ordine_decrescente
    (55, 55, 53, 53, 52, 50, 49, 47, 45, 44, 41, 40, 39, 38, 34, 33,
    32, 30, 29, 26, 25, 22, 22, 21, 20, 18, 13, 12, 11, 7, 6, 5, 4, 3,
    2, 1, 0)
    >>> numeri_singoli_in_ordine
    (10, 36, 12, 32, 14, 26, 13, 11, 30, 21, 17, 24, 27, 15, 3, 23,
    33, 8, 18, 22, 35, 0, 9, 29, 4, 2, 25, 16, 20, 5, 34, 19, 28, 31,
    6, 7, 1)


In pratica diciamo alla funzione sorted di usare per l'ordinamento 
inverso il primo numero così com'è (il ritardo) e il secondo numero 
al contrario.
In alternativa potevamo dirgli di non fare l'ordine inverso e 
invertire il primo, il risultato non cambia:


    >>> ritardo_numeri_singoli_ordine_decrescente ,
    numeri_singoli_in_ordine = zip(*sorted(zip(ritardo_numeri_singoli,
    riepilogo_numeri_singoli), key=lambda x:(-x[0],x[1])))
    >>> ritardo_numeri_singoli_ordine_decrescente
    (55, 55, 53, 53, 52, 50, 49, 47, 45, 44, 41, 40, 39, 38, 34, 33,
    32, 30, 29, 26, 25, 22, 22, 21, 20, 18, 13, 12, 11, 7, 6, 5, 4, 3,
    2, 1, 0)
    >>> numeri_singoli_in_ordine
    (10, 36, 12, 32, 14, 26, 13, 11, 30, 21, 17, 24, 27, 15, 3, 23,
    33, 8, 18, 22, 35, 0, 9, 29, 4, 2, 25, 16, 20, 5, 34, 19, 28, 31,
    6, 7, 1)


Ok, confesso che è un po' complicato (le funzioni lambda sono un 
pochino avanzate), però anche quello che vuoi fare tu lo è.


Ciao.
Marco.




Ovviamente questa soluzione+spiegazione di Marco è preferibile, però 
dai, c'eri quasi:




numeri = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 
34, 35, 36]


ritardo = [22, 0, 18, 34, 20, 7, 2, 1, 30, 22, 55, 47, 53, 49, 52, 38, 
12, 41, 29, 5, 11, 44, 26, 33, 40, 13, 50, 39, 4, 21, 45, 3, 53, 32, 
6, 25, 55]


numeri_in_ordine = []
ritardo_dec = sorted(ritardo, reverse=True)


posizione = 0
for ordine in range(len(ritardo_dec)):
    if ordine > 0 and ritardo_dec[ordine] == ritardo_dec[ordine - 1]:
    non_trovato = True
    while non_trovato:  # sostituito il True
    if ritardo_dec[ordine] == ritardo[posizione + 1]:
    # posizione = ritardo.index(ritardo_dec[posizione + 1])
    numeri_in_ordine.insert(ordine, numeri[posizione + 
1])  # aggiunto +1

    non_trovato = False
    else:
    posizione += 1
    else:
    posizione = ritardo.index(ritardo_dec[ordine])
    numeri_in_ordine.insert(ordine, numeri[posizione])

print()
print(numeri)
print(ritardo)
print()
print(numeri_in_ordine)
print(ritardo_dec)


ciao



Grazie Alessandro ho giusto scritto a Marco che resto incuriosito sul 
perchè la mia soluzione non funzionasse


praticamente dov'era l'errore? nel posizione mentre ci voleva posizione 
+1? la voglio provare passo passo per capire.


Grazie, anche perchè sono contento che la sensazione di essere vicino 
alla soluzione era fondata.


Che bella lista!!!


___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Dove sbaglio?

2020-04-30 Per discussione Carpediem


Il 30/04/2020 19:53, Marco Beri ha scritto:
On Thu, Apr 30, 2020 at 7:45 PM Carpediem > wrote:


Il 30/04/2020 18:54, Marco Beri ha scritto:

On Thu, Apr 30, 2020 at 6:18 PM Carpediem mailto:i.carped...@tiscali.it>> wrote:

Grazie Alessandro. Mi hai fatto notare l'assenza
dell'istruzione break e
ora che l'ho inserita, il programma termina la sua esecuzione.

Purtroppo, non mi restituisce ciò che mi aspetto e continuo a
non capire
perchè. L'ordinamento che cerco, è in

relazione con l'indice dei numeri della lista di riferimento e
utilizzare il metodo sorted() per quel che ho visto, o
compreso, non mi
è di aiuto.

Partendo da questo:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
35, 36]

[22, 0, 18, 34, 20, 7, 2, 1, 30, 22, 55, 47, 53, 49, 52, 38,
12, 41, 29,
5, 11, 44, 26, 33, 40, 13, 50, 39, 4, 21, 45, 3, 53, 32, 6,
25, 55]

volevo ottenere questo:

[10, 36, 12, 32, .]

[55, 55, 53, 53, 52, ..]


Se guardi la documentazione di cosa fanno zip e sorted (che ha un
parametro reversed) vedrai che quello che vuoi fare è ottenibile
con poche istruzioni:

>>> riepilogo_numeri_singoli = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
...                             25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36]
>>>
>>> ritardo_numeri_singoli = [22, 0, 18, 34, 20, 7, 2, 1, 30,
22, 55, 47, 53, 49, 52, 38, 12, 41, 29, 5, 11, 44, 26, 33,
40, 13, 50, 39, 4, 21,
...                           45, 3, 53, 32, 6, 25, 55]
>>>
>>> ritardo_numeri_singoli_ordine_decrescente ,
numeri_singoli_in_ordine =
zip(*sorted(zip(ritardo_numeri_singoli,
riepilogo_numeri_singoli), reverse=True))
>>>
>>> ritardo_numeri_singoli_ordine_decrescente
(55, 55, 53, 53, 52, 50, 49, 47, 45, 44, 41, 40, 39, 38, 34,
33, 32, 30, 29, 26, 25, 22, 22, 21, 20, 18, 13, 12, 11, 7, 6,
5, 4, 3, 2, 1, 0)
>>>
>>> numeri_singoli_in_ordine
(36, 10, 32, 12, 14, 26, 13, 11, 30, 21, 17, 24, 27, 15, 3,
23, 33, 8, 18, 22, 35, 9, 0, 29, 4, 2, 25, 16, 20, 5, 34, 19,
28, 31, 6, 7, 1)
>>>


Ciao.
Marco.



Grazie per il tuo tempo Marco. Scoprire che tutto il casino che ho
scritto si può riassumere in una sola istruzione quasi mi
demoralizza. Tuttavia, il risultato che ottengo con ciò che mi

hai suggerito, non è ciò che voglio. il primo numero della lista
ritardo_numeri_singoli_in_ordine_decrescente è il numero 55 che
nella lista ritardo_numeri_singoli aveva indice 10 e in corrispondenza

dell'indice 10 della lista riepilogo_numeri_singoli c'è il numero
10 che dovrebbe essere il primo numero presente nella lista
numeri_singoli_in ordine. Il secondo 55 aveva indice 36 e quindi
il numero

corrispondente con tale indice nella lista
riepilogo_numeri_singoli (il 36) dovrebbe essere il secondo numero
presente nella nuova lista e così via. Quindi [10, 36, 12, 32 ]

La tua soluzione mi rende invece un risultato diverso. Molto
probabilmente l'intenzione di ciò che voglio ottenere è stata da
me espressa poco chiaramente.

L'istruzione sort con reverse = True l'avevo usata anche io per
l'ordine decrescente ma l'Istruzione zip è invece a me totalmente
sconosciuta. Cercherò di capirci qualcosa.

E' comunque utilizzabile per ciò che mi serve? In caso affermativo
vedere l'istruzione che rende il risultato corretto mi
faciliterebbe molto a comprendere il suo funzionamento.

Se ti fosse possibile, sono certo ne troverei giovamento.


La funzione zip fa questo:

>>> list(zip([1,2,3], ['a', 'b', 'c']))
[(1, 'a'), (2, 'b'), (3, 'c')]


Passandogli un parametro con l'* in pratica gli facciamo fare il 
contrario:


>>> list(zip(*[(1, 'a'), (2, 'b'), (3, 'c')]))
[(1, 2, 3), ('a', 'b', 'c')]


Ma nel tuo caso lei fa il suo dovere, dobbiamo invece modificare il 
comportamento della funzione sorted:


>>> ritardo_numeri_singoli_ordine_decrescente ,
numeri_singoli_in_ordine = zip(*sorted(zip(ritardo_numeri_singoli,
riepilogo_numeri_singoli), key=lambda x:(x[0],-x[1]), reverse=True))
>>> ritardo_numeri_singoli_ordine_decrescente
(55, 55, 53, 53, 52, 50, 49, 47, 45, 44, 41, 40, 39, 38, 34, 33,
32, 30, 29, 26, 25, 22, 22, 21, 20, 18, 13, 12, 11, 7, 6, 5, 4, 3,
2, 1, 0)
>>> numeri_singoli_in_ordine
(10, 36, 12, 32, 14, 26, 13, 11, 30, 21, 17, 24, 27, 15, 3, 23,
33, 8, 18, 22, 35, 0, 9, 29, 4, 2, 25, 16, 20, 5, 34, 19, 28, 31,
6, 7, 1)


In pratica diciamo alla funzione sorted di 

Re: [Python] Dove sbaglio?

2020-04-30 Per discussione Alessandro T.

Il 30/04/20 19:53, Marco Beri ha scritto:

[...]

La funzione zip fa questo:

>>> list(zip([1,2,3], ['a', 'b', 'c']))
[(1, 'a'), (2, 'b'), (3, 'c')]


Passandogli un parametro con l'* in pratica gli facciamo fare il 
contrario:


>>> list(zip(*[(1, 'a'), (2, 'b'), (3, 'c')]))
[(1, 2, 3), ('a', 'b', 'c')]


Ma nel tuo caso lei fa il suo dovere, dobbiamo invece modificare il 
comportamento della funzione sorted:


>>> ritardo_numeri_singoli_ordine_decrescente ,
numeri_singoli_in_ordine = zip(*sorted(zip(ritardo_numeri_singoli,
riepilogo_numeri_singoli), key=lambda x:(x[0],-x[1]), reverse=True))
>>> ritardo_numeri_singoli_ordine_decrescente
(55, 55, 53, 53, 52, 50, 49, 47, 45, 44, 41, 40, 39, 38, 34, 33,
32, 30, 29, 26, 25, 22, 22, 21, 20, 18, 13, 12, 11, 7, 6, 5, 4, 3,
2, 1, 0)
>>> numeri_singoli_in_ordine
(10, 36, 12, 32, 14, 26, 13, 11, 30, 21, 17, 24, 27, 15, 3, 23,
33, 8, 18, 22, 35, 0, 9, 29, 4, 2, 25, 16, 20, 5, 34, 19, 28, 31,
6, 7, 1)


In pratica diciamo alla funzione sorted di usare per l'ordinamento 
inverso il primo numero così com'è (il ritardo) e il secondo numero al 
contrario.
In alternativa potevamo dirgli di non fare l'ordine inverso e 
invertire il primo, il risultato non cambia:


>>> ritardo_numeri_singoli_ordine_decrescente ,
numeri_singoli_in_ordine = zip(*sorted(zip(ritardo_numeri_singoli,
riepilogo_numeri_singoli), key=lambda x:(-x[0],x[1])))
>>> ritardo_numeri_singoli_ordine_decrescente
(55, 55, 53, 53, 52, 50, 49, 47, 45, 44, 41, 40, 39, 38, 34, 33,
32, 30, 29, 26, 25, 22, 22, 21, 20, 18, 13, 12, 11, 7, 6, 5, 4, 3,
2, 1, 0)
>>> numeri_singoli_in_ordine
(10, 36, 12, 32, 14, 26, 13, 11, 30, 21, 17, 24, 27, 15, 3, 23,
33, 8, 18, 22, 35, 0, 9, 29, 4, 2, 25, 16, 20, 5, 34, 19, 28, 31,
6, 7, 1)


Ok, confesso che è un po' complicato (le funzioni lambda sono un 
pochino avanzate), però anche quello che vuoi fare tu lo è.


Ciao.
Marco.




Ovviamente questa soluzione+spiegazione di Marco è preferibile, però 
dai, c'eri quasi:




numeri = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 
18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]


ritardo = [22, 0, 18, 34, 20, 7, 2, 1, 30, 22, 55, 47, 53, 49, 52, 38, 
12, 41, 29, 5, 11, 44, 26, 33, 40, 13, 50, 39, 4, 21, 45, 3, 53, 32, 6, 
25, 55]


numeri_in_ordine = []
ritardo_dec = sorted(ritardo, reverse=True)


posizione = 0
for ordine in range(len(ritardo_dec)):
    if ordine > 0 and ritardo_dec[ordine] == ritardo_dec[ordine - 1]:
    non_trovato = True
    while non_trovato:  # sostituito il True
    if ritardo_dec[ordine] == ritardo[posizione + 1]:
    # posizione = ritardo.index(ritardo_dec[posizione + 1])
    numeri_in_ordine.insert(ordine, numeri[posizione + 1])  
# aggiunto +1

    non_trovato = False
    else:
    posizione += 1
    else:
    posizione = ritardo.index(ritardo_dec[ordine])
    numeri_in_ordine.insert(ordine, numeri[posizione])

print()
print(numeri)
print(ritardo)
print()
print(numeri_in_ordine)
print(ritardo_dec)


ciao

--
Alessandro T.

R: Perché leggiamo dall'alto al basso e da sinistra a destra.
D: Perché dovrei iniziare la risposta all'e-mail dopo il testo citato?

___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Dove sbaglio?

2020-04-30 Per discussione Marco Beri
On Thu, Apr 30, 2020 at 7:45 PM Carpediem  wrote:

> Il 30/04/2020 18:54, Marco Beri ha scritto:
>
> On Thu, Apr 30, 2020 at 6:18 PM Carpediem  wrote:
>
>> Grazie Alessandro. Mi hai fatto notare l'assenza dell'istruzione break e
>> ora che l'ho inserita, il programma termina la sua esecuzione.
>>
>> Purtroppo, non mi restituisce ciò che mi aspetto e continuo a non capire
>> perchè. L'ordinamento che cerco, è in
>>
>> relazione con l'indice dei numeri della lista di riferimento e
>> utilizzare il metodo sorted() per quel che ho visto, o compreso, non mi
>> è di aiuto.
>>
>> Partendo da questo:
>>
>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
>> 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
>>
>> [22, 0, 18, 34, 20, 7, 2, 1, 30, 22, 55, 47, 53, 49, 52, 38, 12, 41, 29,
>> 5, 11, 44, 26, 33, 40, 13, 50, 39, 4, 21, 45, 3, 53, 32, 6, 25, 55]
>>
>> volevo ottenere questo:
>>
>> [10, 36, 12, 32, .]
>>
>> [55, 55, 53, 53, 52, ..]
>>
>
> Se guardi la documentazione di cosa fanno zip e sorted (che ha un
> parametro reversed) vedrai che quello che vuoi fare è ottenibile con poche
> istruzioni:
>
> >>> riepilogo_numeri_singoli = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
> 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
> ... 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
> 35, 36]
> >>>
> >>> ritardo_numeri_singoli = [22, 0, 18, 34, 20, 7, 2, 1, 30, 22, 55, 47,
> 53, 49, 52, 38, 12, 41, 29, 5, 11, 44, 26, 33, 40, 13, 50, 39, 4, 21,
> ...   45, 3, 53, 32, 6, 25, 55]
> >>>
> >>> ritardo_numeri_singoli_ordine_decrescente , numeri_singoli_in_ordine =
> zip(*sorted(zip(ritardo_numeri_singoli, riepilogo_numeri_singoli),
> reverse=True))
> >>>
> >>> ritardo_numeri_singoli_ordine_decrescente
> (55, 55, 53, 53, 52, 50, 49, 47, 45, 44, 41, 40, 39, 38, 34, 33, 32, 30,
> 29, 26, 25, 22, 22, 21, 20, 18, 13, 12, 11, 7, 6, 5, 4, 3, 2, 1, 0)
> >>>
> >>> numeri_singoli_in_ordine
> (36, 10, 32, 12, 14, 26, 13, 11, 30, 21, 17, 24, 27, 15, 3, 23, 33, 8, 18,
> 22, 35, 9, 0, 29, 4, 2, 25, 16, 20, 5, 34, 19, 28, 31, 6, 7, 1)
> >>>
>
>
> Ciao.
> Marco.
>
>
> Grazie per il tuo tempo Marco. Scoprire che tutto il casino che ho scritto
> si può riassumere in una sola istruzione quasi mi demoralizza. Tuttavia, il
> risultato che ottengo con ciò che mi
>
> hai suggerito, non è ciò che voglio. il primo numero della lista
> ritardo_numeri_singoli_in_ordine_decrescente è il numero 55 che nella lista
> ritardo_numeri_singoli aveva indice 10 e in corrispondenza
>
> dell'indice 10 della lista riepilogo_numeri_singoli c'è il numero 10 che
> dovrebbe essere il primo numero presente nella lista numeri_singoli_in
> ordine. Il secondo 55 aveva indice 36 e quindi il numero
>
> corrispondente con tale indice nella lista riepilogo_numeri_singoli (il
> 36) dovrebbe essere il secondo numero presente nella nuova lista e così
> via. Quindi [10, 36, 12, 32 ]
>
> La tua soluzione mi rende invece un risultato diverso. Molto probabilmente
> l'intenzione di ciò che voglio ottenere è stata da me espressa poco
> chiaramente.
>
> L'istruzione sort con reverse = True l'avevo usata anche io per l'ordine
> decrescente ma l'Istruzione zip è invece a me totalmente sconosciuta.
> Cercherò di capirci qualcosa.
>
> E' comunque utilizzabile per ciò che mi serve? In caso affermativo vedere
> l'istruzione che rende il risultato corretto mi faciliterebbe molto a
> comprendere il suo funzionamento.
>
> Se ti fosse possibile, sono certo ne troverei giovamento.
>

La funzione zip fa questo:

>>> list(zip([1,2,3], ['a', 'b', 'c']))
[(1, 'a'), (2, 'b'), (3, 'c')]


Passandogli un parametro con l'* in pratica gli facciamo fare il contrario:

>>> list(zip(*[(1, 'a'), (2, 'b'), (3, 'c')]))
[(1, 2, 3), ('a', 'b', 'c')]


Ma nel tuo caso lei fa il suo dovere, dobbiamo invece modificare il
comportamento della funzione sorted:

>>> ritardo_numeri_singoli_ordine_decrescente , numeri_singoli_in_ordine =
zip(*sorted(zip(ritardo_numeri_singoli, riepilogo_numeri_singoli), key=lambda
x:(x[0],-x[1]), reverse=True))
>>> ritardo_numeri_singoli_ordine_decrescente
(55, 55, 53, 53, 52, 50, 49, 47, 45, 44, 41, 40, 39, 38, 34, 33, 32, 30,
29, 26, 25, 22, 22, 21, 20, 18, 13, 12, 11, 7, 6, 5, 4, 3, 2, 1, 0)
>>> numeri_singoli_in_ordine
(10, 36, 12, 32, 14, 26, 13, 11, 30, 21, 17, 24, 27, 15, 3, 23, 33, 8, 18,
22, 35, 0, 9, 29, 4, 2, 25, 16, 20, 5, 34, 19, 28, 31, 6, 7, 1)


In pratica diciamo alla funzione sorted di usare per l'ordinamento inverso
il primo numero così com'è (il ritardo) e il secondo numero al contrario.
In alternativa potevamo dirgli di non fare l'ordine inverso e invertire il
primo, il risultato non cambia:

>>> ritardo_numeri_singoli_ordine_decrescente , numeri_singoli_in_ordine =
zip(*sorted(zip(ritardo_numeri_singoli, riepilogo_numeri_singoli), key=lambda
x:(-x[0],x[1])))
>>> ritardo_numeri_singoli_ordine_decrescente
(55, 55, 53, 53, 52, 50, 49, 47, 45, 44, 41, 40, 39, 38, 34, 

Re: [Python] Dove sbaglio?

2020-04-30 Per discussione Carpediem


Il 30/04/2020 18:54, Marco Beri ha scritto:
On Thu, Apr 30, 2020 at 6:18 PM Carpediem > wrote:


Grazie Alessandro. Mi hai fatto notare l'assenza dell'istruzione
break e
ora che l'ho inserita, il programma termina la sua esecuzione.

Purtroppo, non mi restituisce ciò che mi aspetto e continuo a non
capire
perchè. L'ordinamento che cerco, è in

relazione con l'indice dei numeri della lista di riferimento e
utilizzare il metodo sorted() per quel che ho visto, o compreso,
non mi
è di aiuto.

Partendo da questo:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]

[22, 0, 18, 34, 20, 7, 2, 1, 30, 22, 55, 47, 53, 49, 52, 38, 12,
41, 29,
5, 11, 44, 26, 33, 40, 13, 50, 39, 4, 21, 45, 3, 53, 32, 6, 25, 55]

volevo ottenere questo:

[10, 36, 12, 32, .]

[55, 55, 53, 53, 52, ..]


Se guardi la documentazione di cosa fanno zip e sorted (che ha un 
parametro reversed) vedrai che quello che vuoi fare è ottenibile con 
poche istruzioni:


>>> riepilogo_numeri_singoli = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
...                             25, 26, 27, 28, 29, 30, 31, 32,
33, 34, 35, 36]
>>>
>>> ritardo_numeri_singoli = [22, 0, 18, 34, 20, 7, 2, 1, 30, 22,
55, 47, 53, 49, 52, 38, 12, 41, 29, 5, 11, 44, 26, 33, 40, 13, 50,
39, 4, 21,
...                           45, 3, 53, 32, 6, 25, 55]
>>>
>>> ritardo_numeri_singoli_ordine_decrescente ,
numeri_singoli_in_ordine = zip(*sorted(zip(ritardo_numeri_singoli,
riepilogo_numeri_singoli), reverse=True))
>>>
>>> ritardo_numeri_singoli_ordine_decrescente
(55, 55, 53, 53, 52, 50, 49, 47, 45, 44, 41, 40, 39, 38, 34, 33,
32, 30, 29, 26, 25, 22, 22, 21, 20, 18, 13, 12, 11, 7, 6, 5, 4, 3,
2, 1, 0)
>>>
>>> numeri_singoli_in_ordine
(36, 10, 32, 12, 14, 26, 13, 11, 30, 21, 17, 24, 27, 15, 3, 23,
33, 8, 18, 22, 35, 9, 0, 29, 4, 2, 25, 16, 20, 5, 34, 19, 28, 31,
6, 7, 1)
>>>


Ciao.
Marco.



Grazie per il tuo tempo Marco. Scoprire che tutto il casino che ho 
scritto si può riassumere in una sola istruzione quasi mi demoralizza. 
Tuttavia, il risultato che ottengo con ciò che mi


hai suggerito, non è ciò che voglio. il primo numero della lista 
ritardo_numeri_singoli_in_ordine_decrescente è il numero 55 che nella 
lista ritardo_numeri_singoli aveva indice 10 e in corrispondenza


dell'indice 10 della lista riepilogo_numeri_singoli c'è il numero 10 che 
dovrebbe essere il primo numero presente nella lista numeri_singoli_in 
ordine. Il secondo 55 aveva indice 36 e quindi il numero


corrispondente con tale indice nella lista riepilogo_numeri_singoli (il 
36) dovrebbe essere il secondo numero presente nella nuova lista e così 
via. Quindi [10, 36, 12, 32 ]


La tua soluzione mi rende invece un risultato diverso. Molto 
probabilmente l'intenzione di ciò che voglio ottenere è stata da me 
espressa poco chiaramente.


L'istruzione sort con reverse = True l'avevo usata anche io per l'ordine 
decrescente ma l'Istruzione zip è invece a me totalmente sconosciuta. 
Cercherò di capirci qualcosa.


E' comunque utilizzabile per ciò che mi serve? In caso affermativo 
vedere l'istruzione che rende il risultato corretto mi faciliterebbe 
molto a comprendere il suo funzionamento.


Se ti fosse possibile, sono certo ne troverei giovamento.

Grazie infinite, mi hai messo su una per me nuova strada.

(Lo sapevo che tu potevi avere la risposta in tasca )


 Isidoro

___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Dove sbaglio?

2020-04-30 Per discussione Marco Beri
On Thu, Apr 30, 2020 at 6:18 PM Carpediem  wrote:

> Grazie Alessandro. Mi hai fatto notare l'assenza dell'istruzione break e
> ora che l'ho inserita, il programma termina la sua esecuzione.
>
> Purtroppo, non mi restituisce ciò che mi aspetto e continuo a non capire
> perchè. L'ordinamento che cerco, è in
>
> relazione con l'indice dei numeri della lista di riferimento e
> utilizzare il metodo sorted() per quel che ho visto, o compreso, non mi
> è di aiuto.
>
> Partendo da questo:
>
> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
> 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
>
> [22, 0, 18, 34, 20, 7, 2, 1, 30, 22, 55, 47, 53, 49, 52, 38, 12, 41, 29,
> 5, 11, 44, 26, 33, 40, 13, 50, 39, 4, 21, 45, 3, 53, 32, 6, 25, 55]
>
> volevo ottenere questo:
>
> [10, 36, 12, 32, .]
>
> [55, 55, 53, 53, 52, ..]
>

Se guardi la documentazione di cosa fanno zip e sorted (che ha un parametro
reversed) vedrai che quello che vuoi fare è ottenibile con poche istruzioni:

>>> riepilogo_numeri_singoli = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
... 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
36]
>>>
>>> ritardo_numeri_singoli = [22, 0, 18, 34, 20, 7, 2, 1, 30, 22, 55, 47,
53, 49, 52, 38, 12, 41, 29, 5, 11, 44, 26, 33, 40, 13, 50, 39, 4, 21,
...   45, 3, 53, 32, 6, 25, 55]
>>>
>>> ritardo_numeri_singoli_ordine_decrescente , numeri_singoli_in_ordine =
zip(*sorted(zip(ritardo_numeri_singoli, riepilogo_numeri_singoli),
reverse=True))
>>>
>>> ritardo_numeri_singoli_ordine_decrescente
(55, 55, 53, 53, 52, 50, 49, 47, 45, 44, 41, 40, 39, 38, 34, 33, 32, 30,
29, 26, 25, 22, 22, 21, 20, 18, 13, 12, 11, 7, 6, 5, 4, 3, 2, 1, 0)
>>>
>>> numeri_singoli_in_ordine
(36, 10, 32, 12, 14, 26, 13, 11, 30, 21, 17, 24, 27, 15, 3, 23, 33, 8, 18,
22, 35, 9, 0, 29, 4, 2, 25, 16, 20, 5, 34, 19, 28, 31, 6, 7, 1)
>>>


Ciao.
Marco.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Dove sbaglio?

2020-04-30 Per discussione Carpediem


Il 30/04/2020 15:05, Alessandro T. ha scritto:

Il 30/04/20 01:41, Marco Beri ha scritto:
On Thu, Apr 30, 2020 at 1:16 AM Carpediem > wrote:


    Un saluto a tutti e un grazie anticipato al volenteroso che avrà
    avuto la pazienza e la capacità di darmi una soluzione.

Stavo cercando di darti una mano ma poi ho realizzato lo scopo 
(credo) che c'è dietro al tuo script.


Siccome da giovane sono già passato da questa illusione ti do questo 
suggerimento:


https://www.frasicelebri.it/frase/ii-lotto-e-la-tassa-degli-imbecilli/


Lascia perdere, le palline non hanno memoria.

Ciao.
Marco.



Concordo.

Per la soluzione ti suggerisco di guardare dict(), zip() e sorted(); 
con una sola linea di codice risolvi il problema.

Nel merito: hai un ciclo `while True` senza alcuna clausola d'uscita.
Suggerimento: usa etichette più concise, ne beneficerà la lettura.

Ciao

Grazie Alessandro. Mi hai fatto notare l'assenza dell'istruzione break e 
ora che l'ho inserita, il programma termina la sua esecuzione.


Purtroppo, non mi restituisce ciò che mi aspetto e continuo a non capire 
perchè. L'ordinamento che cerco, è in


relazione con l'indice dei numeri della lista di riferimento e 
utilizzare il metodo sorted() per quel che ho visto, o compreso, non mi 
è di aiuto.


Partendo da questo:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]


[22, 0, 18, 34, 20, 7, 2, 1, 30, 22, 55, 47, 53, 49, 52, 38, 12, 41, 29, 
5, 11, 44, 26, 33, 40, 13, 50, 39, 4, 21, 45, 3, 53, 32, 6, 25, 55]


volevo ottenere questo:

[10, 36, 12, 32, .]

[55, 55, 53, 53, 52, ..]

e invece mi viene restituito questo:

[10, 1, 12, 28, 14, 26, 13, 11, 30, 21, 17, 24, 27, 15, 3, 23, 33, 8, 
18, 22, 35, 0, 21, 29, 4, 2, 25, 16, 20, 5, 34, 19, 28, 31, 6, 7, 1]
[55, 55, 53, 53, 52, 50, 49, 47, 45, 44, 41, 40, 39, 38, 34, 33, 32, 30, 
29, 26, 25, 22, 22, 21, 20, 18, 13, 12, 11, 7, 6, 5, 4, 3, 2, 1, 0]


In pratica, come se a comportarsi diversamente dal previsto sia il ciclo 
for. In realtà sono convinto che per le limitate conoscenze che ho


del linguaggio, questo sia comunque l'approccio giusto e sento di essere 
vicino alla soluzione ma mi sta sfuggendo qualcosa di stupido


(sul tipo dell'assenza dell'istruzione break) ma non individuo questo 
qualcosa. Il ciclo for, nel suo secondo passaggio, giunto a verificare 
l'ultimo indice (il 37 che corrisponde


al numero 55) avendo tra l'altro trovato corrispondenza con il numero 
cercato, dovrebbe inserire il numero 36 con indice 1 nella lista che si 
sta formando ed interrompersi


e invece mi inserisce il numero 1 senza apparente giustificazione.

Per le etichette hai pienamente ragione: nello scrivere il codice, mi 
sono incasinato da solo.



___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Dove sbaglio?

2020-04-30 Per discussione Carpediem

Caro Marco,

per me incidente chiuso. Sinceramente, diciamo che l'impressione l'hai 
data ma sono stato io il primo a ditri che considero la cosa non come 
tipica della persona.


Scuse accettate e sinceramente apprezzate. Ho tentato di risponderti con 
pacatezza ed educazione ma evidentemente in questo, non sono riuscito in 
toto visto che anche tu


ti sei sentito giudicato. Mi dispiace. Anche da parte mia non ce n'era 
l'intenzione.


Scusami anche tu.

(E magari la prossima volta aiutami a capirci qualcosa ... :-))

Alla prossima

Isidoro


Il 30/04/2020 16:37, Marco Beri ha scritto:
On Thu, Apr 30, 2020 at 4:20 PM Carpediem > wrote:


Evidentemente, anche io sono stato frettoloso nel giudicare.


Isidoro,
io non ho dato alcun giudizio su di te (e come avrei potuto?) ma solo 
sull'apparente scopo del tuo programma mettendoti in guardia 
sull'inutilità provata (questa sì) di battere il banco con l'informatica.


Ho anche aggiunto "(credo)" perché anche di quello non potevo essere 
certo.


Non era mia intenzione offenderti o darti impressione di averti 
giudicato. Se così è stato, me ne scuso.


Per il resto tu hai giudicato me e questa invece è stata una tua 
caduta di stile.


Ciao.
Marco.


___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Dove sbaglio?

2020-04-30 Per discussione Marco Beri
On Thu, Apr 30, 2020 at 4:20 PM Carpediem  wrote:

> Evidentemente, anche io sono stato frettoloso nel giudicare.
>

Isidoro,
io non ho dato alcun giudizio su di te (e come avrei potuto?) ma solo
sull'apparente scopo del tuo programma mettendoti in guardia sull'inutilità
provata (questa sì) di battere il banco con l'informatica.

Ho anche aggiunto "(credo)" perché anche di quello non potevo essere certo.

Non era mia intenzione offenderti o darti impressione di averti giudicato.
Se così è stato, me ne scuso.

Per il resto tu hai giudicato me e questa invece è stata una tua caduta di
stile.

Ciao.
Marco.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Dove sbaglio?

2020-04-30 Per discussione Carpediem
Buongiorno Marco, sono abbastanza avanti con l'età da poter presupporre 
di avere sulle spalle qualche primavera trascorsa in piu anche di chi, 
parlando di giovinezza al passato, lascia intendere di essere una 
persona mediamente matura.


Nella mia vita avrò giocato al totocalcio non più di una ventina di 
volte e l'unica volta che, nonostante l'esiguo numero di tentativi vinsi 
con il tredici, mi accaparrai la "cospicua" vincita di 5600 lire. Mai 
giocato al lotto, mai alla roulette, mai entrato in una sala giochi.


Non è per me. Il rispetto per i soldi che mi guadagno esclusivamente con 
il mio lavoro, mi ha sempre impedito persino di prendermi il vizio del  
fumare facendomi giudicare in questo caso, anche per altri motivi, come 
persona degna di commenti poco lusighieri il fumatore.


Ciò detto, da persona curiosa e incline ad apprendere, mi è capitato di 
appassionarmi a diverse cose e da autodidatta, con la testardaggine 
necessaria, ho imparato fino a fare anche di una di queste mie 
approfondite curiosità, la mia professione. Due anni fa, mi sono 
incrociato con il  linguaggio di programmazione Python ed essendo 
piuttosto scarsa la documentazione in lingua italiana, per testare 
quanto ritenevo di aver appreso, mi sono inventato problemi tentando di 
capire se e come sarebbe stato possibile risolverli.


Ho dovuto interrompere i progressi che stavo facendo e ho ripreso i miei 
appunti con molta difficoltà il mese scorso imbattendomi nell'ipotesi 
che ho descritto e cercando la soluzione nel codice che ho trascritto 
nella mia mail. Cercavo solo un aiuto per capire dove fosse il mio 
errore confidando nella capacità di persone che so di essere molto 
ferrate. Di certo, non mi stavo immaginando seduto con un PC tra le 
braccia al cospetto di un croupier.


Sinceramente, ciò che hai risposto non ha aggiunto nulla di nuovo a ciò 
che ho sempre pensato ma se a te piace trarre conclusioni e dare giudizi 
sulle persone senza conoscerle, fai pure. Citazioni sull'argomento ne 
avrei molte da farti visionare ma sono certo che la tua lapidaria 
risposta, sia stata solo una caduta di stile del momento.


Mi spiace di aver disturbato la quiete di chi, comunque, non è obbligato 
ad intervenire. Devo dire che quando ho letto: Marco Beri ha scritto: 
.. ho immaginato che la tua risposta mi sarebbe stata utile a 
comprendere il problema in cui mi sono imbattuto se non altro perchè 
conosco la tua firma avendo anche una tua pubblicazione a casa.


Evidentemente, anche io sono stato frettoloso nel giudicare.

Un saluto anche per te Marco e grazie comunque.

Isidoro


Il 30/04/2020 01:41, Marco Beri ha scritto:
On Thu, Apr 30, 2020 at 1:16 AM Carpediem > wrote:


Un saluto a tutti e un grazie anticipato al volenteroso che avrà
avuto la pazienza e la capacità di darmi una soluzione.

Stavo cercando di darti una mano ma poi ho realizzato lo scopo (credo) 
che c'è dietro al tuo script.


Siccome da giovane sono già passato da questa illusione ti do questo 
suggerimento:


https://www.frasicelebri.it/frase/ii-lotto-e-la-tassa-degli-imbecilli/


Lascia perdere, le palline non hanno memoria.

Ciao.
Marco.

___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] (senza oggetto)

2020-04-30 Per discussione Alessandro T.

Il 30/04/20 14:11, Marco Beri ha scritto:
On Thu, Apr 30, 2020 at 2:07 PM Paolo Miniussi 
mailto:miniussipa...@gmail.com>> wrote:


Buongiorno
molto piacere Paolo. Sono iscritto alla list di Python e ho visto
che in questi giorni state trattando l'argomento relativo al
conteggio delle parole.
Ho un problema specifico relativo all'estrazione di alcune
stringhe che seguono altre stringhe.
In pratica ho un testo tipo questo:
lunghezza legno: 1000 cm
peso del tronco: 34 kg
tempo di lavorazione: 11 ore 57 minuti

Praticamente devo estrarre ciò che viene dopo le singole
definizioni. Quindi per la prima riga devo prelevare la stringa
"1000 cm" , per la seconda "34 kg" e via così (poi dovrò
eventualmente capire se prendere solo il valore numero oppure
tutta la stringa).
Ho approcciato il problema usando lo slice e quindi tagliando le
porzioni di stringa desiderate per poi successivamente
trasformarle in variabili.
Il problema è che il mio file di log che contiene queste
informazioni da estrarre può ovviamente variare di lunghezza e
quindi lo slice va a farsi benedire.
Per spiegarmi, il valore della "lunghezza legno:" invece di essere
1000 cm può diventare 123000 cm quindi il taglio in slice mi
troncherebbe il dato.
Stavo cercando di cambiare approccio e quindi di prelevare i dati
prendendo tutto quello che viene dopo una data stringa e prima di
quella successiva.
Avete qualche suggerimento?


La soluzione per te sono le regular expression:


>>> testo = """lunghezza legno: 1000 cm
... peso del tronco: 34 kg
... tempo di lavorazione: 11 ore 57 minuti"""
>>> testo
'lunghezza legno: 1000 cm\npeso del tronco: 34 kg\ntempo di
lavorazione: 11 ore 57 minuti'
>>> import re
>>> re.findall(r"\s(\d+)\b\s*(\w+)", testo)
[('1000', 'cm'), ('34', 'kg'), ('11', 'ore'), ('57', 'minuti')]



Potrei consigliarti un buon testo sulle regex ma sarei in conflitto di 
interessi (e poi trovi comunque una marea di tutorial su web) :-D


Ciao.
Marco.



Elegante come soluzione però incorretta perché il "tempo di lavorazione" 
viene spezzato in "11 ore" e "57 min". Forse uno split() sulla singola 
riga è più indicato.


ciao

--
Alessandro T.

R: Perché leggiamo dall'alto al basso e da sinistra a destra.
D: Perché dovrei iniziare la risposta all'e-mail dopo il testo citato?

___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] (senza oggetto)

2020-04-30 Per discussione Marco Beri
On Thu, Apr 30, 2020 at 3:21 PM Alessandro T.  wrote:

> Il 30/04/20 14:11, Marco Beri ha scritto:
>
> > La soluzione per te sono le regular expression:
> >
> >
> > >>> testo = """lunghezza legno: 1000 cm
> > ... peso del tronco: 34 kg
> > ... tempo di lavorazione: 11 ore 57 minuti"""
> > >>> testo
> > 'lunghezza legno: 1000 cm\npeso del tronco: 34 kg\ntempo di
> > lavorazione: 11 ore 57 minuti'
> > >>> import re
> > >>> re.findall(r"\s(\d+)\b\s*(\w+)", testo)
> > [('1000', 'cm'), ('34', 'kg'), ('11', 'ore'), ('57', 'minuti')]
> >
> >
> >
> > Potrei consigliarti un buon testo sulle regex ma sarei in conflitto di
> > interessi (e poi trovi comunque una marea di tutorial su web) :-D
> >
> > Ciao.
> > Marco.
> >
>
> Elegante come soluzione però incorretta perché il "tempo di lavorazione"
> viene spezzato in "11 ore" e "57 min". Forse uno split() sulla singola
> riga è più indicato.
>

Pronti! :-)

>>> import re
>>> testo = """lunghezza legno: 1000 cm
... peso del tronco: 34 kg
... tempo di lavorazione: 11 ore 57 minuti"""
>>> re.findall(r"\s(\d+)\s*(\w+)(\s\d+\s\w+)?", testo)
[('1000', 'cm', ''), ('34', 'kg', ''), ('11', 'ore', ' 57 minuti')]


Ciao.
Marco.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Dove sbaglio?

2020-04-30 Per discussione Alessandro T.

Il 30/04/20 01:41, Marco Beri ha scritto:
On Thu, Apr 30, 2020 at 1:16 AM Carpediem > wrote:


Un saluto a tutti e un grazie anticipato al volenteroso che avrà
avuto la pazienza e la capacità di darmi una soluzione.

Stavo cercando di darti una mano ma poi ho realizzato lo scopo (credo) 
che c'è dietro al tuo script.


Siccome da giovane sono già passato da questa illusione ti do questo 
suggerimento:


https://www.frasicelebri.it/frase/ii-lotto-e-la-tassa-degli-imbecilli/


Lascia perdere, le palline non hanno memoria.

Ciao.
Marco.



Concordo.

Per la soluzione ti suggerisco di guardare dict(), zip() e sorted(); con 
una sola linea di codice risolvi il problema.

Nel merito: hai un ciclo `while True` senza alcuna clausola d'uscita.
Suggerimento: usa etichette più concise, ne beneficerà la lettura.

Ciao

--
Alessandro T.

R: Perché leggiamo dall'alto al basso e da sinistra a destra.
D: Perché dovrei iniziare la risposta all'e-mail dopo il testo citato?

___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Dove sbaglio?

2020-04-30 Per discussione Daniele Zambelli
Il giorno gio 30 apr 2020 alle ore 01:42 Marco Beri
 ha scritto:
> [...]
> Stavo cercando di darti una mano ma poi ho realizzato lo scopo (credo) che 
> c'è dietro al tuo script.
>
> Siccome da giovane sono già passato da questa illusione ti do questo 
> suggerimento:
>
> https://www.frasicelebri.it/frase/ii-lotto-e-la-tassa-degli-imbecilli/

Concordo con Marco.

Dal punto di vista del programma: secondo me l'impostazione che gli
hai dato non è adatta.

Suggerimento:

- Riunisci i numeri in una lista di coppie (studia l'iteratore zip);
- Studia il metodo sort.

Ciao.

-- 

Daniele

www.fugamatematica.blogspot.com

giusto!
nel verso
forse è perché non guardiamo le cose
Quando non ci capiamo,
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] (senza oggetto)

2020-04-30 Per discussione Marco Beri
On Thu, Apr 30, 2020 at 2:07 PM Paolo Miniussi 
wrote:

> Buongiorno
> molto piacere Paolo. Sono iscritto alla list di Python e ho visto che in
> questi giorni state trattando l'argomento relativo al conteggio delle
> parole.
> Ho un problema specifico relativo all'estrazione di alcune stringhe che
> seguono altre stringhe.
> In pratica ho un testo tipo questo:
> lunghezza legno: 1000 cm
> peso del tronco: 34 kg
> tempo di lavorazione: 11 ore 57 minuti
>
> Praticamente devo estrarre ciò che viene dopo le singole definizioni.
> Quindi per la prima riga devo prelevare la stringa "1000 cm" , per la
> seconda "34 kg" e via così (poi dovrò eventualmente capire se prendere solo
> il valore numero oppure tutta la stringa).
> Ho approcciato il problema usando lo slice e quindi tagliando le porzioni
> di stringa desiderate per poi successivamente trasformarle in variabili.
> Il problema è che il mio file di log che contiene queste informazioni da
> estrarre può ovviamente variare di lunghezza e quindi lo slice va a farsi
> benedire.
> Per spiegarmi, il valore della "lunghezza legno:" invece di essere 1000 cm
> può diventare 123000 cm quindi il taglio in slice mi troncherebbe il dato.
> Stavo cercando di cambiare approccio e quindi di prelevare i dati
> prendendo tutto quello che viene dopo una data stringa e prima di quella
> successiva.
> Avete qualche suggerimento?
>

La soluzione per te sono le regular expression:


>>> testo = """lunghezza legno: 1000 cm
... peso del tronco: 34 kg
... tempo di lavorazione: 11 ore 57 minuti"""
>>> testo
'lunghezza legno: 1000 cm\npeso del tronco: 34 kg\ntempo di lavorazione: 11
ore 57 minuti'
>>> import re
>>> re.findall(r"\s(\d+)\b\s*(\w+)", testo)
[('1000', 'cm'), ('34', 'kg'), ('11', 'ore'), ('57', 'minuti')]



Potrei consigliarti un buon testo sulle regex ma sarei in conflitto di
interessi (e poi trovi comunque una marea di tutorial su web) :-D

Ciao.
Marco.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] (senza oggetto)

2020-04-30 Per discussione Giordano Salvadori
Ciao

Prendi tutto quello oltre i : tramite la funzione split

Salvadog

Il giorno giovedì 30 aprile 2020, Paolo Miniussi 
ha scritto:

> Buongiorno
> molto piacere Paolo. Sono iscritto alla list di Python e ho visto che in
> questi giorni state trattando l'argomento relativo al conteggio delle
> parole.
> Ho un problema specifico relativo all'estrazione di alcune stringhe che
> seguono altre stringhe.
> In pratica ho un testo tipo questo:
> lunghezza legno: 1000 cm
> peso del tronco: 34 kg
> tempo di lavorazione: 11 ore 57 minuti
>
> Praticamente devo estrarre ciò che viene dopo le singole definizioni.
> Quindi per la prima riga devo prelevare la stringa "1000 cm" , per la
> seconda "34 kg" e via così (poi dovrò eventualmente capire se prendere solo
> il valore numero oppure tutta la stringa).
> Ho approcciato il problema usando lo slice e quindi tagliando le porzioni
> di stringa desiderate per poi successivamente trasformarle in variabili.
> Il problema è che il mio file di log che contiene queste informazioni da
> estrarre può ovviamente variare di lunghezza e quindi lo slice va a farsi
> benedire.
> Per spiegarmi, il valore della "lunghezza legno:" invece di essere 1000 cm
> può diventare 123000 cm quindi il taglio in slice mi troncherebbe il dato.
> Stavo cercando di cambiare approccio e quindi di prelevare i dati
> prendendo tutto quello che viene dopo una data stringa e prima di quella
> successiva.
> Avete qualche suggerimento?
> Grazie mille
> Paolo
>
> --
> Questo messaggio e i suoi allegati sono indirizzati esclusivamente alle
> persone indicate. La diffusione, copia o qualsiasi altra azione derivante
> dalla conoscenza di queste informazioni sono rigorosamente vietate. Qualora
> abbiate ricevuto questo documento per errore siete cortesemente pregati di
> darne immediata comunicazione al mittente e di provvedere alla sua
> distruzione, Grazie.
>
> *This e-mail and any attachments** is **confidential and may contain
> privileged information intended for the addressee(s) only. Dissemination,
> copying, printing or use by anybody else is unauthorised. If you are not
> the intended recipient, please delete this message and any attachments and
> advise the sender by return e-mail, Thanks.*
> *Rispetta l'ambiente. Non stampare questa mail se non è necessario.*
>
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


[Python] (senza oggetto)

2020-04-30 Per discussione Paolo Miniussi
Buongiorno
molto piacere Paolo. Sono iscritto alla list di Python e ho visto che in
questi giorni state trattando l'argomento relativo al conteggio delle
parole.
Ho un problema specifico relativo all'estrazione di alcune stringhe che
seguono altre stringhe.
In pratica ho un testo tipo questo:
lunghezza legno: 1000 cm
peso del tronco: 34 kg
tempo di lavorazione: 11 ore 57 minuti

Praticamente devo estrarre ciò che viene dopo le singole definizioni.
Quindi per la prima riga devo prelevare la stringa "1000 cm" , per la
seconda "34 kg" e via così (poi dovrò eventualmente capire se prendere solo
il valore numero oppure tutta la stringa).
Ho approcciato il problema usando lo slice e quindi tagliando le porzioni
di stringa desiderate per poi successivamente trasformarle in variabili.
Il problema è che il mio file di log che contiene queste informazioni da
estrarre può ovviamente variare di lunghezza e quindi lo slice va a farsi
benedire.
Per spiegarmi, il valore della "lunghezza legno:" invece di essere 1000 cm
può diventare 123000 cm quindi il taglio in slice mi troncherebbe il dato.
Stavo cercando di cambiare approccio e quindi di prelevare i dati prendendo
tutto quello che viene dopo una data stringa e prima di quella successiva.
Avete qualche suggerimento?
Grazie mille
Paolo

-- 
Questo messaggio e i suoi allegati sono indirizzati esclusivamente alle
persone indicate. La diffusione, copia o qualsiasi altra azione derivante
dalla conoscenza di queste informazioni sono rigorosamente vietate. Qualora
abbiate ricevuto questo documento per errore siete cortesemente pregati di
darne immediata comunicazione al mittente e di provvedere alla sua
distruzione, Grazie.

*This e-mail and any attachments** is **confidential and may contain
privileged information intended for the addressee(s) only. Dissemination,
copying, printing or use by anybody else is unauthorised. If you are not
the intended recipient, please delete this message and any attachments and
advise the sender by return e-mail, Thanks.*
*Rispetta l'ambiente. Non stampare questa mail se non è necessario.*
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Contare parole

2020-04-30 Per discussione Marco Beri
On Thu, 30 Apr 2020, 09:22 Pietro Brunetti,  wrote:

> testo = "Era una notte buia e tempestosa, molto tempestosa"
>
> parole = testo.split()
>

Meglio così:

import re
parole = list(re.findall(r"\b\w+\b", testo))

> 


Non penso ci siano underscore o cifre nel testo.

Ciao.
Marco.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Contare parole

2020-04-30 Per discussione Mara Leone
Gentilissimi!
Grazie grazie

Il giorno gio 30 apr 2020 alle 09:22 Pietro Brunetti 
ha scritto:

> testo = "Era una notte buia e tempestosa, molto tempestosa"
>
> parole = testo.split()
>
> from collections import Counter
>
> conta_parole = Counter(parole)
>
>
> Nota: soluzione con difetti, per esempio la punteggiatura va tolta.
> ___
> Python mailing list
> Python@lists.python.it
> https://lists.python.it/mailman/listinfo/python
>
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Contare parole

2020-04-30 Per discussione Pietro Brunetti
testo = "Era una notte buia e tempestosa, molto tempestosa"

parole = testo.split()

from collections import Counter

conta_parole = Counter(parole)


Nota: soluzione con difetti, per esempio la punteggiatura va tolta.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python