Contador de tiempo en Python

Iniciado por duRRR, 25 Mayo 2015, 18:51 PM

0 Miembros y 1 Visitante están viendo este tema.

duRRR

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


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()


hirako

#1
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 (python) [Seleccionar]

import time

# start measuring time
start = time.time()

# task to measure
l = [x for x in range(1000000)]

# end measuring time
end = time.time()

# getting elapsed time
time_elapsed = end - start
time_in_miliseconds = time_elapsed * 1000

# printing information
print 'time elapsed:\t{}'.format(time_elapsed)
print 'time elapsed:\t{} ms'.format(time_in_miliseconds)


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

tincopasan

Código (python) [Seleccionar]

from time import time

def inicio():                 #inicio del tiempo
global inicio_tiempo      #hay que declarar la variable como global    
inicio_tiempo = time()    #captura tiempo

def terminado():
global tiempo_pasado
tiempo_pasado= time() - inicio_tiempo
if tiempo_pasado > 60:
minutos=(tiempo_pasado %3600 /60)
print("minutos %d " %minutos)
else:
print("segundos: %.2f seconds." % tiempo_pasado)

def Ordenar():
Ranking=["3 : Ricardo","9 : Alejandra","1 : El Mejor","6: Otro"]  #crear una lista con el tiempo y nombre
Ranking.sort()    #ordenar la lista
print(Ranking)

inicio() #inicio del tiempo
iniciar = input("Nombre del Jugador: ") #acá van las funciones que controlan el inicio y final
terminar = input("Terminar ")           #en este caso mide el tiempo entre que escribís el nombre y el enter de terminar
terminado()                             #una idea de como mostrar el tiempo
Ordenar()                               #obvio que creas un txt con los ganadores y después al leerlos creas una lista         #despues de ordenarla solo mostrśs los 5 primeros en caso de que haya más


para ordenar creas listas y listo

0x5d

Código (python) [Seleccionar]
'''
Autor: JaAViEr|0x5d
Twitter: @javieresteban__
Website: http://www.codigo.ga
'''
from time import sleep
import threading

class Timer(threading.Thread):

def __init__(self, tiempo):

threading.Thread.__init__(self)
self.tiempo = tiempo
self.status = True

def run(self):

for i in range(self.tiempo):

sleep(1)

self.status = False

tiempo = Timer(5)
tiempo.start()
n = raw_input("Nombre :> ")
if tiempo.status:

print "Tu nombre es", n

else:

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.
¡ SIGUEME EN TWITTER -> @JavierEsteban__ !