使用Python实现Euclidean algorithm求解GCD的代码错误排查求助
你提交的GCD代码存在的问题汇总
- 参数设计逻辑冲突:你定义的
gcd函数已经设置了形参m、n,但函数内部又通过input读取用户输入重新赋值,完全覆盖了传入的参数,函数的形参完全失效,不符合常规的函数封装设计逻辑。 - 缩进语法错误:
while语句的缩进层级比上方的input代码多了4个空格,违反Python的缩进规则,运行会直接抛出语法错误。 - 循环语句语法错误:
while m!=n后缺少必要的冒号:,Python中所有判断、循环的条件语句末尾必须加冒号。 - 算法与返回逻辑错误:首先你实现的是辗转相减法,并非题目要求的欧几里得(辗转相除法)算法;其次
return语句放在了while循环内部,第一次循环执行完就会直接返回结果,根本不会循环到m == n的终止条件,计算逻辑完全错误。 - 非法字符错误:代码里的减号是全角字符
−,并非Python可以识别的半角减号-,运行会报语法错误。
符合要求的修正代码
按照题目要求的欧几里得算法规则,修正后的可运行代码如下:
def gcd(m, n): # 按照规则循环:当m不为0时,持续执行n, m = m, n%m while m != 0: n, m = m, n % m # m为0时返回n即为最大公约数 return n # 读取用户输入并调用函数 m = int(input("Enter the number for m:")) n = int(input("Enter the number for n:")) print(f"两个数的最大公约数是:{gcd(m, n)}")
内容的提问来源于stack exchange,提问作者Kassidi Turner
相关产品推荐
相关产品推荐

