为何代码第二次迭代无法生成目标字符图案?请协助排查
问题排查:无法生成指定图案的代码问题
需求:输入row=3、5或任意值x时,生成如下指定图案(以row=3为例):
#When row = 3 1|..# 2|.## 3|###注意:每行的“.”数量与“#”数量相反,比如第1行有2个“.”和1个“#”,第2行有1个“.”和2个“#”,第3行有0个“.”和3个“#”。
你的代码如下:
row = 3 for i in range(1, row + 1): for j in range(1, i + 1): for k in range(1, (row - i) + 1): print(".", end= "") print("#", end="") print("")
问题原因
循环嵌套顺序完全错误。你当前的逻辑是每打印一个#之前,都重复打印一遍当前行所有的.,比如第2行i=2时,j循环要执行2次:
- 第一次j=1:打印1个. + 1个#
- 第二次j=2:又打印1个. + 1个#
最终输出.#.#,和预期的.##完全不符。
正确逻辑应该是:先一次性打印完当前行所有的.,再一次性打印完当前行所有的#,而非每个#都前置一遍.。
修正后的代码
基础循环写法
row = 3 for i in range(1, row + 1): # 打印当前行的所有.,数量为 row - i for k in range(row - i): print(".", end="") # 打印当前行的所有#,数量为 i for j in range(i): print("#", end="") # 换行 print("")
更简洁的字符串乘法写法
Python支持字符串直接乘数字生成重复内容,代码可简化为:
row = 3 for i in range(1, row + 1): print("." * (row - i) + "#" * i)
测试结果
row=3时输出:
..# .## ###
row=5时输出:
....# ...## ..### .#### #####
完全符合需求。
内容的提问来源于stack exchange,提问作者Arif Faisal
相关产品推荐
相关产品推荐

