Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: duRRR en 25 Mayo 2015, 18:51 pm



Título: Contador de tiempo en Python
Publicado por: duRRR en 25 Mayo 2015, 18:51 pm
Hola a todos,

Estoy intentando hacer para un trabajo un buscaminas.

El juego en si ya esta funcionando pero me piden que haga un ranking conforme cuanto menos tiempo tardes en encontrar todas las minas mejor puntuación.

De momento he hecho una funcion que inserta en un blog de notas el nombre del jugador cuando ya ha ganado, el problema esta con el tiempo y como ordenar después el ranking de solo los 5 mejores.

Tengo pensado como hacerlo pero no se como aplicarlo:

Mi idea consiste en guardar en una variable la hora actual de cuando se ejecuta el programa y después restarla a la que se haya acabado la partida.

Si alguien pudiese ayudarme estaría muy agradecido.

Gracias por la atención


Os dejo el código para que le echéis un vistazo

Código:
import random
import sys



TAMANY = 8
MINES = 10



def print_taulell (tau):
    print "\n"
    for col in tau:
        for fil in col:
            print fil," ",
        print "\n"


def recompte (col,fil):
    suma = 0
    for a in range (col-1,col+2):
        for b in range (fil-1,fil+2):
            if a>=0 and a<=TAMANY-1 and b>=0 and b<=TAMANY-1:
                if taulell_ocult[a][b]=="*":
                    suma = suma + 1
    return suma

#Guardar partida
def guardar_taulell(fitxer, taulell):
    sortida = open (fitxer, "w")
    for i in range(TAMANY):
        for j in range(TAMANY):
            sortida.write(str(taulell[i][j]))
    sortida.close()
   

#Rankings
def ranking(fitxer):
    sortida = open (fitxer, "a")
    nom = raw_input("Escriu el nom: ")
    sortida.write(nom + '\n')
    sortida.close()
#taulell_ocult
taulell_ocult = []
for A in range (TAMANY):
    taulell_3 = []
    for B in range (TAMANY):
        taulell_3.append (0)
    taulell_ocult.append (taulell_3)

#Taulell_visible
taulell_visible = []
for A in range (TAMANY):
    taulell_3 = []
    for B in range (TAMANY):
        taulell_3.append ("@")
    taulell_visible.append (taulell_3)
   

#colocar les mines
suma = 0
while suma!=MINES:
    random1 = random.randrange(0,TAMANY)
    random2 = random.randrange(0,TAMANY)
    if taulell_ocult[random1][random2] != '*':
        taulell_ocult[random1][random2] = '*'
        suma = suma + 1
#Contament de mines contorn
for col in range (TAMANY):
    for fil in range (TAMANY):
        num = recompte(col,fil)
        if taulell_ocult[col][fil]!="*":
            taulell_ocult[col][fil]=num

#Joc
suma = 0
partida = raw_input("Vols carregar la partida guardada? S/N    ")
if partida=="N":
    while suma!=MINES:
        posicio = raw_input ("M per mina, G per guardar J per jugar ")
    #Mina
        if posicio=="M":
            print "Indica les coordenades per una posicio AMB mines"
            col_mines = input ("Columna:  ") -1
            fil_mines = input ("Fila:  ") -1
            if taulell_ocult[fil_mines][col_mines]=="*":
                suma = suma + 1
                taulell_visible[fil_mines][col_mines]="*"
               
                if suma==MINES:
                    print_taulell (taulell_visible)
                    print "Has guanyat"
                    ranking('ranking.txt')
                    break
            else:
                print_taulell (taulell_ocult)
                print "Has perdut"
                break
            print_taulell (taulell_visible)
            print "Et queden",MINES-suma,"mines"
   
    #Guardar partida
        if posicio == "G":
            guardar_taulell("ocult.txt",taulell_ocult)
            guardar_taulell("visible.txt", taulell_visible)
            print "Has guardat la partida"
            break
   
    #Selecionar jugada
        if posicio == "J":
            print "Indica les coordenades per una posicio SENSE mines"
            columna = input ("Columna:   ") -1
            fila = input ("Fila:   ") -1
            if taulell_ocult[fila][columna]!="*":
                taulell_visible[fila][columna]=taulell_ocult[fila][columna]
            else:
                print_taulell (taulell_ocult)
                print "Has perdut"
                break
            print_taulell (taulell_visible)
            print "Et queden",MINES-suma,"mines"
    print "\n"
