Баннер мобильный (3) Пройти тест

Условные операторы и операторы ввода-вывода в Python: что это такое, как работает и зачем нужно

Основы Python

Разбор

30 июля 2024

Поделиться

Скопировано
Условные операторы и операторы ввода-вывода в Python: что это такое, как работает и зачем нужно

Содержание

    Расскажем о том какие есть операторы выбора в Python. Узнаем, как вводить и выводить информацию, и на простом примере покажем, как это все можно использовать на практике.

    Условные операторы в Python

    Условные операторы — это частный случай операторов выбора. При написании программ очень часто нужно производить проверку выполнения каких-либо условий. Когда, например, пользователь заполняет форму регистрации на сайте, полезно проверить на корректность заполненные им поля. Или когда нужно проверить значения переменных в формуле перед тем, как производить вычисления. В языке Python, как и во многих других языках программирования, для проверки условий существуют специальные операторы. 

    Конструкция if — else

    Самый простейший случай использования этой конструкции в Python можно представить так:

    a=0
    
    if a==0:
     print("a=0")
    else:
     print("a не равно нулю")

    Здесь, сначала присваивается некоторое значение переменной a. Далее в условном операторе if — else проверяется это значение. Запись if a==0 означает «если a равно нулю». Если данное условие не выполняется, то выведется сообщение, содержащееся в блоке else. Понятно, что в приведенном примере будет выведено сообщение «a=0». Если не нужно производить какие-либо действия в случае, когда условие не выполняется, то блок else не используют:

    a=0
    
    if a==0:
     print("a=0")

    То есть если переменная a не будет равна нулю, то мы вообще не получим никакого сообщения. Когда нужно создать противоположное по значению условие, то можно применить ключевое слово not:

    a=0
    
    if not a==0:
     print("a=0")
    else:
     print("a не равно нулю")

    В этот раз мы увидим сообщение «a не равно нулю». Когда необходимо проверить несколько переменных, разумно использовать слова and (и) или or (или):

    a=0
    b=0
    
    if a==0 and b==0:
     print("a=0 и b=0")
    else:
     print("a и b не равны нулю")

    Слово and говорит о том, что для того, чтобы условие было истинным, нужно, чтобы выполнялись обе его составляющие. То есть и переменная a должна равняться нулю, и b тоже должна быть равна нулю. Только тогда мы получим соответствующее сообщение. В противном случае отработает команда print в блоке else. Если вместо and вписать or, то тогда программа будет вести себя по-другому:

    a=0
    b=0
    
    if a==0 or b==0:
     print("a=0 или b=0")
    else:
     print("a и b не равны нулю")

    В этом случае для истинности условия достаточно выполнения хотя бы одной его части. Другими словами, достаточно, чтобы или a равнялось нулю, или b. 

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

    a=0
    
    result = "a=0" if a==0 else "a не равно нулю"
    
    print(result)

    Как видим, весь условный оператор уместился в одну строку. Это бывает полезно, когда необходимо, чтобы исходник программы занимал поменьше места.

    Конструкция if — elif — else

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

      a = 2
      b = 10
    
      if b > a:
        print("b больше, чем a")
      elif a == b:
        print("a и b равны")
      else:
        print("a больше, чем b")

    В данном случае в консоли будет выведено сообщение, что b больше a. В блоке if как раз и проверяется условие, больше ли b, чем a. В блоке elif, название которого происходит от else if (иначе если), проверяется равенство переменных. Остается лишь случай, когда a больше, чем b. Он обрабатывается блоком else. Иными словами, блоку else достается все то, что не вошло в другие условия.

    Для таких конструкций тоже существует короткая запись. Так, для примера выше она будет выглядеть следующим образом:

    a=2
    b=10
    
    result = "b больше, чем a" if b > a else "a и b равны" if a == b else "a больше, чем b"
    
    print(result)

    Для наглядности (чтобы лучше читалось) Python разрешает использовать скобки:

    result = "b больше, чем a" if b > a else ("a и b равны" if a == b else "a больше, чем b")

    Далее поговорим о вложенных условных операторах.

    Вложенные условные операторы

    Условные операторы можно размещать внутри других условных операторов. Рассмотрим такой пример:

    x = 1
    y = 2
    
    if x > 0:
     if y > 0:              
      print("Точка в первой четверти")
     else:                  
      print("Точка в четвертой четверти")
    
    else:
     if y > 0:              
      print("Точка во второй четверти")
     else:                  
      print("Точка в третьей четверти")

    Эта программа определяет, какой четверти координатной плоскости принадлежит точка с координатами x (абсцисса) и y (ордината). Внешний оператор if — else проверяет знак абсциссы, а внутренние — знак ординаты. В случае приведенного выше примера в консоль будет выведено сообщение о том, что точка находится в первой координатной четверти. 

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

    x = 1
    y = 2
    
    if x == 0 or y == 0:
     print("Точка находится на осях или в начале координат")
     return
    if x > 0:
     if y > 0:
      print("Точка в первой четверти")
     else:
      print("Точка в четвертой четверти")
    else:
     if y > 0:
      print("Точка во второй четверти")
     else:
      print("Точка в третьей четверти")

    Оператор return нужен для того, чтобы завершить выполнение программы сразу после вывода сообщения. Без него начнет выполняться основной if — else, а нам это не нужно, так как тогда в консоли будут выведены два сообщения, одно из которых будет ошибочным.

    Далее рассмотрим оператор выбора match — case, который не так давно появился в Python.

    Оператор выбора match — case

    Этот оператор появился в Python начиная с версии 3.10. Он позволяет сделать выбор действия при совпадении некоторого субъекта с одним из шаблонов. В коде конструкции оператора прописывается определенный субъект (предмет совпадения), а ниже — некоторые варианты (шаблоны), которые будут сравниваться с субъектом. При совпадении шаблона с субъектом происходит какое-либо заранее прописанное действие. Рассмотрим простой пример с этой конструкцией:

    day = 1
    
    match day:
     case 1: print("Понедельник")
     case 2: print("Вторник")
     case 3: print("Среда")
     case 4: print("Четверг")
     case 5: print("Пятница")
     case 6: print("Суббота")
     case 7: print("Воскресенье")
     case _: print("Некорректное значение")

    Здесь в качестве субъекта выступает переменная day. Ниже располагаются 8 блоков case, каждый со своим шаблоном. Если значение переменной совпадает с одним из первых семи шаблонов, то в консоли будет напечатано название соответствующего дня недели. В случае вышеприведенного примера будет выведено слово «Понедельник». Последний case нужен на случай, если совпадений не будет обнаружено. Этот case сработает, если присвоить переменной day, например, значение 8 или любое другое, отличное от тех, которые содержатся в остальных семи шаблонах.

    Ввод и вывод в Python

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

    Функция input

    Общий синтаксис данной функции такой:

    input(prompt)

    Параметр prompt — это подсказка для пользователя, говорящая, что именно нужно ввести. Функция всегда возвращает строковые значения. То есть если введено число, то на выходе функция input вернет это число в виде строки. 

    Работа этой функции хорошо иллюстрируется следующим примером:

    name = input('Введите ваше имя:')
    print('Ваше имя:'+name)

    После запуска программа сразу же просит пользователя ввести свое имя. Когда имя будет введено, следует нажать на клавишу Enter. После этого в следующей строке будет отображено имя пользователя. Функцию input можно использовать и без параметра подсказки, но тогда эту подсказку обычно передают в функцию print:

    print('Введите ваше имя:')
    name = input()
    print('Ваше имя: '+name)

    Далее рассмотрим функцию вывода print.

    Функция print

    Мы уже ее неоднократно использовали, но в самом простом варианте. Рассмотрим и другие варианты. Например, вот эта команда выведет входящие в нее строки как одну:

    print('Привет!', 'Как твои дела?')

    Можно подавать на вход и большее количество строк:

    print('1', '2', '3', '4', '5', '6')

    На вход функции, в качестве еще одного аргумента, можно передать сепаратор. Он послужит разделителем строк. В следующем примере в качестве сепаратора передается запятая:

    print('1', '2', '3', '4', '5', '6', sep=',')

    В результате выполнения этой команды в консоли будут выведены числа от 1 до 6 через запятую. Для переноса строк можно использовать символ новой строки (\n):

    print('Перенос строки\nс помощью символа новой строки')

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

    Решение квадратных уравнений на Python

    Ниже представлен исходный код простой программы для решения квадратных уравнений через дискриминант:

    a = input('Введите значение a: ')
    b = input('Введите значение b: ')
    c = input('Введите значение c: ')
    a = float(a)
    b = float(b)
    c = float(c)
    d = b**2 - 4*a*c
    print('Дискриминант = ' + str(d))
    
    if d < 0:
     print('Корней нет')
    elif d == 0:
     x = -b / (2 * a)
     print('x = ' + str(x))
    else:
     x1 = (-b + d ** 0.5) / (2 * a)
     x2 = (-b - d ** 0.5) / (2 * a)
     print('x₁ = ' + str(x1))
     print('x₂ = ' + str(x2))

    Сначала через функцию input получаем значения коэффициентов уравнения. Мы получили строковые значения коэффициентов, а нам нужны числовые. Поэтому следующие три команды при помощи функции float превращают строки в числа с плавающей точкой.

    Далее вычисляется дискриминант и выводится в консоль посредством функции print. Здесь особое внимание следует обратить на функцию str, на вход которой подается значение дискриминанта. Она нужна, чтобы обратить число в строку, так как строка не может складываться с числом. Если бы выводилось просто значение дискриминанта без подписи, тогда функция str была бы не нужна.

    Дальше идет условный оператор if — elif — else. В блоке if проверяется, меньше ли дискриминант нуля. Если это условие выполняется, то выводится сообщение о том, что корней нет. В блоке elif проверяется равенство дискриминанта нулю. Если это условие выполняется, то происходят вычисление и вывод единственного корня уравнения. Для блока else осталось только условие, когда дискриминант больше нуля. В этом блоке происходят вычисление и вывод в консоль двух корней уравнения.

    А теперь давайте перепишем программу так, чтобы вместо оператора выбора if — elif — else был оператор match — case:

    a = input('Введите значение a: ')
    b = input('Введите значение b: ')
    c = input('Введите значение c: ')
    a = float(a)
    b = float(b)
    c = float(c)
    d = b**2 - 4*a*c
    print('Дискриминант = ' + str(d))
    match d:
     case d if d < 0: print('Корней нет')
     case 0:
      x = -b / (2 * a)
      print('x = ' + str(x))
     case _:
      x1 = (-b + d ** 0.5) / (2 * a)
      x2 = (-b - d ** 0.5) / (2 * a)
      print('x₁ = ' + str(x1))
      print('x₂ = ' + str(x2))

    Как видим, особой разницы здесь нет. Единственное, на что можно обратить внимание, — это на синтаксис записи первого блока case. В него пришлось включить if, так как записи типа d<0 и им подобные не могут напрямую содержаться в case. Таким образом, в некоторых случаях можно заменить if — elif — else на match — case и наоборот.

    Приведенная программа не учитывает того, что первый коэффициент может равняться нулю. Как это можно исправить?

    Ответ

    При a=0 мы получим линейное уравнение вместо квадратного. Следовательно нужно применить соответствующую формулу для вычисления корней линейного уравнения. Вычисление и вывод результата поместим в условный оператор, который размещаем до вычисления дискриминанта:

    a = input('Введите значение a: ')
    b = input('Введите значение b: ')
    c = input('Введите значение c: ')
    a = float(a)
    b = float(b)
    c = float(c)
    
    if a == 0:
     x = -c / b
     print('x = ' + str(x))
     return
    d = b**2 - 4*a*c
    print('Дискриминант = ' + str(d))
    match d:
     case d if d < 0: print('Корней нет')
     case 0:
      x = -b / (2 * a)
      print('x = ' + str(x))
     case _:
      x1 = (-b + d ** 0.5) / (2 * a)
      x2 = (-b - d ** 0.5) / (2 * a)
      print('x₁ = ' + str(x1))
      print('x₂ = ' + str(x2))

    И не забываем про return, чтобы исключить выполнение уже ненужных дальнейших команд.

    Полезные ссылки

    Разбор

    Поделиться

    Скопировано
    0 комментариев
    Комментарии