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()
问题根源
- 循环提前终止:原
while循环里第一遍打印菜单后直接执行break,导致循环只跑一次就退出,完全没实现循环菜单的逻辑 - 逻辑位置错误:输入选择和功能分支判断都在循环外部,执行完一次操作后无法回到菜单界面
- 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
相关产品推荐
相关产品推荐

