如何用Python的列表与循环打印指定样式的三角形?
解决打印指定样式三角形的问题
首先先明确你要的目标输出(当n=5时):
* *+* *+++* *+++++* *********
再看看你现在的代码运行结果是左对齐的递增星号,和目标样式不符,问题出在这几个地方:
- 你保留了前置空格的循环,但目标样式是左对齐的,不需要前面的空白;
- 代码里只打印了星号,没有处理中间需要的加号;
- 最后一行需要全星号的特殊情况也没考虑到。
我给你调整后的代码,直接就能得到想要的效果:
n = 5 for x in range(n): # 计算当前行的总字符数:第x行(从0开始)长度为2x+1 total_chars = 2 * x + 1 if x == n - 1: # 最后一行全部打印星号 print('*' * total_chars) else: # 非最后一行:首尾是星号,中间填充对应数量的加号 middle_part = '+' * (total_chars - 2) print(f'*{middle_part}*')
代码解释:
- 去掉了原来的前置空格循环:因为目标样式是左对齐的,不需要前面的空白字符;
- 每行总长度计算:
2*x+1对应第0行1个字符、第1行3个字符……直到第4行(最后一行)9个字符,完全匹配目标的行数长度; - 分情况处理:
- 最后一行直接用字符串乘法生成全星号;
- 其他行先打开头的星号,中间填充
总长度-2个加号(减去首尾两个星号的位置),最后打结尾的星号。
如果你更喜欢用嵌套循环的方式(更直观理解每一步的打印),也可以用这段代码:
n = 5 for x in range(n): total_length = 2 * x + 1 if x == n - 1: # 最后一行循环打印星号 for _ in range(total_length): print('*', end='') else: # 先打印开头的星号 print('*', end='') # 中间循环打印加号 for _ in range(total_length - 2): print('+', end='') # 最后打印结尾的星号 print('*', end='') # 每行结束换行 print()
运行这段代码也能得到你想要的三角形样式啦~
内容的提问来源于stack exchange,提问作者Trikstar Pandora
相关产品推荐
相关产品推荐

