Как организовать выбор из нескольких вариантов python
Перейти к содержимому

Как организовать выбор из нескольких вариантов python

  • автор:

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

Условный оператор или оператор ветвления — это оператор, конструкция языка программирования, обеспечивающая выполнение определённой команды (набора команд) только при условии истинности некоторого логического выражения, либо выполнение одной из нескольких команд (наборов команд) в зависимости от значения некоторого выражения. Спасибо, Википедия! Такое определение можно найти в любой книге по программированию. Его крайне желательно хотя бы понимать.

Попробую дать более популярное определение: условный оператор выполняет некоторое действие, если указанное условие истинно (равно True).

Вот так выглядит if. else в Python

if True :
print ( ‘Условие истинно, поэтому я напечатаюсь’ )

Приведу пример поинтереснее:

a = 10
b = 5
if a > b:
print ( ‘a больше b равно True ‘ )

Если условие ложно, то код, находящийся под оператором if не выполнится:

a = 3
b = 9999999
if a > b:
print ( ‘Я никогда не напечатаюсь :(‘ )

Дополним предыдущий пример оператором else

a = 3
b = 9999999
if a > b:
print ( ‘Я никогда не напечатаюсь :(‘ )
else :
print ( ‘if не выполнился, так что печатаюсь я’ )

Если условие в if ложно, то выполнится оператор под оператором else

Приведу еще несколько примеров:

# Вывести большее из двух чисел,
# введенных с клавиатуры
a = int ( input ())
b = int ( input ())
if a > b:
print ( ‘Большее число a = ‘ + str (a))
else :
print ( ‘Большее число b = ‘ + str (b))

# Проверить число a на четность
a = int ( input ())
if a % 2 == 0 :
print ( ‘четное’ )
else :
print ( ‘нечетное’ )

Иногда двух вариантов недостаточно, для этого существует оператор elif, а для все остального есть.

age = int ( input ())
if age 10 :
print ( ‘Ваш возраст — это одна цифра :)’ )
el if age 15 :
print ( ‘Геометрия — это жестко (хочу обратно в началку)’ )
else :
print ( ‘В школе было круто’ )

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

a = int ( input ( ‘Введите число от одного до 1 до 100 ‘ ))
if a 10 :
print ( ‘Ваше число меньше 10 ‘ )
el if a 20 :
print ( ‘Ваше число меньше двадцатки’ )
el if a 30 :
print ( ’30 — это потолок’ )
el if a 40 :
print ( ‘Ваше число меньше 40 ‘ )
el if a 50 :
print ( ‘Много, но не больше полтинника’ )
el if a 60 :
print ( ‘Число меньше, чем шесть*десять’ )
el if a 70 :
print ( ‘Ваше число расположено в восьмом десятке’ )
el if a 80 :
print ( ‘Ваше число меньше 80’ )
el if a 90 :
print ( ‘Ваше число находится в 9 десятке’ )
el if a 100 :
print ( ‘Сотня больше вашего числа’ )
else :
print ( ‘Хитро, но меня не обманешь, число слишком большое’ )

Да, мне нечем было заняться, ну и что? Никогда не делайте так, как написано в примере выше. Если в вашем коде больше трех elif значит что-то не так и стоит придумать новый алгоритм. Давайте еще разок: много elif — плохо!

Примеры решения задач

Проверить является ли клетка шахматной доски белой

# Два числа выбираются случайным образом (координаты клетки шахматного поля, от 1 до 8)
# Вывести YES, если клетка белая, и NO, если клетка черная
from random import randint
x = randint (1 ,8 )
y = randint (1 ,8 )
print (x, y)
if (x + y) % 2 == 1 :
print ( ‘YES’ )
else :
print ( ‘NO’ )

Во втором случаем числа вводятся с клавиатуры

x = int ( input ( ‘Введите координату x: ‘ ))
y = int ( input ( ‘Введите координату y: ‘ ))
if (x + y) % 2 == 1 :
print ( ‘YES’ )
else :
print ( ‘NO’ )

Проверить может ли слон ходить с первой шахматной на вторую

# Четыре числа выбираются случайным образом (координаты клетки шахматного поля, от 1 до 8)
# Вывести YES, если ладья может сходить с первой клетки на вторую, и NO, если не может
# Напомню, что ладья ходит так:
# Л ——X
# |
# |
# |
# X
from random import randint
x1 = randint (1 , 8 )
x2 = randint (1 , 8 )
y1 = randint (1 , 8 )
y2 = randint (1 , 8 )
print (x1, y1)
print (x2, y2)
if x1 == x2 and y1 != y2 or x1 != x2 and y1 == y2:
print ( ‘YES’ )
else :
print ( ‘NO’ )

То же самое, но с помощью ввода с клавиатуры

x1 = int ( input ( ‘Введите координату x1: ‘ ))
x2 = int ( input ( ‘Введите координату y1: ‘ ))
y1 = int ( input ( ‘Введите координату x2: ‘ ))
y2 = int ( input ( ‘Введите координату y2: ‘ ))
if x1 == x2 and y1 != y2 or x1 != x2 and y1 == y2:
print ( ‘YES’ )
else :
print ( ‘NO’ )

Решение задач

1. Пользователь вводит два целых числа. Выведите меньшее из них.

2. Пользователь вводит свое имя и возраст. Если возраст пользователя больше 18, то вывести строку «Добрый вечер, name! Вы совершеннолетний, поздравляем!», иначе вывести строку «Привет, name! Приносим извинения, но вы не можете гулять после 22:00». Пример:

# name = ‘Ivan’
# age = 21
>>> Добрый вечер, Ivan! Вы совершеннолетний, поздравляем!

# name = ‘Max’
# age = 14
>>> Привет, Max! Приносим извинения, но вы не можете гулять после 22:00

3. Пользователь вводит три строки. Одна из них равна строке «Python», выведите номер этой строки.

4. Пользователь вводит три целых числа. Два из них равны друг другу. Выведите третье число, не равное остальным. Если среди введенных чисел не оказалось двух равных друг другу, выведите строку «Ошибка».

5. Пользователь вводит целое число. Проверьте является ли это число четырехзначным, если является, то выведите строку «Успешно», иначе «Неудача».

6. Пользователь вводит целое число — текущее время в часах. Если количество часов находится между 7 и 10, то программа должна вывести строку «Пора вставать!», иначе выведется строка «Ты проспал!». Если введенное число отрицательно или больше 23, то программа должна вывести строку «Ошибка».

7. Пользователь вводит текущее время в часах. Если количество часов находится в диапазоне от 0 до 7, то программа выводит строку «Ночь». Если часовая стрелка находится между 7 и 11, то выведется строка «Утро». От 12 до 17 выведется строка «День». Если текущее время находится между 17 и 23, то программа должна вывести строку «Вечер». В случае, когда введенное число отрицательно или превосходит 23, программа должна вывести строку «Ошибка».

8. Пользователь вводит строку — название времени года. Если введенная строка — это лето, то выведите строку «Тополинный пух, жара, июль», если зима, то «Снеговик, снежки и горка», если осень, то «Пора в школу!», если весна, то «Весенняя капель». В случае, если введенная строка не равна ни одному из предложенных вариантов, программа должна выводить строку «Ошибка».

9. Пользователь вводит целое число — номер месяца своего рождения. Выведите строку «Вы родились летом», если номер месяц совпадает с номером одного из летних месяцев. Если номер месяца совпал с номером одного из зимних месяцев, то нужно вывести «К холодам вам не привыкать». Для людей, которые празднуют свой день рождения осенью выведите «Я тоже люблю осенний листопад». Если весна ваше время года выведите строку «Подснежник». В случае, если введенное число меньше единицы или больше 12, выведите строку «Ошибка».

10. Пользователь вводит номер года своего рождения. Если этот год является високосным выведите «Вы случайно родились не 29 февраля?», иначе выведите «Ничего необычного».
Для справки, в високосном году 366 дней, а в обычном — 365. Номер високосного года, делится на 4, за исключением номеров тех годов, которые делятся на 100 и не делятся на 400 (например, годы 300, 1300 и 1900 не являются високосными, а 1200 и 2000 — являются).

11. Пользователь вводит целое число. Выведите его строку-описание вида «отрицательное четное число», «нулевое число», «положительное нечетное число», например, численным описанием числа 190 является строка «положительное четное число».

12. Дано целое число, лежащее в диапазоне от 1 до 999. Если число двузначное, выведите строку «Двузначное», если число содержит одну значащую цифру, то выведите строку «Цифра», если число является трехзначным выведите «Трехзначное». В случае, если введенное число меньше 0 или больше 999, выведите строку «Ошибка!».

13. Шахматный король ходит по горизонтали, вертикали и диагонали, но только на 1 клетку. Даны две различные клетки шахматной доски, определите, может ли король попасть с первой клетки на вторую одним ходом. Программа получает на вход четыре числа от 1 до 8 каждое, задающие номер столбца и номер строки сначала для первой клетки, потом для второй клетки. Программа должна вывести YES, если из первой клетки ходом короля можно попасть во вторую или NO в противном случае. В случае, если хотя бы одно из введенных чисел не лежит в диапазоне от 1 до 8, выведите строку «Ошибка!».

14. Шахматный ферзь ходит по диагонали, горизонтали или вертикали. Даны две различные клетки шахматной доски, определите, может ли ферзь попасть с первой клетки на вторую одним ходом. В случае, если хотя бы одно из введенных чисел не лежит в диапазоне от 1 до 8, выведите строку «Ошибка!».

15. Шахматный конь ходит буквой «Г» — на две клетки по вертикали в любом направлении и на одну клетку по горизонтали, или наоборот. Даны две различные клетки шахматной доски, определите, может ли конь попасть с первой клетки на вторую одним ходом. В случае, если хотя бы одно из введенных чисел не лежит в диапазоне от 1 до 8, выведите строку «Ошибка!».

16. Треугольник существует только тогда, когда сумма любых двух его сторон больше третьей. Дано a, b, c — стороны предполагаемого треугольника. Требуется сравнить длину каждого отрезка-стороны с суммой двух других. Если хотя бы в одном случае отрезок окажется больше суммы двух других, то треугольника с такими сторонами не существует.

Условия (ветвления if-elif-else) и тернарные операторы

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

Выходы Number is bigger than 2 , Number is bigger than 2

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

Условное выражение (или «Тернарный оператор»)

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

  • Порядок аргументов отличается от многих других языков (таких как C, Ruby, Java и т. Д.), Что может привести к ошибкам, когда люди, незнакомые с «удивительным» поведением Python, используют его (они могут изменить порядок).
  • Некоторые считают его «громоздким», поскольку он идет вразрез с нормальным потоком мысли (сначала думая о состоянии, а затем о последствиях).

Результат этого выражения будет таким, как он читается на английском языке — если условное выражение имеет значение True, то оно будет вычисляться как выражение с левой стороны, в противном случае — с правой стороны.

Тенарные операции также могут быть вложенными, как здесь:

Они также обеспечивают способ включения условных в функции лямбды .

Если заявление

В if заявления проверяет состояние. Если он имеет значение True , она выполняет тело , if заявление. Если он имеет значение False , он пропускает тело.

Условием может быть любое допустимое выражение:

Остальное заявление

Оператор else будет выполнять свое тело только в том случае, если все предыдущие условные операторы будут иметь значение False.

Логические выражения

Булевы логические выражения, в дополнение к оценке в True или False , возвращает значение , которое было истолковано как True или False .Это Pythonic способ представить логику, которая в противном случае может потребовать теста if-else.

И оператор

and оператор вычисляет все выражения и возвращает последнее выражение , если все вычисления выражений True .В противном случае она возвращает первое значение , которое вычисляется значение False :

Или оператор

or оператор вычисляет выражения слева направо и возвращает первое значение , которое вычисляет True или последнее значение (если ни один не True ).

Ленивая оценка

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

В приведенном выше примере, print_me никогда не выполняются , потому что Python может определить все выражение False , когда он встречает 0 ( False ). Имейте это в виду , если print_me нужно выполнить , чтобы служить вашей логике программы.

Тестирование на множественные условия

Распространенной ошибкой при проверке нескольких условий является неправильное применение логики.

Этот пример пытается проверить , если две переменные имеют больше 2. Заявление оценивается как — if (a) and (b > 2) .Это дает неожиданный результат , так как bool(a) вычисляется как True , когда не равен нулю. a

Каждую переменную нужно сравнивать отдельно.

Другая, аналогичная ошибка допущена при проверке, является ли переменная одним из нескольких значений. Утверждение в этом примере оценивается как — if (a == 3) or (4) or (6) .Это дает неожиданный результат , так как bool(4) и bool(6) каждый вычисляться значение True

Опять каждое сравнение должно быть сделано отдельно

Использование оператора in является каноническим способом написать это.

Истинные ценности

Следующие значения считаются falsey, в том , что они оценивают в False при применении к логическому оператору.

  • Никто
  • Ложь
  • 0 , или любое цифровое значение эквивалентно нулю, например , 0L , 0.0 , 0j
  • Пустые последовательности: » , «» , () , []
  • Пустые отображения: <>
  • Определяемые пользователем типы где __bool__ или __len__ возвращающие методы 0 или False

Все остальные значения в Python вычисляться True .

Примечание: Распространенная ошибка является просто проверить на фальшивость операции , которая возвращает различные значения Falsey где разница имеет значение. Например, при использовании , if foo() , а не более явным , if foo() is None

Использование функции cmp для получения результата сравнения двух объектов

Python 2 включает в себя cmp функцию , которая позволяет определить , является ли один объект меньше, равен или больше другого объекта. Эта функция может быть использована для выбора из списка на основе одного из этих трех вариантов.

Предположим , вам нужно напечатать ‘greater than’ , если x > y , ‘less than’ , если x < y и ‘equal’ , если x == y .

cmp(x,y) возвращает следующие значения

сравнение Результат х <у -1 х == у 0 х> у 1

Эта функция удалена на Python 3. Вы можете использовать cmp_to_key(func) вспомогательные функции , расположенные в functools в Python 3 , чтобы преобразовать старые функции сравнения ключевых функций.

Тестирование объекта на None и присвоение ему

Вы часто хотите назначить что — то объект , если он не является None , указав , что он не был назначен. Мы будем использовать aDate .

Самый простой способ сделать это состоит в использовании is None тест.

(Обратите внимание , что это не более Pythonic сказать is None вместо == None ) .

Но это может быть немного оптимизирована за счет использования понятия , что not None не оценит , чтобы True в логическое выражение. Следующий код эквивалентен:

[ Сборник задач ]
Тема 9. Условные выражения

Python Workbook Cover T1

Минимальная конструкция условного выражения состоит только из оператора if . Приведем практический пример. Предположим, вы просите пользователя ввести число от 1 до 100 , после чего проводите над ним какую-то операцию (в нашем примере – выводите на печать фразу Вы ввели верное число: X ). Если предоставлено другое число или данные иного типа, то просто игнорируете это значение. Решение представим в виде функции.

Пример – IDE

def is_correct_number(number):
____if number in range(1, 101):
________print(f’Вы ввели верное число:: ‘)

# Тесты
is_correct_number(4)
is_correct_number(421)
is_correct_number(4.11)
is_correct_number(‘Dog’)


Результат выполнения

Вы ввели верное число: 4

Всего возможно 4 варианта написания условных выражений. Рассмотрим их на примерах.

1. Только if (этот способ мы рассмотрели выше)
2. if / else

В данном случае мы проверяем одну ситуацию, а для всех остальных даем общую реакцию, единый исход. Например, для работы функции list_len(lst) нам требуется список, а все остальные типы данных не подходят. Функция просто печатает длину списка в формате Длина предоставленного списка: Х . Если же на вход получен не список, то получим ответ Нужен список в качестве аргумента .

Пример – IDE

def list_len(lst):
____if isinstance(lst, list):
________print(f’Длина предоставленного списка: ‘)
____else:
________print(‘Нужен список в качестве аргумента’)

Результат выполнения

Длина предоставленного списка: 2
Длина предоставленного списка: 0
Нужен список в качестве аргумента

3. if / elif

Конструкция такого вида (с одним или несколькими elif ) отслеживает только тот перечень условий, который нам интересен. Если ни одно из них не выполняется, то значения переменных игнорируются.

Для примера определим, является ли человек бакалавром или магистрантом и сообщим ему об этом. Нужно лишь спросить: на каком курсе в институте вы учитесь? Если ответ 1-4 , то он бакалавр, если 5-6 , то магистрант. Все иные случаи просто игнорируем.

Пример – IDE

def student_rank(year_of_study):
____if year_of_study in range(1, 5):
________print(‘Вы — бакалавр’)
____elif year_of_study in range (5, 7):
________print(‘Вы — магистрант’)

# Тесты
student_rank(2)
student_rank(6)
student_rank(11)
student_rank(0)

Результат выполнения

Вы — бакалавр
Вы – магистрант

4. if / elif / else

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

Пример – IDE

def winter_month(number_of_month):
____if number_of_month == 1:
________print(‘December’)
____elif number_of_month == 2:
________print(‘January’)
____elif number_of_month == 3:
________print(‘February’)
____else:
________print(‘У зимы нет такого номера месяца’)

# Тесты
winter_month(2)
winter_month(1)
winter_month(5)

Результат выполнения

January
December
У зимы нет такого номера месяца

3*. В чем разница между двумя нижеследующими конструкциями? Приведите примеры, когда правильнее использовать первый вариант инструкции (данные замените на свои), а когда второй.

Первая конструкция:
if x % 5 == 0:
____print(‘Х делится на 5’)
if x % 2 == 0:
____print(‘Х – четное число’)

Вторая конструкция:
if x % 2 == 0:
____print(‘Х – четное число’)
elif x % 5 == 0:
____print(‘Х делится на 5’)

Coming Soon!

This is going to be another great website hosted by PythonAnywhere.

PythonAnywhere lets you host, run, and code Python in the cloud. Our free plan gives you access to machines with everything already set up for you. You can develop and host your website or any other code directly from your browser without having to install software or manage your own server.

Need more power? Upgraded plans start at $5/month.

Developer info

Hi! If this is your PythonAnywhere-hosted site, then you’re almost there — you just need to create a web app to handle this domain.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *