如何在Python中实现对角线间隔打印图案?
问题描述
当n=2时,预期输出图案:
* * * * * * * *
当n=3时,预期输出图案:
* * * * * * * * * * * * * * * * * * * * * * * * * * *
我写了下面这段代码,但只能打印出基本的行列结构,没法实现每行开头的空格间隔:
n = int(input(": ")) i = 0 for i in range(n**2): j = 0 for j in range(n): j += 1 print("* ", end="") i += 1 print("")
解决方法
要实现预期的图案,核心要处理两个细节:
- 每行开头的空格数:把所有行分成n组,每组n行。每组里第m行(从0开始数)的开头要加m个空格。用
i % n就能拿到当前行在组内的位置,以此确定空格数。 - 星号之间的空格数:n=2时星号之间是1个空格,n=3时是2个,也就是星号间的空格数是
n-1个。
修改后的代码如下:
n = int(input(": ")) # 循环n²次,打印总行数 for i in range(n**2): # 获取当前行在组内的索引,计算开头空格数 prefix_spaces = i % n print(' ' * prefix_spaces, end='') # 打印星号部分:每个星号后加n-1个空格,重复n次 print(('*' + ' '*(n-1)) * n)
如果不想让每行末尾多出空格,可以用join方法优化:
n = int(input(": ")) for i in range(n**2): prefix_spaces = i % n print(' ' * prefix_spaces, end='') # 用n-1个空格连接n个星号,避免末尾空格 print((' '*(n-1)).join(['*']*n))
这样运行后就能得到你想要的图案了。
内容的提问来源于stack exchange,提问作者Mehmed
相关产品推荐
相关产品推荐

