Ya no necesitas indagar más por otras páginas ya que has llegado al sitio exacto, tenemos la respuesta que quieres pero sin complicaciones.
Solución:
pitón 2, 167 129 bytes
-36 bytes principalmente* por usar la idea de captura de Maltysen ctrl-c
usando una excepción: ¡da crédito!
-4 bytes gracias a DLosc (init n
y b
a 0 en lugar de f()
)
-1 byte gracias a FlipTack (uso p^=1
más bien que p=1-p
)
-2 bytes gracias a Felipe Nardi Batista (eliminar especificadores de precisión)
import time
f=time.time
n=b=p=0
while 1:
try:n=[n,f()][p];t=n-b;print'r%02d:%02d'%(t/60%60,t%60),
except:b=[b-n+f(),b][p];p^=1
Funciona igual que mi original, a continuación, pero con el control key secuencia de ctrl+c
.
(Probado por mí con Python 2.7.8 en Windows 7, 64 bits;
Probado por Brian Minton con Python 2.7.13 en Linux, 64 bits)
* también se derrumbó if
declaración a una lista de búsqueda para obtener la try
como una sola línea.
Mi original:
import time,msvcrt as m
f=time.time
n=b=p=0
while 1:
if m.kbhit()and m.getch()==b'p':b=[b-n+f(),b][p];p^=1
if p:n=f()
t=n-b;print'r%0.2d:%0.2d'%(t/60%60,t%60),
(Probado por mí con Python 2.7.8 en Windows 7, 64 bits; este código, sin embargo, es específico de Windows debido al uso de la msvcrt
biblioteca)
El control key es ‘p’.
n
y b
se inicializan con el mismo valor en el arranque, dando un “desplazamiento” de 0; p
se inicializa a 0, lo que indica un estado de pausa.
Siempre que el mando key se presiona el valor de p
está conmutado. Al pasar de un estado de pausa a un estado activo b
se actualiza a un nuevo valor manteniendo cualquier compensación actual de los estados activos anteriores con b-n
.
Durante un estado activo n
se actualiza repetidamente a la hora actual llamando time.time()
.
La diferencia entre n
y b
, t
es entonces el número total de segundos (incluida una parte fraccionaria) transcurridos durante los estados activos.
Los minutos transcurridos son entonces t/60
y cada uno de los minutos y segundos se visualizan mod 60 con (t/60%60,t%60)
. Los ceros iniciales se anteponen para cada uso string formato de la parte entera con '...%0.2d...'
. Imprimiendo una tupla (el final ,
) donde el primer elemento tiene un retorno de carro inicial (el r
) hace que se sobrescriba el texto previamente impreso.
SmileBÁSICO, 8677 71 bytes
@L
N=N!=DIALOG(FORMAT$("%02D:%02D",F/60MOD 60,F MOD 60),,,N)[email protected]
DIALOG
muestra un cuadro de texto en la pantalla táctil. N
es el número de segundos que el cuadro de texto permanecerá en la pantalla antes de que desaparezca. Si N
es 0
permanece hasta que el usuario presiona el botón en la pantalla táctil.
DIALOG
Devoluciones 1
si el usuario presionó el botón, y 0
si se cierra automáticamente. Entonces, cuando el usuario presiona el botón de pausa, regresa 1
y el tiempo de visualización se establece en 0
, pausando el cronómetro. Después de que el usuario presiona el botón nuevamente, configuramos el tiempo de visualización nuevamente a 1
, reanudando el temporizador. Básicamente, cada vez DIALOG
devoluciones 1
el tiempo de visualización cambia entre 1
y 0
usando !=
que es equivalente a un XOR lógico siempre que ambas entradas sean 1 o 0.
Pitón – 160159 143 bytes
¡Gracias a @JonathanAllan por ahorrarme 18 bytes!
Solo usa bibliotecas integradas, por lo que el control key es ctrl-c
atrapándolo con un except keyboardInterrupt
.
import time
Z=0
print'00:00'
while 1:exec"try:n while 1:n %snexcept:1n"*2%(1,"print' 33c%02d:%02d'%divmod(Z%3600,60);Z+=1;time.sleep(1)")
Valoraciones y comentarios
No se te olvide dar visibilidad a este escrito si te ayudó.