2017-05-02 34 views
0

如何編寫一個程序,用於提示用戶輸入介於1和9之間的數字(包括1和9),然後在控制檯上打印一個文本的正方形看起來是這樣的:提示用戶輸入1到9之間的數字,然後打印一個文本的正方形

1**** 
22*** 
333** 
4444* 
55555 

這是我到目前爲止有:

1**** 
22*** 
333** 
4444* 
55555 

import numpy as np 

b_num = raw_input() 
b_num = int(b_num) 

mat = np.zeros((b_num, b_num)).tolist() 
mat = np.char.mod('%.5g', mat) 
mat[0:9] = '*' 

for i in range(b_num): 
     for a in range(i): 
       mat[i, a] = i + 1 
       mat[0:0] = '1' 

mat = '\n'.join(map(str, mat)) 
mat = mat.replace(']', '') 
mat = mat.replace('[', '') 
mat = mat.replace('\'', '') 
mat = mat.replace(' ', '') 

print mat 

目前如下這是一個成功的這個輸出數組

我不禁想知道是否有更優雅的解決方案。

+1

優雅與否是意見,至少你的代碼工作就像你想要的,也期待它! – KeithC

回答

1

您可以使用格式說明符來打印相應的複選框:

>>> n = int(input())  # raw_input() Py2 
5 
>>> for i in range(1, n+1): 
...  print("{:*<{width}}".format(str(i)*i, width=n)) 
1**** 
22*** 
333** 
4444* 
55555 

這使用{:*<{width}}這意味着*補,左對齊<,與{width}的寬度 - 這是傳遞一個變量在格式功能width=n

+0

啊這是一個主要的改進! – Oliver

1

如何:

b_num = raw_input() 
b_num = int(b_num) 

for b in xrange(1,b_num+1): 
    print("".join((str(b) if i < b else '*' for i in xrange(b_num)))) 

至少對我來說,這是優雅的。

+0

是的,這是非常好的,謝謝你的例子 – Oliver

1

優雅是主觀的,但試圖用更少的線做我可能會做這樣的事情。

import numpy as np 

b_num = int(input("What Number?")) 

arr = np.array([str(i)*i + "*"*(b_num-i)for i in range(1,b_num+1)]) 
+0

完全迷人 – Oliver

相關問題