2016-01-03 117 views
0

我已經檢查出可能的重複但仍然沒有爲我工作。打印沒有新的行python

我所試圖做的是旋轉numpy的陣列,我希望看到這個作爲終端的動畫:

if __name__ == "__main__": 
o = np.ones((10,10)) 
while True: 
    for i in xrange(361): 
     sys.stdout.write(repr(rot_position(o, i))) 

試圖打印後跟一個逗號,它並不能工作。我怎樣才能使它始終打印在同一行(在python 2.7x上工作)?

+0

_exactly_你說的意思是什麼? 「打印在同一地點」?也許你可以發佈你現在得到的輸出和你想得到的輸出。你是否想用while循環的每個迭代的相同'o [i]'值覆蓋控制檯上的每一列?目前,你是否正在增加線寬? –

+0

你需要修改你的問題,以便代碼是MCEV(http://stackoverflow.com/help/mcve) – Gabriel

+0

它是太多的代碼放在一個頁面像腐爛的位置只是以一些可見的方式改變數組我認爲這很明顯。我得到了一個完整的工作答案,謝謝你的反饋:) –

回答

1

蟒蛇2.x的「打印不換行」是:print("sometext"),

但是,如果你想要做什麼,我覺得你想要做什麼,你whilefor之間,加print("\r"),

下面是一個「股票行情」程序的例子,說明我在說什麼。不同,但我認爲這是適用的:

#!/usr/bin/python 

import time 
import sys 

i = 0 
hello = "hello world, goodbye universe " 

while 1: 
    print("\r"), 

    cur = hello[i:] + hello[0:i] 
    print("%s" % cur), 
    sys.stdout.flush() 

    i += 1 
    if (i >= len(hello)): 
     i = 0 

    time.sleep(0.3) 
+0

當我運行這個它indeeed做我想要的,但我努力適應它到我的例子。所以我首先刪除了for循環,並且只是在這個時候增加索引。但它仍然沿着每一條線走下去,而不是像你的例子那樣在現場印刷。 pastebin.com/QenmykR9 –

+0

它似乎並沒有在我的情況下衝洗 –

+0

如果我用一個數字替換numpy數組,它的工作原理非常好,但似乎numpy數組太大而無法用sys.stdout.flush刷新你認爲有一個工作? –

6

你總是可以(在Python 3.X)使用方法:

print("sometext", end="") 

爲Python 2.7什麼?

添加到您的代碼的頂部:from __future__ import print_function然後可以使用print作爲一個功能 - from @rwilson's comment

+0

python 2.7的任何東西?這適用於3,對我有用!但是對於2的東西也會很好。 –

+3

將此添加到代碼的頂部:'from __future__ import print_function'然後可以使用print作爲函數。 – rwilson

0

你可以使用Python 2.7版

print ("sometext", end="") 
0

擦除,並重新打印編輯行:

def clear_line(): 
    sys.stdout.write("\033[F") #back to previous line 
    sys.stdout.write("\033[K") #clear line 

,那麼你可以這樣做:

print("Installing... | ") 
time.sleep(0.3) 
clear_line() 
print("Installing.../") 
time.sleep(0.3) 
clear_line() 
print("Installing... - ") 
time.sleep(0.3) 
clear_line() 
print("Installing... \ ") 

This wi會產生一個旋轉動畫。你可以用你的numpy數組做類似的事情。

又如:

print("1") 
print("2") 
clear_line(): 
print("3") 

,輸出:

1 
3