2014-12-22 100 views
0

我想編寫一個程序,該程序需要一個數字並將其圖形化表示打印到控制檯。例如,與輸入123我應該會得到:打印出控制檯的數字

enter image description here

這裏是我怎樣努力實現它,開始與實施onetwo

def g (n): 
    n = list(str(n)) 
    dic = { '1': """1 
        1 
        1 
        1 
        1 
        1 
        1 
        """, 
      '2': """2222 
         2 
         2 
         2 
        2 2 
       2 
       2 
       2 
        22222""" 
      } 
    for i in n: 
     print(dic[i]) 

但是我得到這個對於輸入 '121':

>>> 
>>> g(121) 
1 
        1 
        1 
        1 
        1 
        1 
        1 

2222 
         2 
         2 
         2 
        2 2 
       2 
       2 
       2 
        22222 
1 
        1 
        1 
        1 
        1 
        1 
        1 

UPDATE:我糾正語法錯誤。謝謝。我仍然有點奇怪的結果。

+2

您使用的是半冒號在詞典裏。使用','。 –

+0

它也不起作用,因爲它會在新行中打印每個數字。打印前必須準備文本的每一行。 – lolopop

+0

我更正了語法錯誤。我仍然得到一個奇怪的結果。 –

回答

2

python中的"""text"""語法表示您輸入的每個字符都將包含在字符串中,包括空白。因此,如果您縮進文本中的數字,則空格將包含在字符串中並將被打印,這就是爲什麼您將數字看得如此之近的原因。

也就是說,由於控制檯的工作方式,您的算法仍然無法工作。打印某些東西時,可以逐一打印每一行。您不能使用打印功能打印第一行的一部分,第二行的一部分,然後打印上一行的第二部分。一旦你打印一條線,你不能回去。

你應該讓這樣的事情:

for i in range(NUMBER_OF_LINES): 
    s = "" 
    for j in n: 
     s += dic[j].split('\n')[i] # There are more efficient ways to do this part... 
    print(s) 

順便說一句,如果你需要在沒有新行打印,您可以使用它像這樣:print("Hello World!", end="")

+0

不幸的是,當我應用你的算法時,我仍然會看到奇怪的外觀。在第一行中,角色被推到左邊角落。 –

+0

您是否修復了縮進? – lolopop

+1

實際上,您可以使用例如「祝福」(定位ANSI代碼)和「colorama」(Windows支持)軟件包。儘管您不需要打印數字。 – jfs