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

Jupyter中Basic Financial Budget程序循环功能故障求助

基础财务预算跟踪程序循环问题修复

我正在为大学数据科学课程制作基础财务预算跟踪程序,但循环功能出了问题。预期只有当输入的selection为5时才结束循环,目前遇到三个问题:

  • 将break放在print('Thank you!')下方时,Jupyter报错“break不在循环内”
  • 移除while语句后的break,输入OverallBudget后程序会无限打印选项1-5
  • 保留该break,程序只显示一次选项就结束,无法返回选择菜单

故障代码

def main(): 
    OverallBudget = int(input('Please State Your Current Overall Budget:'))
    
    def AddExpense(OverallBudget):
        Add_ExpenseAmount = int(input('Enter Expense Amount:'))
        Add_FrequencyExpense = int(input('Enter Monthly Frequency of the Expense:'))
        Add_OverallBill = Add_ExpenseAmount * Add_FrequencyExpense
        OverallBudget = OverallBudget - Add_OverallBill
        CheckBudget(OverallBudget)
        return OverallBudget 
    
    def SubstractExpense(OverallBudget):
        Sub_ExpenseAmount = int(input('Enter Expense Amount:'))
        Sub_FrequencyExpense = int(input('Enter Monthly Frequency of the Expense:'))
        Sub_OverallBill = Sub_ExpenseAmount * Sub_FrequencyExpense
        if Sub_OverallBill <= (OverallBudget): 
            OverallBudget = OverallBudget + Sub_OverallBill
            CheckBudget(OverallBudget)
        else:
             print('Please Re-Check the Amount Entered, it Cannot Exceed Overall Budget')
        return OverallBudget
    

    def AddRevenue(OverallBudget):
        Add_RevenueAmount = int(input('Enter Revenue Amount:'))
        OverallBudget = OverallBudget + Add_RevenueAmount 
        CheckBudget(OverallBudget)
        return OverallBudget
    

    def SubstractRevenue(OverallBudget):
        Sub_RevenueAmount = int(input('Enter Revenue Amount:'))
        OverallBudget = OverallBudget - Sub_RevenueAmount
        CheckBudget(OverallBudget)
        return OverallBudget
    

    def CheckBudget(OverallBudget):
        if OverallBudget >= 0:
            print('Your Overall Budget is:',OverallBudget)
        else: 
            print('You Exceeded Your Monthly Budget')
            print('Check your Expenses and Revenue')
            print('Current Balance',OverallBudget)
    

    selection = 0 
 
    while selection != 5: 
        print ('1 - Add Expenses')
        print ('2 - Remove Expenses')
        print ('3 - Add Revenue Stream')
        print ('4 - Remove Revenue Stream')
        print ('5 - End')
        break
              
  
    selection = int(input("State Your Input:"))
    
    if selection == 1:
        OverallBudget = AddExpense(OverallBudget)
    elif selection == 2: 
        OverallBudget = SubstractExpense(OverallBudget)
    elif selection == 3:
        OverallBudget = AddRevenue(OverallBudget)
    elif selection == 4:
        OverallBudget = SubstractRevenue(OverallBudget)
    elif selection == 5:
        print('Thank you!')
    else:
        print('Wrong Entry, Try Something Else:')

main()

问题根源

  1. 循环提前终止:原while循环里第一遍打印菜单后直接执行break,导致循环只跑一次就退出,完全没实现循环菜单的逻辑
  2. 逻辑位置错误:输入选择和功能分支判断都在循环外部,执行完一次操作后无法回到菜单界面
  3. break作用域错误:当尝试把break放到selection==5的分支里时,这个分支不在while循环范围内,所以Python会报错“break不在循环内”

修复后的代码

def main(): 
    OverallBudget = int(input('请输入当前总预算:'))
    
    def AddExpense(OverallBudget):
        Add_ExpenseAmount = int(input('输入支出金额:'))
        Add_FrequencyExpense = int(input('输入该支出的每月发生次数:'))
        Add_OverallBill = Add_ExpenseAmount * Add_FrequencyExpense
        OverallBudget = OverallBudget - Add_OverallBill
        CheckBudget(OverallBudget)
        return OverallBudget 
    
    def SubstractExpense(OverallBudget):
        Sub_ExpenseAmount = int(input('输入要移除的支出金额:'))
        Sub_FrequencyExpense = int(input('输入该支出的每月发生次数:'))
        Sub_OverallBill = Sub_ExpenseAmount * Sub_FrequencyExpense
        if Sub_OverallBill <= OverallBudget: 
            OverallBudget = OverallBudget + Sub_OverallBill
            CheckBudget(OverallBudget)
        else:
             print('请重新检查输入金额,不能超过当前总预算')
        return OverallBudget
    

    def AddRevenue(OverallBudget):
        Add_RevenueAmount = int(input('输入收入金额:'))
        OverallBudget = OverallBudget + Add_RevenueAmount 
        CheckBudget(OverallBudget)
        return OverallBudget
    

    def SubstractRevenue(OverallBudget):
        Sub_RevenueAmount = int(input('输入要移除的收入金额:'))
        OverallBudget = OverallBudget - Sub_RevenueAmount
        CheckBudget(OverallBudget)
        return OverallBudget
    

    def CheckBudget(OverallBudget):
        if OverallBudget >= 0:
            print('当前总预算为:',OverallBudget)
        else: 
            print('你已超出月度预算')
            print('请检查你的支出和收入')
            print('当前余额:',OverallBudget)
    

    selection = 0 
 
    while selection != 5: 
        print ('1 - 添加支出')
        print ('2 - 移除支出')
        print ('3 - 添加收入来源')
        print ('4 - 移除收入来源')
        print ('5 - 退出')
              
        selection = int(input("请输入你的选择:"))
        
        if selection == 1:
            OverallBudget = AddExpense(OverallBudget)
        elif selection == 2: 
            OverallBudget = SubstractExpense(OverallBudget)
        elif selection == 3:
            OverallBudget = AddRevenue(OverallBudget)
        elif selection == 4:
            OverallBudget = SubstractRevenue(OverallBudget)
        elif selection == 5:
            print('谢谢使用!')
            break  # 这里的break在循环内,能正确终止循环
        else:
            print('输入错误,请重新选择:')

main()

关键修改点

  • 将输入选择和所有功能分支判断全部移到while循环内部,确保每次操作后能回到菜单
  • 移除原循环内的break,只在用户选择5(退出)时执行break终止循环
  • 把所有英文提示翻译成中文(可根据需求改回英文)
  • 无效输入后,循环会继续执行,重新显示菜单,不会直接退出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:54:51