[Python] Richiesta aiuto per soluzione

Alessandro Re ale a ale-re.net
Gio 2 Apr 2015 10:52:54 CEST


2015-04-02 10:36 GMT+02:00 Carpediem <i.carpediem a tiscali.it>:
>> Sono alle primissime armi con python e non conosco la funzione divmod
>> A giudicare dall'entusiasmo che altri hanno manifestato al tuo suggerimento,
>> ritengo opportuno cercare notizie in proposito. grazie

divmod non fa altro che fare // e % assieme:

8 // 5 # == 1
8 % 5 # == 3
quoz, resto = divmod(8, 5) # == (1, 3)

visto che divisione intera e resto sono due operatori accoppiati, mi
sembra logico avere una funzione che restituisca entrambi con un solo
calcolo, da qui il mio entusiasmo :)

Comunque, quando dici:

> Sono a conoscenza dell'operatore modulo ma i vari passaggi di divisione
> e moltiplicazione in realtà non hanno lo specifico compito di ottenere un
> numero intero ma di trasformare ad esempio, un alto numero di minuti in
> un numero che rientri nel normale limite per giungere alla grandezza
> superiore immediatamente successiva.

quello che capisco è "faccio l'operazione inversa per calcolare il
modulo" :D Poi magari non ho capito bene cosa intendi, ma dal tuo
codice mi pare di capire che hai bisogno del modulo.

Cioé, se hai 100 minuti, tu vuoi ottenere la conversione in Q ore e R
minuti, cioé 1 ora e 40 minuti (1 ora * 60 minuti + 40 minuti = 100
minuti), che è esattamente l'operatore modulo.

In ogni caso, ecco come farei:

def converti_secondi_in_roba_varia(T):
    minuti, secondi = divmod(T, 60)
    ore, minuti = divmod(minuti, 60)
    giorni, ore = divmod(ore, 24)
    anni, giorni = divmod(giorni, 365)
    secoli, anni = divmod(anni, 100)
    return secoli, anni, giorni, ore, minuti, secondi

converti_secondi_in_roba_varia(12345678) # (0, 0, 142, 21, 21, 18)

Mancano le settimane, in realtà, mentre i mesi non sono determinabili
correttamente perché cambiano di lunghezza. Però ho verificato con
wolframalpha e sembra funzionale:

http://www.wolframalpha.com/input/?i=12345678+seconds

Ciauz
~Ale


Maggiori informazioni sulla lista Python