如何编写一个程序,提示用户输入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
我不禁想知道是否有更优雅的解决方案。
答案 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}}