2017-03-26 1 views
1

Quelqu'un peut-il expliquer pourquoi le code suivant (pour imprimer la table de multiplication) est ne fonctionne pas comme prévu?Pourquoi le délai time.sleep() ne fonctionne pas comme prévu dans la boucle while imbriquée?

import time 
n = int(input("Enter number of multiples: ")) 
k = int(input("Enter number of tables: ")) 
c = 1 
m = 1 #multiple 
while m <= n: 
    while c <= k: 
     print("%4d" % (c*m), end='') 
     c+=1 
     time.sleep(1) #slower behaviour 
    m+=1 
    c=1 
    print("") 

Ce qui est étrange à ce sujet est qu'au lieu d'imprimer un seul des éléments horizontaux à des intervalles d'une seconde, il imprime toute la ligne à la fois dans un intervalle de secondes « k ». En fait, le code écrit en C présentait le même comportement.

#include<stdio.h> 
#include<unistd.h> 
void main(){ 
    int n,k,c=1,m=1; 
    printf("Enter number of Multiples: "); 
    scanf("%d",&n); 
    printf("Enter number of tables: "); 
    scanf("%d",&k); 
    while(m<=n){ 
     while(c<=k){ 
      printf("%4d",(c*m)); 
      c+=1; 
      //sleep(1); //slower here 
     } 
     m+=1; 
     c=1; 
     sleep(1); //faster here 
     printf("\n"); 
    } 
} 

Autrement dit, au lieu d'imprimer un élément et en attente d'une seconde, il toute imprimé rangée à la fois à des intervalles de « k » seconde (s).

Répondre

4

Vous avez demandé à l'impression d'ignorer le saut de ligne, mais la sortie du terminal est mise en mémoire tampon. Vous devez vider les données.

print("%4d" % (c*m), end='', flush=True)