Horloge Python

Vous venez de déballer votre Raspberry Pi et vous vous posez des questions ? C'est ici que ça se passe !

Modérateur : Francois

Répondre
Thebestjeo
Messages : 2
Enregistré le : mer. 18 mars 2015 09:45

Horloge Python

Message par Thebestjeo » mer. 18 mars 2015 10:27

Bonjour, je débute en Python, je n'ai aucune base.
J'ai un problème, je dois créer une Horloge principale. Nous devons donner le temps de la partie et l'horloge doit s'arrêter au temps donner.
Par exemple si nous voulons que la partie de jeu dure 10 minutes, au bout de 10min l'horloge s'arrête. Cette partie est faite, je la mettrai quand je l'aurai totalement finit.
Je devais vous expliquer ça pour la partie qui me pose des problèmes. Dans cette partie de jeu, il va y avoir des prisons, il faut que je fasse un programme qui nous demande combien de temps dure la prison et combien il y aura de prison, et qu'au bout du temps donné, le programme envoie un signal du genre un bruit ou une lumière enfin un signal et cela voudra dire que les gens pourront sortir de la prison.
La prison si possible devrait être reliée a l'horloge principale, c'est à dire par exemple:
On rentre dans le programme le temps de la partie, puis le temps de la prison et le nombre de fois où la prison est ouverte pour que les gens puissent sortir.

Merci d'avance pour vos réponses.

Avatar du membre
dbrion0606
Raspinaute
Messages : 164
Enregistré le : ven. 30 janv. 2015 15:51

Re: Horloge Python

Message par dbrion0606 » mer. 18 mars 2015 18:56

Excusez ma curiosité, mais s'agit il d'un projet scolaire (et certains esprits chagrins , dont je suis, peuvent être choqués par le fait de tenter de se donner un avantage sur ses camarades en demandant une solution toute faite à l'internet; si votre prof fait partie de ces esprits chagrins, imaginez ce que donnera la requête google " python horloge prison".... ou testez la vous même...) Ceci dit, je ne vois pas quel serait le mal à tenter d'améliorer un code existant -encore faudrait il que vous le postiez- , voire à l'adapter à de nouveaux besoins (mettre des joueurs en prison) et je suis conscient qu'il est très frustrant d'être arrêté par un détail -mais encore faut il que ce soit un détail- .
Je voudrais profiter de votre expertise en gestion du temps sous python pour voir si on peut réécrire sans faire d'appel système 'os' le bout de code suivant (à noter que, si on donnait un nom de fichier à chaque joueur quand il va en prison -par construction du nom de fichier à partir du nom du joueur, et si python pouvait dormir une fraction de seconde, il serait assez facile de savoir quand un joueur emprisonné peut sortir de prison (et là, il faudrait détruire son nom de fichier lors de la levée d'écrou-
s

Code : Tout sélectionner

h-4.1$ cat truc.py
import os 
os.system("date +%s > truc")
os.system("sleep 10")
fname='truc'
f = open(fname, 'r')
debut = int(f.readline()[:-1])
f.close()
os.system("date +%s > truc")
f=open(fname, 'r')

fin=int(f.readline()[:-1])
print(debut - fin)

Thebestjeo
Messages : 2
Enregistré le : mer. 18 mars 2015 09:45

Re: Horloge Python

Message par Thebestjeo » jeu. 19 mars 2015 18:44

Horloge principale:

Code : Tout sélectionner

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
 
import time
a=input("Temps en minutes =")
a=a*60
tZero=time.time() #Récupération de tZero
t=time.time() -tZero # Temps après tZero

while t<a : # temps total du chrono
    t=time.time() -tZero
        # Crée un temps en seconde 1 (0=01/01/1970)
 
    tiTuple=time.gmtime(t)
        # Conversion en tuple (1970, 1, 1, 0, 0, 4, 3, 1, 0) 
 
    reste=t-tiTuple[3]*3600.0-tiTuple[4]*60.0-tiTuple[5]*1.0
        # Recupération du reste    
 
    resteS=("%.2f" % reste )[-2::]
        #Affiche les dixièmes et centièmes de l'arrondi ex: 84
 
    tt=time.strftime("%H:%M:%S", tiTuple)+","+resteS
    print tt
    time.sleep(0.01) #Attente en seconde
 
print "fin"
moderation a écrit :EDIT : pour plus de lisibilité, ajout de la balise

Code : Tout sélectionner

. Merci de votre compréhension. Cdt.[/quote]

Avatar du membre
dbrion0606
Raspinaute
Messages : 164
Enregistré le : ven. 30 janv. 2015 15:51

Re: Horloge Python

Message par dbrion0606 » lun. 23 mars 2015 15:09

Code : Tout sélectionner

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
 
import time
a=input("Temps en minutes =")
a=a*60
tZero=time.time() #Récupération de tZero
t=time.time() -tZero # Temps après tZero
users=["toto", "titi"]
dincarceration=[22,15]

def maj(users, dincarceration, debut ):
    
  i=0
  t=time.time() - debut # Temps après tZero
  status=[] 
  for x in users :
   #    print x, i, dincarceration[i]
      if ( t > dincarceration[i]) :
              status.append(  "F")
      else :
              status.append('J')
      i = i+ 1
  # print(status)
  return(status)
      
      
    
maj(users, dincarceration, tZero )

grain=4 # debug : 0.01 est beaucoup trop rapide pour un oeil; 0.2 est satisfaisant
while t<a : # temps total du chrono
    t=time.time() -tZero # Crée un temps en seconde 1 (0=01/01/1970)
 
        # Conversion en tuple (1970, 1, 1, 0, 0, 4, 3, 1, 0)
 
    tt=time.strftime("%H:%M:%S", time.gmtime(t)) #
    # print tt
    status = maj(users, dincarceration, tZero )
    # print status
    iu = 0
    for u in users :
         print tt+ "  " +  u + " :   " + status[iu]
         iu = iu + 1

    time.sleep(grain)  #01) #Attente en seconde
 
print "fin"
Ceci est une solution très simple (pas d'interaction possible) permettant de liberer les gens au bout d'un certain temps.
A noter qu'afficher les dixièmes -voire les centièmes- de seconde est très inconfortable, voire illisible (une video est rafraichie environ 25 fois par seconde).
Cette solution "met tout dans la même boucle " .
On peut l'ameliorer en transmettant le statut à "maj" -mise à jour- (qui se contentera de libérer si la durée d'emprisonnement a été dépassée; en espérant qu'un mecanisme permettant de mettre les gens en prison pour une durée donnée existe par ailleurs).

Répondre

Retourner vers « Débutants »