Topic: Prova su time  (Letto 159 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Valentina9213

  • python unicellularis
  • *
  • Post: 11
  • Punti reputazione: 0
    • Mostra profilo
Prova su time
« il: Novembre 03, 2020, 17:26 »
Ciao a tutti.
Ho bisogno di un piccolo aiutino per stampare a video tutti i valori del programma da ora iniziale a ora finale risultante.
Nel mio programma ,scrivo in input, un'ora del giorno (i.e. 10:00) e la quantità di ore da sommare (i.e. 4 h dopo), come ora_finale = 14:00.
Con
 for x in range( ora_iniziale, ora_finale ): print(x) 

Lo fa, ora_iniziale = 10:00, ora_finale = 14 e mi stamperà (10:00, 11:00, 12:00, 13:00)

Invece se io scrivo un'ora del giorno (i.e. 10:00) e la quantità di ore da sommare (i.e. 15 h dopo), come ora_finale = 01:00 del giorno dopo.
 for x in range( ora_iniziale, ora_finale ): print(x) 
 
ora_iniziale = 10:00, ora_finale = 01, non lo esegue perchè 10 > 1. Avrò impostato male il for.
Sapete darmi qualche consiglio su come risolvere questo problema.

#un programma che stampi a video tutti i valori del programma:
#scrivi un programma che chiede 2 valori :
    # un'ora del giorno (da 0 a 23);
    # quante ore (da 0 a 1000) da aggiungere a tale ora
    # calcola l'ora finale risultante.
#che stampi a video tutti i valori del programma precedente
# da ora iniziale a ora finale risultante

ora_giorno = input("Inserisci un'ora del giorno [0:23]: ")
quantita_ore = input("Inserisci quante ore [0:1000]: ")

ora_iniziale = int(ora_giorno)
ore_dopo = int(quantita_ore)

ora_finale = (ora_iniziale+ ore_dopo)%24
print('ora_iniziale', ora_iniziale)
for x in range( ora_iniziale, ora_finale ):
    print('Passaggio tempo', x)
print('ora_finale', ora_finale)

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.151
  • Punti reputazione: 9
    • Mostra profilo
Re:Prova su time
« Risposta #1 il: Novembre 03, 2020, 19:58 »
Vedo che dalle date siamo passati alle ore, ma la situazione non è cambiata: ancora non hai trovato un minuto per studiare le basi di Python.

Range non può fare altro che produrre una sequenza di numeri crescenti, da un minimo a un massimo: come risulta dalla lettura della documentazione: https://docs.python.org/3/library/stdtypes.html#range
Tuttavia "range" non può leggerti nella testa, e capire che tu hai in mente la seguenza delle ore, che arrivata a 24 torna indietro a 1. Quindi se il tuo "minimo" è maggiore del "massimo", banalmente range si pianta, e non potrebbe fare altrimenti.

No, non puoi risolvere 'sta storia delle ore con for e con range (almeno, non in modo banale). Ti tocca fare con la tecnica del contachilometri che ti è stata spiegata nell'altro post: incrementi di uno, incrementi di uno, incrementi di uno... se arrivi a 24 torni a 1... incrementi di uno, incrementi di uno... fino ad arrivare al tuo valore finale.

Offline Valentina9213

  • python unicellularis
  • *
  • Post: 11
  • Punti reputazione: 0
    • Mostra profilo
Re:Prova su time
« Risposta #2 il: Novembre 04, 2020, 13:00 »
Questo lo so che non posso implementarlo con il for e infatti sto cercando un alternativa.
Se sto scrivendo in questo forum, due programmi che fanno la stessa cosa, è perché forse mi serve un'aiuto per comprendere meglio visto che cercando su internet non riesco a trovarne una soluzione, iniziando ora a programmare in python.

Proveró a fare con la tecnica che dice lei, ti ringrazio.

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.151
  • Punti reputazione: 9
    • Mostra profilo
Re:Prova su time
« Risposta #3 il: Novembre 04, 2020, 18:57 »
> Questo lo so che non posso implementarlo con il for

Sì... curiosamente, lo sai sempre... un po' dopo.

E comunque, come ti ho spiegato (leggessi mai quello che scrivo), non è il "for" il tuo problema, ma "range".

> non riesco a trovarne una soluzione

La soluzione (e però adesso mi sono stancato di ripeterlo eh?) è studiare Python prima di mettersi in testa di risolvere un problema pratico in Python.
Non puoi andare avanti a botte di "aiutini" sui forum... ogni riga di codice che devi scrivere diventa un post... ti mancano le basi. Guarda, lo so che questo ti sembra ingiusto, offensivo, maleducato, bla bla bla: ma fidati, davvero: il favore migliore che puoi farti è prenderti un buon libro (il Lutz è sempre una buona idea) e seguirlo passo-passo, dimenticandoti del tuo problema per qualche mesetto. Vedrai che quando ti sarai fatta le ossa con un apprendimento strutturato, cose come queste ti sembreranno uno scherzo.