如何不使用函数实现原GCD星阵Python代码的功能?
问题分析与修正方案
你的代码核心问题是在计算GCD的while循环里直接修改了外层循环的迭代变量x和y,这会彻底打乱嵌套循环的遍历逻辑,导致程序无法正确遍历所有(i,j)坐标对。
要解决这个问题,我们只需要在计算GCD前,把当前的x和y复制到临时变量中,用临时变量来执行辗转相除法,避免影响原循环变量的取值。
修正后的代码
import sys n = int(sys.argv[1]) for x in range(n): for y in range(n): # 复制当前循环的坐标值到临时变量,避免修改原循环变量 a, b = x, y while b != 0: temp = b b = a % b a = temp GCD = a if GCD == 1: sys.stdout.write("* ") else: # 用两个空格和"* "的长度保持一致,让星阵排版对齐 sys.stdout.write(" ") # 每一行遍历结束后换行,让星阵按行显示 sys.stdout.write("\n")
关键细节说明
- 临时变量的必要性:通过
a, b = x, y保存当前循环的坐标值,后续的辗转相除法只操作临时变量a和b,不会改变x和y的取值,这样嵌套循环才能正常遍历所有n×n的坐标对。 - 排版对齐优化:原代码else分支仅输出一个空格,会导致星号和空格的宽度不一致,星阵排版混乱;改成两个空格
" "后,每个位置的宽度统一,星阵视觉效果更整齐。 - 换行逻辑补充:原代码没有换行处理,所有输出会挤在一行,添加
sys.stdout.write("\n")后,每一行输出结束后自动换行,符合星阵的预期展示效果。
测试输入n=5的效果,会和原代码完全一致:
* * * * * * * * * * * * * * * * * * * *
内容的提问来源于stack exchange,提问作者Njx
相关产品推荐
相关产品推荐

