2017-03-26 99 views
1

有人可以解釋爲什麼下面的代碼(打印乘法表)是不按預期工作爲什麼time.sleep()延遲在嵌套while循環內無法按預期工作?

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("") 

什麼奇怪這是而不是打印在一秒的間隔一個水平元件,則在一次的數「k」秒的間隔打印整個行。

事實上,用C編寫的代碼顯示了相同的行爲。

#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"); 
    } 
} 

也就是說,不是打印一個元素並等待一秒鐘,而是以'k'秒的間隔一次打印整行。

回答

4

你告訴打印機跳過換行符,但終端輸出是行緩衝的。你需要刷新數據。

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