使用for循环计算个人通胀率结果错误,求修正方案
修复个人通胀率计算的for循环版本
原代码(Abdulmalik Abougarboa 编写)
while True: try: year = int(input('Please enter the year that you want to calculate the personal interest rate for: ')) expenditureCategories = int(input('Please enter the number of expenditure categories: ')) break except: print('\nerror ~ please insure you have entered a valid integer') if expenditureCategories == 1: expensesPre1 = int(input('Please enter expenses for previous year: ')) expensesinterest1 = int(input('Please enter expenses for year of interest: ')) current = (expensesinterest1) pre = (expensesPre1) infRate = ((current - pre)/ current)*100 print (f'Personal inflation for {year} is {infRate}%')
我编写的for循环版本(存在问题)
while True: try: year = int(input('Please enter the year that you want to calculate the personal interest rate for: ')) expenditureCategories = int(input('Please enter the number of expenditure categories: ')) break except: print('\nerror ~ please insure you have entered a valid integer') for i in range(expenditureCategories): while True: try: expensesPre = int(input('Please enter expenses for previous year: ')) expensesinterest = int(input('Please enter expenses for year of interest: ')) current = (expensesinterest) pre = (expensesPre) infRate = ((current - pre)/ current)*100 break except: print('\nerror ~ please ensure you have entered a valid integer') print (f'Personal inflation for {year} is {infRate}%')
测试输入数据
Please enter the year that you want to calculate the personal interest rate for: 2022 Please enter the number of expenditure categories: 2 Please enter expenses for previous year: 100 Please enter expenses for year of interest: 100 Please enter expenses for previous year: 200 Please enter expenses for year of interest: 300
问题说明
两段代码运行上述测试数据结果不同,原代码逻辑正确,需要修改for循环版本使其输出一致结果。
修复方案
问题核心:原代码逻辑是基于所有支出类别的总支出计算整体通胀率,而当前for循环版本仅保留了最后一个类别的单独通胀率。修改时需要累加所有类别的支出总和,再计算整体通胀率:
- 在循环前初始化两个总和变量,用于累加所有类别的去年和今年支出
- 循环内仅完成输入验证与总和累加,不单独计算单个类别通胀率
- 循环结束后用总支出计算整体通胀率
修改后的代码:
while True: try: year = int(input('Please enter the year that you want to calculate the personal interest rate for: ')) expenditureCategories = int(input('Please enter the number of expenditure categories: ')) break except: print('\nerror ~ please insure you have entered a valid integer') # 初始化总支出累加变量 total_pre = 0 total_current = 0 for i in range(expenditureCategories): while True: try: expensesPre = int(input('Please enter expenses for previous year: ')) expensesinterest = int(input('Please enter expenses for year of interest: ')) # 累加当前类别的支出到总和 total_pre += expensesPre total_current += expensesinterest break except: print('\nerror ~ please ensure you have entered a valid integer') # 用总支出计算整体通胀率 infRate = ((total_current - total_pre) / total_current) * 100 print(f'Personal inflation for {year} is {infRate}%')
运行测试数据后,会得到和原代码逻辑一致的结果:总去年支出300,总今年支出400,通胀率为(400-300)/400*100 = 25%。
内容的提问来源于stack exchange,提问作者rnsleep
相关产品推荐
相关产品推荐

