Différence de résultat entre Python et Pycharm

Résolu/Fermé
Froyorst Messages postés 22 Date d'inscription jeudi 18 avril 2013 Statut Membre Dernière intervention 2 avril 2023 - Modifié le 17 déc. 2020 à 17:55
Froyorst Messages postés 22 Date d'inscription jeudi 18 avril 2013 Statut Membre Dernière intervention 2 avril 2023 - 17 déc. 2020 à 18:49
Bonjour,

J'ai voulu me coder un petit timer en Python. J'ai fais mon truc avec PyCharm et le résultat est exactement celui escompté (un timer qui affiche à chaque seconde les secondes écoulées)

Le soucis c'est que si je le lance directement via python 3.8, il attend le temps max du timer, et puis seulement il affiche directement toutes les secondes écoulées.

Un raison à ce problème ? Comment est-ce possible que le comportement soit différent ?

Voici le code

Merci de vos réponses

# Source [https://openclassrooms.com/forum/sujet/compte-a-rebours-simultane-avec-un-programme#message-91018311]

from time import time,sleep
from math import pi

def timer(time_start, t):
    sleep(1)
    print("%.0f" % (time() - time_start), end=" ")
    return ((time() - time_start) >= t)


def jouons(t):
    time_start = time()
    jouons3(time_start, t)


def jouons3(time_start, t):
    while not timer(time_start, t):
        None
    return ("time's up")


def liste():
    print("Liste des personnages")
    print("1 : Anastasia")
    print("2 : Aspirine")
    print("3 : Ekly")
    print("4 : Enarion")
    print("5 : Froyorst")
    print("6 : Nyléa")
    print("7 : Orik")
    print("9 : Quitter")

def message():
    print(" ")
    print(" ")
    print("It's over!")
    print(" ")


counter: int = 0
perso: str = " "

liste()

while perso != "0":
    perso = input("Veuillez entrer votre choix de personnage. Pour revoir le menu, entrez 9 : ")
    if perso == "9":
        liste()
    elif perso == "1":
        t: int = 15
        jouons(t)
        message()

    elif perso == "2":
        t: int = 23
        jouons(t)
        message()
    elif perso == "3":
        t: int = 16
        jouons(t)
        message()
    elif perso == "4":
        t: int = 9
        jouons(t)
        message()
    elif perso == "5":
        t: int = 10
        jouons(t)
        message()
    elif perso == "6":
        t: int = 12
        jouons(t)
        message()
    elif perso == "7":
        t: int = 14
        jouons(t)
        message()
    elif perso != "0":
        print("Erreur de saisie. Veuillez ré-essayer")

1 réponse

yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
17 déc. 2020 à 17:54
bonjour,
merci de préciser "python" quand tu utilises les balises de code pour partager du python.
as-tu testé en supprimant
end=" "
du
print()
?
1
Froyorst Messages postés 22 Date d'inscription jeudi 18 avril 2013 Statut Membre Dernière intervention 2 avril 2023
17 déc. 2020 à 18:05
Salut,

J'y penserai à l'avenir :)

Effectivement ça résoud le problème. Par contre du coup ce n'est pas top question lisibilité.
Il y a une alternative à
end=" "
qui permet d'avoir sur une même ligne tout en évitant ce problème ?

Merci de ta réponse :)
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > Froyorst Messages postés 22 Date d'inscription jeudi 18 avril 2013 Statut Membre Dernière intervention 2 avril 2023
17 déc. 2020 à 18:36
peut-être
flush=True
en complément au
end
?
0
Froyorst Messages postés 22 Date d'inscription jeudi 18 avril 2013 Statut Membre Dernière intervention 2 avril 2023 > yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024
17 déc. 2020 à 18:49
Monsieur, vous êtes ce genre de personne qui font avancer le monde.

C'est parfait, ça marche nickel, un grand merci :)
0