You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用函数实现原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")

关键细节说明

  1. 临时变量的必要性:通过a, b = x, y保存当前循环的坐标值,后续的辗转相除法只操作临时变量a和b,不会改变x和y的取值,这样嵌套循环才能正常遍历所有n×n的坐标对。
  2. 排版对齐优化:原代码else分支仅输出一个空格,会导致星号和空格的宽度不一致,星阵排版混乱;改成两个空格" "后,每个位置的宽度统一,星阵视觉效果更整齐。
  3. 换行逻辑补充:原代码没有换行处理,所有输出会挤在一行,添加sys.stdout.write("\n")后,每一行输出结束后自动换行,符合星阵的预期展示效果。

测试输入n=5的效果,会和原代码完全一致:

* * * * * 
*   *   * 
* *   * * 
*   *   * 
* * * * * 

内容的提问来源于stack exchange,提问作者Njx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:55:03