皮蛋子h 发表于 2025-3-5 20:27:03

Who can tell me why?

def gcd(a,b):
    a=int(a)
    b=int(b)
    r=a%b
    while 1:

      if r==0:
            print(b)
            break
      else:
            a,b=b,r
            continue

why 运行不了

FishC 发表于 2025-3-5 20:27:14

问题分析和解决方案

你在代码中定义了一个计算最大公约数的函数 gcd(a, b),其中存在一个问题导致代码不能如预期运行。具体问题如下:

1. 未更新余数: 在 while 1: 循环中,你只计算了一次余数 r = a % b ,但并没有在循环内部更新 r 的值。

要修复这个问题,你需要在循环中不断更新余数。下面是修改后的代码:


def gcd(a, b):
    a = int(a)
    b = int(b)
   
    while True:
      r = a % b
      if r == 0:
            print(b)
            break
      else:
            a, b = b, r


调整后的代码在每次循环中重新计算余数,使得算法能够正确运行。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

ZhihanXing 发表于 2025-3-6 10:44:10

r的值在循环外面赋值,也就是说如果第一次r不等于0,那么会一直死循环else里的内容,else里面还没有给r赋值的语句,所以会一直死循环……根据fishC的提示改就行,另外论坛帖子是可以放代码的,就在文本框上面那个<>按钮上。def gcd(a, b):
    a = int(a)
    b = int(b)
    #r = a % b

    while 1:
      r = a % b
      if r == 0:
            print(b)
            break
      else:
            a, b = b, r
            continue
gcd(4,6)

player-none 发表于 2025-3-6 21:38:00

你说呢?

gcd() 函数根本没有被调用。
页: [1]
查看完整版本: Who can tell me why?