You need to enable JavaScript to run this app. Python不同函数变量修改是否互不影响?快乐数代码无输出咨询
优惠活动
大模型
产品
解决方案
定价
更多

Python不同函数变量修改是否互不影响?快乐数代码无输出咨询

不同函数内的同名变量是否会互相影响

Python 的函数拥有独立的局部命名空间,除非显式声明全局变量、使用嵌套闭包引用,或是操作可变对象的内存地址,不同函数里定义的同名局部变量完全隔离,不会出现修改变量后跨函数生效的情况。
对应你写的代码:

  • happy 函数里的形参 num、变量 finding,都是 happy 自己的局部变量,只在 happy 的执行过程中存在
  • hfind 函数里的形参 num、变量 total,都是 hfind 自己的局部变量,你在 hfind 内部写 num = total,只是修改 hfind 内部这个 num 的指向,完全不会改动 happy 函数里的 num 值,两者只是名字相同,本质是互不干扰的独立变量。
运行 happy(100) 无输出的原因

你的代码没有输出,核心是死循环卡住了执行流程,根本走不到后面的 if 判断打印语句,具体拆解问题点:

  1. 循环逻辑断层
    你在 happy 的 while 循环里,把 hfind(num) 的返回值赋值给了 finding,但从来没有把这个新的数值回传给循环判断用的 num 变量。
    跑 happy(100) 时的实际执行流是:
    • 初始 num = 100,字符串长度为3,满足 len(str(num)) > 1 的循环条件
    • 进入循环调用 hfind(100),计算得到返回值2,赋值给 finding
    • 循环体执行完,回头判断循环条件时,还是拿初始的 num=100 算长度,永远满足大于1的条件,程序就卡在无限循环里,根本碰不到后面的打印语句。
  2. 快乐数计算逻辑错误
    快乐数的定义是「重复计算每一位数字的平方和,直到结果为1」,你在 hfind 里写的是 total += int(i) * 2,也就是把每一位数字乘2累加,完全不符合平方和的计算规则,哪怕跳出死循环,判断结果也是错的。
  3. 边界情况遗漏
    如果最开始传入的 num 本身就是个位数(比如1、7),while 循环根本不会执行,此时 finding 变量从来没有被定义,走到后面判断 if finding == 1 的逻辑时,会直接触发 NameError。
修正后的可运行代码
def happy(num):
    # 记录出现过的数值,避免非快乐数进入固定循环导致死循环
    seen = set()
    while num != 1 and num not in seen:
        seen.add(num)
        # 把每次计算得到的新值赋值回num,让循环基于最新值判断
        num = hfind(num)
    return num == 1

def hfind(num):
    total = 0
    for i in str(num):
        # 修正计算逻辑:累加每一位数字的平方
        total += int(i) ** 2
    return total

# 调用测试
print(happy(100))

测试 happy(100) 时,计算流程为 100 → 1² + 0² + 0² =1,最终会正确输出 True。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 19:54:03