如何将Python家庭收入计算程序中的负收入转为0?
问题:Python程序中如何将单个家庭成员的负收入转为0计算人均收入
需求:计算家庭人均月收入及资助金额,要求每个家庭成员的负收入(亏损)单独计为0,但现有代码仅能在家庭总收入为负时将人均收入置0,无法处理单个负收入。
正确输入输出示例:
Family members: 4 Children in family: 2 Input family member income (yearly): 414575 Input family member income (yearly): -12500 Input family member income (yearly): 0 Input family member income (yearly): 0 (Monthly) income per person: 8636.98 Amount of funding: 3200
现有代码:
a = int(input('Family members : ')) b = int(input('Children in family ')) income = c = ('Input family member income YEARLY : ') stop = "Wrong Data." if a < b and a <= 0 or b < 0: print(stop) elif a == b: print(stop) else: lst = [] for n in range(a): incomes = float(input(c)) lst.append(incomes) g = round(sum(lst) / (12 * a), 2) z = print("MONTLY income per person: ", g) if g < 1500: print("Amount of funding: ", (800 * b) + (1200 * (a - b))) elif g >= 1500: print("Amount of funding: ", (500 * b) + (1100 * (a - b))) elif g > 2500: print("Amount of funding: ", (300 * b) + (900 * (a - b)))
问题分析
- 现有代码未对单个成员的负收入做处理,直接将所有输入收入求和,导致负收入被计入总收入,不符合需求。
- 原代码中判断
g < 0仅修改最终人均收入,无法影响单个收入的计算逻辑。 - 资助金额的条件判断顺序错误:
g >=1500的分支会覆盖g>2500的情况,导致后者永远不会触发。
解决方案
1. 处理单个负收入
在每次输入家庭成员收入后,立即判断该收入是否为负,若为负则替换为0再加入列表。可以用max()函数简化逻辑,或用if语句实现。
2. 修复资助金额判断顺序
将g>2500的判断放在g>=1500之前,确保高收入分支能被正确触发。
修改后的完整代码
a = int(input('Family members : ')) b = int(input('Children in family ')) c = 'Input family member income YEARLY : ' stop = "Wrong Data." # 修复数据合法性判断逻辑(原逻辑有逻辑运算符优先级问题) if (a <= 0 or b < 0) or a <= b: print(stop) else: lst = [] for n in range(a): incomes = float(input(c)) # 核心修改:将单个负收入转为0 incomes = max(incomes, 0) lst.append(incomes) # 计算人均月收入 monthly_per_person = round(sum(lst) / (12 * a), 2) print("(Monthly) income per person: ", monthly_per_person) # 修复资助金额判断顺序 if monthly_per_person < 1500: funding = (800 * b) + (1200 * (a - b)) elif monthly_per_person > 2500: funding = (300 * b) + (900 * (a - b)) elif monthly_per_person >= 1500: funding = (500 * b) + (1100 * (a - b)) print("Amount of funding: ", funding)
代码说明
- 单个负收入处理:
max(incomes, 0)确保任何小于0的收入都会被替换为0,符合需求。 - 数据合法性判断:调整了逻辑运算符优先级,避免原代码中判断条件的漏洞。
- 资助金额判断:将
>2500的分支提前,确保不同收入区间的资助金额计算正确。
测试正确示例输入后,输出将与预期一致:
Family members: 4 Children in family: 2 Input family member income YEARLY : 414575 Input family member income YEARLY : -12500 Input family member income YEARLY : 0 Input family member income YEARLY : 0 (Monthly) income per person: 8636.98 Amount of funding: 3200
内容的提问来源于stack exchange,提问作者Matty Cash
相关产品推荐
相关产品推荐

