Home > Blockchain >  Convert negative results from the list into 0 in Python
Convert negative results from the list into 0 in Python

Time:10-31

I've done a program which counts income per family member and gives a result of funding. There is a problem when one of the family member's "earns negative value" (has a loss), I want it to count negative values as 0.

Example of right answer:

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

My result is

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)))

I've tried IF function

if g < 0:
        g = 0

but it only counts it as 0 when whole family income is negative (when sum is < 0), and I need it to count every inputed negative income as 0.

CodePudding user response:

The best approach is to use a conditional comprehension, as suggested @Swifty, in the comments.

Here is your code fixed and using more descriptive variable names:

members = int(input('Family members: '))
children = int(input('Children in family: '))
adults = members - children

if members < children and members <= 0 or children < 0:
    print('Wrong data.')
elif members == children:
    print('Wrong data.')
else:
    incomes = []
    for _ in range(members):
        incomes.append(float(input('Input family member income YEARLY: ')))

    monthly_income = round(
        sum(income for income in incomes if income > 0) / (12 * members), 2
    )

    print('MONTHLY income per person: ', monthly_income)

    if monthly_income < 1500:
        print('Amount of funding:', (800 * children)   (1200 * adults))
    elif monthly_income >= 1500:
        print('Amount of funding:', (500 * children)   (1100 * adults))
    elif monthly_income > 2500:
        print('Amount of funding:', (300 * children)   (900 * adults))

Using the input values from your question, the code above will result in the following output:

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

You can also use an easier logic (at least in IMHO):

members = int(input('Family members: '))
children = int(input('Children in family: '))
adults = members - children

if members > children and adults > 0 and children >= 0:
    incomes = []
    for _ in range(members):
        incomes.append(float(input('Input family member income YEARLY: ')))

    monthly_income = round(
        sum(income for income in incomes if income > 0) / (12 * members), 2
    )

    print('MONTHLY income per person: ', monthly_income)

    if monthly_income < 1500:
        print('Amount of funding:', (800 * children)   (1200 * adults))
    elif monthly_income >= 1500:
        print('Amount of funding:', (500 * children)   (1100 * adults))
    elif monthly_income > 2500:
        print('Amount of funding:', (300 * children)   (900 * adults))
else:
    print('Wrong data.')

CodePudding user response:

If I understood the problem, just append the income only if it is >0. So:

for n in range(a):
        incomes = float(input(c))
        if incomes > 0:
           lst.append(incomes)

CodePudding user response:

Have you tried doing it with the variable incomes? If you say:

if incomes < 0: 
    incomes = 0

So then as soon as the input gets added to the list, it gets counted as zero if its value is negative?

  • Related