Forum
>>
Principianti
>>
Ho iniziato da poco (seguito corso on line), non sono un programmatore e non riesco a correggere il codice che ho scritto. Qualcuno può aiutarmi?
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da Ghost_71 |
2023-03-30 12:23:17 - Ho iniziato da poco (seguito corso on line), non sono un programmatore e non riesco a correggere il codice che ho scritto. Qualcuno può aiutarmi?
|
#https://www.programmareinpython.it/esercizi-python/
#Esercizio 13: #Scrivi una funzione che converta in secondi un dato numero di giorni, ore e minuti, # passati dall'utente tramite funzione input. #... l'ho scritto, si blocca e non riesco a capire cosa sbaglio def f_Converti (xGiorni, xOre, xMinuti, xSecondi): yContinua = True xConverti = dict() xChiedi = xGiorni #Verifico il valore inserito dall'utente f_Verifica (xChiedi) if yContinua: xConverti["Giorni"] = xGiorni xChiedi = xOre #Verifico il valore inserito dall'utente f_Verifica (xChiedi) if yContinua: xConverti["Ore"] = xOre xChiedi = xMinuti #Verifico il valore inserito dall'utente f_Verifica (xChiedi) if yContinua: xConverti["Minuti"] = xMinuti xChiedi = xSecondi #Verifico il valore inserito dall'utente f_Verifica (xChiedi) if yContinua: xConverti["Secondi"] = xSecondi if yContinua: for key, value in xConverti.items(): print(f"{value} {key}") xTotale = ((xGiorni * 24 + xOre) * 60 + xMinuti) * 60 + xSecondi print('In totale fanno' + xTotale + ' secondi') #End def f_Converti (xGiorni, xOre, xMinuti, xSecondi): def f_Verifica(xChiedi): xNumeri = ('.', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 1, 2, 3, 4, 5, 6, 7, 8, 9, 0) # Verifico il valore inserito for i in range(0, len(xChiedi)): if xChiedi[i:i + 1] not in xNumeri: yContinua = False print(xChiedi + ' non è un numero') # End if xVerDigt in xNumeri: # End for i in range (0, len(xChiedi)): return yContinua # End def f_Verifica(xChiedi): xGiorni = input('Inserisci il numero di Giorni \n') xOre = input('Inserisci il numero di Ore \n') xMinuti = input('Inserisci il numero di Minuti \n') xSecondi = input('Inserisci il numero di Secondi \n') f_Converti (xGiorni, xOre, xMinuti, xSecondi) |
|
Scritto da nuzzopippo |
2023-03-30 14:55:42 - Re: Ho iniziato da poco (seguito corso on line), non sono un programmatore e non riesco a correggere il codice che ho scritto. Qualcuno può aiutarmi?
|
Ho guardato il Tuo codice (la prossima volta usa il tasto "code" dell'editor) e decisamente ha molte lacune, la prima è la non coerenza dello script con la traccia, i secondi non dovrebbero far parte dell'input utente.
Sorvolando, ed eseguendolo, diviene evidente la mancanza di valorizzazione della variabile "yContinua" nella funzione "f_Verifica(xChiedi)" che in caso di valore "True" Ti da un errore per referenza senza assegnamento, risolvibile inserendo un "yContinua = True" prima del ciclo for nella funzione. Purtroppo, però, esistono problemi ancor più grossi, il primo è che non vedo considerata la circostanza che la funzione built-in input restituisce una stringa e poi, in generale, l'organizzazione logica dello script fa pensare ad una pesante mancanza di concetti base ... Per riscontro sono andato sul sito dove hai prelevato l'esercizio ed ho guardato la soluzione li proposta : leggerla Ti avrebbe dato indicazioni utili anche se debbo criticare anch'essa dato che non considera che vi sono 24 ore in un giorno e 60 minuti in un'ora, pertanto input maggiori di tali limiti o negativi andrebbero considerati errati, anche se potrebbero comunque dare risultati corretti in caso di valori positivi. Non conosco la qualità ed il livello delle "lezioni" che hai seguito su quel sito ma il Tuo script non mi fa pensare bene, suggerirei l'utilizzo di un buon libro o, almeno, di qualcuno dei testi introduttivi presenti nel canale "DOCUMENTAZIONE" di questo sito, anche se ne ho letto critiche suggerirei "Pensare da informatico" ed il tutorial, li trovi in questa pagina. Non so se hai già affrontato argomenti quali "match" o i type-hints, comunque Ti faccio un esempio di come lo avrei affrontato io, considerando anche le mancanze accennate per la soluzione fornita nel sito proponente l'esercizio, perché Tu possa valutarne la differenza logica rispetto allo script da Te redatto. # -*- coding: utf-8 -*- def get_value(target: str) -> int: ''' Rileva e converte input utente Param: target -> str in DHM''' tokens = {'D': 'i giorni', 'H': 'le ore', 'M': 'i minuti'} not_passed = True while not_passed: try: user_input = int(input(f'inserire {tokens[target]}: ')) match target: case 'H': if user_input < 0 or user_input >= 24: raise ValueError('Ora non valida') case 'M': if user_input < 0 or user_input >= 60: raise ValueError('Minuti non validi') not_passed = False except ValueError as e: print(e, 'riprova') return user_input def to_seconds(days: int, hours: int, minutes: int) -> int: ''' Converte un aggregato di giorni-ore-minuti in secondi. ''' return days * 24 * 3600 + hours * 3600 + minutes * 60 if __name__ == '__main__': values = [] elements = 'DHM' for e in elements: values.append(get_value(e)) print(f'in totale : {to_seconds(*values)} secondi')Spero Ti sia utile Ciao Fatti non foste a viver come bruti... |
Pagina: 1
Esegui il login per scrivere una risposta.