Forum >> Principianti >> Urgente mini funzione per università

Pagina: 1

Buonasera a tutti, mi presento sono nuovo in questo forum. Sono un ragazzo di 21 anni che sta studiando per la prima volta informatica all'università. Non ho mai studiato informatica ne programmazione, quindi ho delle lacune nonostante il mio impegno e la passione per la materia. Ci hanno assegnato un'esercizio da svolgere per casa, dove bisogna creare una funzione (anche elementare per molti di voi), ma abbastanza difficile per me. Ho provato a scriverla e so che ci sono vicino, ma il fatto è che sicuramente ho sbagliato qualcosa, in quanto non mi torna come dovrebbe. Per farvi capire meglio vi allego l'esercizio da svolgere, degli esempi di esercizio risolto e la funzione scritta da me. Spero davvero che qualcuno di voi possa aiutarmi entro lunedì(giorno della consegna). Ringrazio anticipatamente chiunque risponderà per aiutarmi. Buon proseguimento a tutti.
Ciao bunnywilly e benvenuto nel magico mondo di :py:.

Nel codice che proponi commetti un errore di fondo o in fondo se preferisci. ;)

Quelle che stai trattando sono date e non semplici numeri. Quando applichi lo slice analizzando i singoli oggetti, non potrai ottenere mai il risultato sperato. Finché confronti anni e mesi non ci sono grossi problemi, ma quando poi vai al giorno iniziano le incongruenze.

Se tu hai una data come la seconda nella lista, 22032015, che dovrebbe arrivare fino in fondo nei tuoi vari cicli if per essere scomposta come richiesto dall'esercizio perché maggiore di d1 ma minore di d2, col tuo codice non otterrai il risultato sperato. Quando scrivi x[0:2] >= d1[0:2] e x[0:2] <= d2[0:2] nascono i problemi, perché nella sua interezza il 22032015 è minore del 10112015, ma ovviamente dopo l'operazione di slicing il 22 non sarà mai minore o uguale a 10.

Esistono diverse soluzioni per risolvere il problema come introdurre alcuni and nel tuo codice, oppure trattare la stringa come una data. Con un codice simile a quello sotto ottieni esattamente quanto vuoi, ma ti invito a capirlo e a fare le opportune verifiche ed approfondimenti, altrimenti il tuo professore ti scopre subito se ti chiede di spiegargli il funzionamento ed, a ragione, s'incazza pure. Ma anche se non si incazzasse nessuno, non ha senso copiare l'esercizio senza capirlo, non è lo scopo per cui stai studiando.

# Oggetti iniziali
lst = ['24012014','22032015','03022015','15122014','11112015']
d1 = '22022014'
d2 = '10112015'

import time
def mese(lista,d1,d2):
    global lst
    lst = []
    for d in lista:
        data = time.strptime(d,"%d%m%Y")
        if time.strptime(d1,"%d%m%Y") <= data <= time.strptime(d2,"%d%m%Y"):
            lst.append(data.tm_mday)
            lst.append(data.tm_mon)
            lst.append(data.tm_year)
        else:
            lst.append(d)
    return lst

#Chiama la funzione 
mese(lst,d1,d2)

# Printa la lista
print lst

#Risultato
['24012014', 22, 3, 2015, 3, 2, 2015, 15, 12, 2014, '11112015']

Ciao.
Daniele


Pagina: 1



Esegui il login per scrivere una risposta.