如何修改仅用while循环的Python代码以正确打印指定图案?
修复仅用while循环打印交替图案的奇数行问题
问题场景
想要仅通过while循环打印*和#交替的图案,现有代码在列数h为偶数时正常运行,但h为奇数时无法输出完整的行(比如调用tapis_2(5,5)时,每行仅输出4个字符,预期是5个)。原代码如下:
def etoile(): print('*',sep='',end='') def diese() : print('#', sep='',end='') def nouvelle_ligne() : print() def tapis_2(l,h): i = 0 while i<l: j = 0 while j<h//2: etoile() diese() j += 1 nouvelle_ligne() i += 1
问题原因
原代码通过h//2控制内层循环次数,每次循环打印1个*加1个#(共2个字符)。当h为奇数时,h//2会向下取整(比如5//2=2),内层循环仅输出4个字符,缺少最后1个*,导致每行长度不足。
修改方案
在每行的内层循环结束后,判断h是否为奇数,若是则额外调用一次etoile()补全最后一个字符。修改后的tapis_2函数如下:
def tapis_2(l,h): i = 0 while i < l: j = 0 while j < h // 2: etoile() diese() j += 1 # 处理奇数列的情况,补一个* if h % 2 != 0: etoile() nouvelle_ligne() i += 1
修改说明
- 内层循环保持原逻辑,处理
h//2组*#,确保偶数列时刚好输出h个字符 - 新增的奇偶判断语句,在h为奇数时补打一个
*,补全该行的第h个字符 - 全程仅使用while循环,且调用了指定的
etoile()、diese()、nouvelle_ligne()三个函数,符合要求
内容的提问来源于stack exchange,提问作者Mohamed Nabassoua
相关产品推荐
相关产品推荐

