Forum
>>
Principianti
>>
Urgente mini funzione per università
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da bunnywilly |
2015-10-10 15:26:02 - Urgente mini funzione per università
|
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.
|
|
Scritto da Daniele aka Palmux |
2015-10-10 19:15:44 - Re: Urgente mini funzione per università
|
Ciao bunnywilly e benvenuto nel magico mondo di .
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.