Comment faire un programme en Python
Voici mon objectif: faire un petit programme (texte) qui va commencer avec un message d'accueil, d'imprimer une minuterie pour combien de temps il a été depuis le dernier événement, puis un compte à rebours de l'événement.
J'ai utilisé ce code pour commencer à essayer de comprendre un timer, mais mon premier problème est que la minuterie ne cesse de répéter sur une nouvelle ligne à chaque nouvelle seconde. Comment puis-je obtenir pour le stopper? Aussi, ce minuteur semble à la traîne réelle secondes sur l'horloge.
import os
import time
s=0
m=0
while s<=60:
os.system('cls')
print (m, 'Minutes', s, 'Seconds')
time.sleep(1)
s+=1
if s==60:
m+=1
s=0
Appuyez sur
Alors, voulez-vous les "x" Minutes y Secondes" pour être effacé et réécrit pour chaque itération de boucle?
Ctrl+C
?Alors, voulez-vous les "x" Minutes y Secondes" pour être effacé et réécrit pour chaque itération de boucle?
OriginalL'auteur Erich Von Hinken | 2013-04-04
Vous devez vous connecter pour publier un commentaire.
Je voudrais aller avec quelque chose comme ceci:
Ici, je me base sur le temps réel module plutôt que de simplement dormir incrementer depuis le sommeil ne sera pas exactement 1 seconde.
Aussi, vous pouvez probablement utiliser
print
au lieu desys.stdout.write
, mais vous aurez presque certainement besoinsys.stdout.flush
encore.Comme:
Notez la virgule donc une nouvelle ligne n'est pas imprimée.
OriginalL'auteur sberry
C'est ma version. Il est idéal pour les débutants.
OriginalL'auteur user5556486
Sur mon PC (Windows 7) lorsqu'il est exécuté dans un
cmd
fenêtre, ce programme fonctionne presque exactement comme vous le dites il faut. Si la minuterie se répète sur une nouvelle ligne, à chaque seconde, qui me donne à penser queos.system ('cls')
ne fonctionne pas pour vous, peut-être parce que vous êtes en cours d'exécution sur un OS autre que Windows?La déclaration
while s<=60:
semble être incorrectes en raisons
ne sera jamais égale à 60 dans ce test, à chaque fois qu'il arrive à 60 ans, il est remis à 0 etm
est incrémenté. Peut-être que le test doit êtrewhile m<60:
?Enfin, sur mon PC, le compte à rebours n'apparaît pas à la traîne réelle secondes sur l'horloge. Inévitablement, ce code décalage de secondes sur l'horloge par un peu-c'est à dire le temps qu'il faut pour exécuter les lignes de code dans le
while
boucle en dehors detime.sleep(1)
, plus tout retard dans le retour de la procédure à partir de l'état de veille. Dans mon cas, ce n'est pas très long à tous, mais, si l'exécution de ce code a pris (pour certaines raisons) de 0,1 secondes (par exemple), la minuterie serait la fin de la course à pied de 10% de lenteur par rapport au mur à l'heure de l'horloge. @sberry réponse fournit un moyen de traiter ce problème.while s<=60
a été conçu pour agir comme unewhile True
, ou exécuter cette chose pour toujoursAh oui, c'est possible. Il a certainement cet effet.
Merci!!!! J'ai oublié de mentionner que je suis sur un mac
Étant sur mac expliquerait pourquoi le
cls
n'a pas fonctionné. Je vous suggère d'accepter @sberry de réponse parce que fournit une plate-forme indépendante de la solution.OriginalL'auteur Simon
Ok, je vais commencer par expliquer pourquoi votre minuterie est à la traîne.
Ce qui se passe dans votre programme, c'est que le
time.sleep()
appel "dort" le fonctionnement du programme pour 1 seconde, une fois que la seconde s'est écoulée à votre programme commence l'exécution de nouveau. Mais votre programme a encore besoin de temps pour s'exécuter toutes les autres commandes que vous avez dit de faire, donc il faut1s + Xs
pour effectuer toutes les opérations. Bien que ce soit une très explication de base, c'est fondamentalement pourquoi votre minuterie n'est pas synchrone.Quant à savoir pourquoi vous êtes constamment l'impression sur une nouvelle ligne, la
print()
de la fonction de pré-définies caractère de fin de ligne qu'il ajoute à n'importe quelle chaîne il est donné.Vous pouvez le remplacer par quelque chose en mettant
end="YourThing"
dans votre rapport d'impression commeL'exemple ci-dessus ajoute une chaîne vide à la fin de la ligne, la sortie de la boucle serait
Comme pour la résolution de votre minuterie problème, vous devez utiliser quelque chose de similaire à
time.sleep
dormira au moins1
deuxième, mais le système d'exploitation peut laisser le programme de sommeil pendant plus de 1 seconde, comme1.5
secondes, en fonction de la situation que le planificateur est de la manipulation. cela signifie que l'utilisation detime.sleep
ne produira jamais une très bonne programmation de la minuterie.OriginalL'auteur TheMerovingian
Utiliser le module timeit pour le temps de votre code. Puis régler l'heure.sommeil(x) en conséquence. Par exemple, vous pouvez utiliser l'une des opérations suivantes:
Cela, le code que vous avez d'autres le temps.le sommeil et la déduire de 1 seconde et va dormir pendant ce laps de temps. Cela permettra de donner une représentation précise de 1 seconde. Un autre moyen est moins de travail, mais peut-être pas aussi précis:
D'exécuter le programme, puis copie imprimée du temps et le coller dans le programme de deux, celui que vous avez maintenant. Utilisation timerLoop dans votre temps.sleep():
Qui devrait résoudre votre problème.
OriginalL'auteur PyGuy
J'ai basé mon minuteur sur user5556486 de la version. Vous pouvez définir la durée, et il émet un bip sonore après la durée terminé, semblable à la Force du Combattant version
OriginalL'auteur TMagnetB
Ce semble qu'il serait BEAUCOUP plus facile:
)
sur la dernière ligne.Correction de l' ). Le point est qu'il est facile de le modifier pour faire ce qu'il veut avec ce code comme une base de référence.
OriginalL'auteur Kurt Peters
un simple programme qui a du son pour vous rappeler serait:
ce programme utilise de temps.sleep() pour attendre une seconde. Il convertit toutes les 60 secondes à une minute. le son ne fonctionne qu'avec Windows ou vous pouvez installer pygame pour ajouter des sons.
OriginalL'auteur Force Fighter