else:
   
    raw_input()



Título: Re: Contador de tiempo en Python
Publicado por: hirako en 26 Mayo 2015, 15:07 pm
Quizás no sea la solución más sofisticada, pero esto es lo que uso regularmente para 'medir' el tiempo que demora en correr un algoritmo. Aquí va:

Código
  1. import time
  2.  
  3. # start measuring time
  4. start = time.time()
  5.  
  6. # task to measure
  7. l = [x for x in range(1000000)]
  8.  
  9. # end measuring time
  10. end = time.time()
  11.  
  12. # getting elapsed time
  13. time_elapsed = end - start
  14. time_in_miliseconds = time_elapsed * 1000
  15.  
  16. # printing information
  17. print 'time elapsed:\t{}'.format(time_elapsed)
  18. print 'time elapsed:\t{} ms'.format(time_in_miliseconds)
  19.  

Espero que te sirva.

PD: Lo puse en texto plano porque no tengo ni idea de cómo poner un snippet de código en el post.

Mod: código modificado, para colocarlo como código debes usar las etiquetas GeSHi


Título: Re: Contador de tiempo en Python
Publicado por: tincopasan en 26 Mayo 2015, 15:08 pm
Código
  1. from time import time
  2.  
  3. def inicio():                 #inicio del tiempo
  4. global inicio_tiempo      #hay que declarar la variable como global    
  5. inicio_tiempo = time()    #captura tiempo
  6.  
  7. def terminado():
  8. global tiempo_pasado
  9. tiempo_pasado= time() - inicio_tiempo
  10. if tiempo_pasado > 60:
  11. minutos=(tiempo_pasado %3600 /60)
  12. print("minutos %d " %minutos)
  13. else:
  14. print("segundos: %.2f seconds." % tiempo_pasado)
  15.  
  16. def Ordenar():
  17. Ranking=["3 : Ricardo","9 : Alejandra","1 : El Mejor","6: Otro"]  #crear una lista con el tiempo y nombre
  18. Ranking.sort()    #ordenar la lista
  19. print(Ranking)
  20.  
  21. inicio() #inicio del tiempo
  22. iniciar = input("Nombre del Jugador: ") #acá van las funciones que controlan el inicio y final
  23. terminar = input("Terminar ")           #en este caso mide el tiempo entre que escribís el nombre y el enter de terminar
  24. terminado()                             #una idea de como mostrar el tiempo
  25. Ordenar()                               #obvio que creas un txt con los ganadores y después al leerlos creas una lista         #despues de ordenarla solo mostr&#347;s los 5 primeros en caso de que haya más
  26.  

para ordenar creas listas y listo


Título: Re: Contador de tiempo en Python
Publicado por: 0x5d en 27 Mayo 2015, 06:26 am
Código
  1. '''
  2. Autor: JaAViEr|0x5d
  3. Twitter: @javieresteban__
  4. Website: http://www.codigo.ga
  5. '''
  6. from time import sleep
  7. import threading
  8.  
  9. class Timer(threading.Thread):
  10.  
  11. def __init__(self, tiempo):
  12.  
  13. threading.Thread.__init__(self)
  14. self.tiempo = tiempo
  15. self.status = True
  16.  
  17. def run(self):
  18.  
  19. for i in range(self.tiempo):
  20.  
  21. sleep(1)
  22.  
  23. self.status = False
  24.  
  25. tiempo = Timer(5)
  26. tiempo.start()
  27. n = raw_input("Nombre :> ")
  28. if tiempo.status:
  29.  
  30. print "Tu nombre es", n
  31.  
  32. else:
  33.  
  34. print "Tardaste mas de 5 segundos en responder"
Un ejemplo usando Thread, así podemos ejecutar otra tarea mientras el tiempo se cuenta por separado.

Saludos.