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

如何将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)))

问题分析

  1. 现有代码未对单个成员的负收入做处理,直接将所有输入收入求和,导致负收入被计入总收入,不符合需求。
  2. 原代码中判断g < 0仅修改最终人均收入,无法影响单个收入的计算逻辑。
  3. 资助金额的条件判断顺序错误: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:05:20