提示用户输入1到9之间的数字,然后打印一个正方形的文本

时间:2017-05-02 04:12:31

标签: python arrays numpy formatting type-conversion

如何编写一个程序,提示用户输入1到9之间的数字,然后打印一个方格的文本到控制台,如下所示:

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****
22***
333**
4444*
55555

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

3 个答案:

答案 0 :(得分: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))))

至少对我而言,这很优雅。

答案 1 :(得分:1)

优雅是主观的,但尝试用较少的线条来做,我可能会做这样的事情。

IEnumerable<string>

答案 2 :(得分: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} - 这是传递给格式函数{{的变量1}}