3 votes

Comment créer une boucle python qui permet à un autre code de s'exécuter aussi

Je suis un codeur amateur. Je travaille sur un petit jeu pour un projet en biologie, mais je suis tombé sur un problème dans mon code. J'ai une boucle qui ajoute +1 à la variable soleil toutes les deux secondes. Cependant, tout le code en dessous de la boucle est non fonctionnel maintenant que j'ai fait la boucle. Je suppose que c'est parce qu'il attend que la boucle se termine. Y a-t-il un moyen de faire en sorte que la boucle s'exécute toujours, tout en permettant au code d'exécuter sa séquence en même temps ?

print("Game started!")
sunlight = 0
while True:
  time.sleep(2)
  sunlight += 1
  commands = input("Type stats to see which molecules you have, type carbon to get carbon\ndioxide, and type water to get water: ")
  if commands == ("stats"):
    print("Sunlight: ",sunlight,"")

2voto

Mert Köklü Points 1841

Comme vous êtes débutant, je ne vous recommande pas d'utiliser multithreading ou asyncio . Au lieu de cela, il suffit de démarrer le temps et lorsque l'utilisateur entre "stats", elapsed time//2 sera égal à sunlight .

import time
start_time = time.time()
while True:
    commands = input("Type stats to see which molecules you have, type carbon to get carbon\ndioxide, and type water to get water: ")
    if commands == ("stats"):
        sunlight = (time.time()-start_time)//2   # elapsed time // 2
        print("Sunlight: ", sunlight, "")

1voto

kaya3 Points 17037

Su sunlight fonctionne essentiellement comme une horloge ; elle compte la moitié du nombre de secondes écoulées depuis le début du programme. Plutôt que d'implémenter votre propre horloge en utilisant time.sleep() il est préférable d'utiliser une horloge existante dans la base de données de l'UE. time bibliothèque.

La fonction temps.monotonique renvoie un nombre de secondes, vous pouvez donc l'utiliser pour obtenir l'ensoleillement actuel en enregistrant l'heure de départ, puis chaque fois que vous voulez connaître la valeur de sunlight Dans ce cas, la différence entre l'heure actuelle et l'heure de départ est divisée par 2.

start_time = time.monotonic()

def get_sunlight():
    current_time = time.monotonic()
    return int(current_time - start_time) // 2

Il est préférable d'utiliser le monotonic() que la fonction clock() à cette fin, puisque la fonction clock() fonction est déprécié à partir de Python 3.3 :

La fonction time.clock() est dépréciée car elle n'est pas portable : elle se comporte différemment selon le système d'exploitation.

C'est aussi mieux que le time() à cette fin, car les modifications de l'horloge du système (telles que l'avance ou le recul en raison de l'heure d'été) affectera le résultat de time() :

Bien que cette fonction renvoie normalement des valeurs non décroissantes, elle peut renvoyer une valeur inférieure à celle d'un appel précédent si l'horloge du système a été reculée entre les deux appels.

-1voto

ashiswin Points 627

Vous devriez vous pencher sur le multithreading bibliothèque. C'est probablement une bonne ressource. Vous pouvez lancer un thread exécutant votre incrémenteur de lumière solaire qui met à jour une variable globale (ce n'est pas une bonne idée mais vous semblez n'avoir qu'un seul écrivain, donc vous pouvez vous débrouiller jusqu'à ce que vous ayez le temps d'acquérir des concepts de traitement parallèle plus avancés).

Référence : https://www.geeksforgeeks.org/multithreading-python-set-1/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X