Не удается решить это задание с помощью цикла for

Я пытался решить эту задачу в своем классе, но я не могу понять математику правильно.

Используя цикл For.., напишите программу для получения имени, зарплаты и состояния 5 сотрудников. Рассчитайте федеральный налог, налог штата и чистую заработную плату для каждого работника.

statetax = 0
fedtax = 0
employsalary = 0
netsalary = 0

for people in range(5):
    employname = input("Please enter employee name: ")
    employsalary = int(input("Please enter employee salary: "))
    employstate = input("Please enter employee state: ")
    if employsalary >= 100000:
        fedtax = (employsalary * 20) / 100
    else: # employsalary < 100000            
        fedtax = (employsalary * 15) / 100
    if employstate == 'California' or 'Neveda' or 'Arizona' or 'Washington':
        statetax = (employsalary * 10) / 100
    elif employstate == 'Texas' or 'NewMexico' or 'Alabama':
        statetax = (employsalary * 9) / 100
    elif employstate == 'NewYork' or 'Illinois' or 'Wisconsin' or 'Delaware':
        statetax = (employsalary * 8) / 100
    else:
        statetax = (employsalary * 12) / 100
    netsalary = (employsalary - fedtax - statetax)

    print(employname + ' federal tax is: ' +str(fedtax))
    print(employname + ' state tax is: ' +str(statetax))
    print(employname + ' net salary is: ' +str(netsalary))

по какой-то причине расчеты неверны, когда значение занятости умножается на 8 и 9 в двух разных утверждениях, и я не могу понять, почему. Надеюсь, я объяснил это правильно. х_х


person Misterblueguy    schedule 08.04.2020    source источник
comment
Подсказка: or работает иначе.   -  person Saelyth    schedule 08.04.2020
comment
Отвечает ли это на ваш вопрос? Как проверить несколько переменных на соответствие значению?. См. также И/ИЛИ в python и Или условно в проблемах с python   -  person dspencer    schedule 08.04.2020


Ответы (2)


Каждое состояние if должно быть изменено следующим образом.

Замените if employstate == 'California' or 'Neveda' or 'Arizona' or 'Washington': на

if employstate == 'California' or employstate == 'Neveda' or employstate == 'Arizona' or employstate == 'Washington':

Или это другой вариант.

if employstate in ['California', 'Neveda', 'Arizona', 'Washington']:

Строка всегда истинна, если она не равна нулю, и, таким образом, if employstate == 'California' or 'Neveda' равно if employstate == 'California'.

person Gilseung Ahn    schedule 08.04.2020

Обратитесь к этому

statetax = 0
fedtax = 0
employsalary = 0
netsalary = 0

for people in range(5):
    employname = input("Please enter employee name: ")
    employsalary = int(input("Please enter employee salary: "))
    employstate = input("Please enter employee state: ")
    if employsalary >= 100000:
        fedtax = (employsalary * 20) / 100
    else:
        employsalary < 100000
        fedtax = (employsalary * 15) / 100
    if (employstate == 'California') or (employstate == 'Neveda') or (employstate == 'Arizona') or (employstate == 'Washington'):
        statetax = (employsalary * 10) / 100
    elif (employstate == 'Texas') or (employstate == 'NewMexico') or (employstate == 'Alabama'):
        statetax = (employsalary * 9) / 100
    elif (employstate == 'NewYork') or (employstate == 'Illinois') or (employstate == 'Wisconsin') or (employstate == 'Delaware'):
        statetax = (employsalary * 8) / 100
    else:
        statetax = (employsalary * 12) / 100
    netsalary = (employsalary - fedtax - statetax)

    print(employname + ' federal tax is: ' +str(fedtax))
    print(employname + ' state tax is: ' +str(statetax))
    print(employname + ' net salary is: ' +str(netsalary))

A == B или C или D не является допустимым синтаксисом.
A == B или A == C или A == D допустим в вашем случае.

person Divaker Soni    schedule 08.04.2020