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

如何在Python中实现变量累计求和?解决函数内变量累加失败问题

问题分析与解决方案

问题根源

代码无法实现累计的核心原因有两个:

  1. 变量每次被重置:每次调用take_input()时,函数第一行都会重新定义daily_expense = 0,之前的累计值直接被清零。
  2. 递归调用导致变量隔离:选择递归调用take_input()而非在当前函数内循环处理,每次递归都会创建新的函数栈,变量完全独立,无法共享累计值。

推荐解决方案(非递归,更易维护)

调整逻辑,让daily_expense只初始化一次,所有支出操作都共享这个变量:

def take_input():
    daily_expense = 0
    while True:
        inp = int(input("How much did you spend?: "))
        daily_expense += inp
        print(f"Total expenses = {daily_expense}")
        
        # 处理是否继续添加的确认
        while True:
            x = input("Add another expense? Y/N: ").lower()
            if x == "y":
                break  # 回到外层循环,继续输入新支出
            elif x == "n":
                return  # 直接退出函数
            else:
                print("Please return a valid response")

def start_program():
    start = input("Add expense? Y/N: ").lower()
    if start == "y":
        take_input()

start_program()

修改说明

  • daily_expense仅在函数开头初始化一次,后续每次输入支出都会直接累加到该变量上
  • 用双层循环替代递归:内层循环处理用户的有效性输入,外层循环负责重复接收支出数据,全程共享同一个累计变量

可选方案(保留递归逻辑)

如果坚持用递归,可以通过参数传递累计值,让每次递归调用都基于之前的结果计算:

def take_input(daily_expense=0):
    inp = int(input("How much did you spend?: "))
    daily_expense += inp
    print(f"Total expenses = {daily_expense}")

    while True:
        x = input("Add another expense? Y/N: ").lower()
        if x == "y":
            take_input(daily_expense)  # 将当前累计值传入下一次调用
            break  # 退出当前循环,避免重复询问
        elif x == "n":
            break
        else:
            print("Please return a valid response")

def start_program():
    start = input("Add expense? Y/N: ").lower()
    if start == "y":
        take_input()

start_program()

修改说明

  • 给take_input()添加默认参数daily_expense=0,第一次调用时使用初始值0
  • 每次选择继续添加时,将当前累计的daily_expense作为参数传入新的函数调用,确保新的计算基于之前的累计值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:31:13