В третьей лекции курса «Python для журналистов» мы поговорим об условиях: if, elif, else. И чтобы у этой лекции была практическая польза, мы попробуем решить с помощью условий простейшую задачу по подсчету налога и чистого дохода человека в зависимости от его налогового статуса. Для этой задачи мы возьмем несколько статусов физлиц: 

  • индивидуальный предприниматель («ИП1») — платит 15 % налогов со своих доходов за вычетом расходов;
  • индивидуальный предприниматель («ИП2») — платит 6 % налогов со всех своих доходов;
  • самозанятый («СЗ») — тоже платит 6 % со своих доходов;
  • в остальных случаях физлица платят 13 % со своих доходов; их мы в задаче называем «ФЛ».    

Наша задача будет в том, чтобы, используя условия if, elif, else, посчитать, сколько каждый из налоговых агентов заплатит налогов и какой будет чистый доход. Но прежде чем перейти к ее решению, рассмотрим функцию input, которая позволяет считывать данные от пользователя с клавиатуры. 

Input    

Например, мы хотим, чтобы пользователь мог сам вводить свое имя в нашей программе. Для этого введем переменную name и присвоим ей значение input(): name = input(). 

В появившемся окне можно ввести любое имя. Чтобы его распечатать, можно использовать функцию print: print(name). 

Теперь, чтобы узнать налоговый статус человека, введем еще одну переменную business_type и тоже присвоим ей значение input(). Здесь нужно ввести один из четырех статусов нашей задачи — «ИП1», «ИП2», «СЗ», или «ФЛ». 

Теперь введем третью, последнюю, переменную, которую мы будем считывать с клавиатуры — income: income = input().

В ее значение мы введем доход человека. И здесь важно помнить, что те значения, которые мы передаем input(), эта функция переводит в строки (тип str в Python). Для эксперимента попробуйте ввести цифру 100 в input для переменной income. А затем проверьте тип этого объекта: type(income) — будет тип str. Но нам это не подходит: со строками нельзя производить арифметические операции, которые нам необходимы для подсчета налогов и чистого дохода. Чтобы перевести тип income в int (это тип для целых чисел в Python), нам нужно немного изменить операцию присваивания: income = int(input()). 

Если проверить теперь тип income с помощью type(income), то мы увидим int, что нам и нужно. 

Условие if

If на английском означает «если». Соответственно, наш блок кода будет выполняться, только если будет выполнено какое-то условие. В общем виде синтаксис конструкции if выглядит следующим образом: 

if условие: 

    делай что-то   

Для простой практики попробуйте в новой ячейке Jupyter Notebook ввести новую тестовую переменную и присвойте ей какое-то значение: например, x = 10. А в следующей ячейке напишите простейшее условие: 

if x == 10:

    print(True) 

True будет напечатано, потому что имя x действительно ссылается на объект 10. 

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

if business_type == 'ИП1':

   tax = income * 0.15

   net_income = income - tax

В этом блоке кода мы говорим: «Если человек зарегистрирован как ИП1, то его налог будет равен 15 % от доходов (income * 0.15), а чистый доход будет равняться общему доходу минус сумма налогов (net_income = income - tax)».

Чтобы проверить наши вычисления, можно их напечатать: print(tax, net_income).

Но согласитесь, что хотя наша программа и считает все правильно, но хотелось бы, чтобы она выводила что-то более информативное для пользователя. В Python есть очень удобное форматирование строк с помощью буквы f перед открывающими строку кавычками. Применим его для более информативного вывода результатов работы нашей программы.  

Форматирование строк   

Допустим, мы хотим вывести такую строку: «Уважаемый ИМЯ, сумма вашего налога составит СТОЛЬКО-ТО рублей, а чистый доход СТОЛЬКО-ТО рублей». Для этого изменим наше выражение print на следующее: 

print(f'{name}, ваш налог составит {int(tax)} рублей, а чистый доход -- {int(net_income)} рублей.' 

В фигурные скобки заключены имена наших переменных. 

Условие elif

Elif — это сокращенное от английского else if, что на русский язык можно перевести как «еще если». У elif такой же синтаксис, как у if: 

elif условие: 

    делай что-то   

Иными словами, если наше условие в if не выполнено, интерпретатор затем проверяет условие в elif, и если оно верно, то он выполняет блок кода под этим условием. 

Проверим это на следующем налоговом агенте. Напишем такой блок кода: 

elif business_type == 'ИП2':

   tax = income * 0.06

   net_income = income - tax

   print(f'{name}, вы зарегистрированы как {business_type} ваш налог составит {int(tax)} рублей, а чистый доход -- {int(net_income)} рублей.').

Теперь вернитесь к началу тетрадки и задайте новые значения в функции input для переменных name, business_type (здесь нужно ввести ИП2) и income. Программа должна посчитать значения для «ИП2» и вывести их на экран. 

Условия и логические операторы

Теперь нам нужно посчитать значения для самозанятых («СЗ»). У них ставка налога такая же, как у «ИП2». И естественным желанием было бы скопировать весь блок кода, который относится к «ИП2» и подставить его под «СЗ». Но это плохая практика. Лучше использовать в таком случае логический оператор. В нашем случае это оператор or, что на русский переводится как «или»: 

elif business_type == 'ИП2' or business_type == 'СЗ':

   tax = income * 0.06

   net_income = income - tax

   print(f'{name}, вы зарегистрированы как {business_type} ваш налог составит {int(tax)} рублей, а чистый доход -- {int(net_income)} рублей.')  

В этом блоке кода мы как бы говорим: «Если тип равен „ИП2“ или тип равен „СЗ“, делай что-то».

Условие else

Условие else (что на русский переводится как «иначе») выполняется, если не были выполнены все условия выше. Поэтому его синтаксис в общем виде выглядит так: 

else:

    делай что-то     

Обратите внимание, что само условие в конструкции else не уточняется, в отличие от if и elif. Что логично, потому что блок кода после него будет выполнен, только если не выполнены все условия выше. 

Поэтому, чтобы посчитать налог и чистый доход для человека, работающего в какой-то организации, нам нужно просто написать: 

else:

   tax = income * 0.13

   net_income = income - tax

   print(f'{name}, вы зарегистрированы как {business_type} ваш налог составит {int(tax)} рублей, а чистый доход -- {int(net_income)} рублей.') 

Тетрадку Jupyter Notebook с этим уроком можно найти в нашем GitHub здесь.