Python: Условная конструкция else
Посмотрите на функцию ниже. Она определяет тип предложения по последнему символу: если предложение заканчивается вопросительным знаком, функция вернет Sentence is question, иначе — Sentence is normal:
def get_type_of_sentence(sentence: str) -> str:
last_char = sentence[-1]
if last_char == '?':
sentence_type = 'question'
else:
sentence_type = 'normal'
return "Sentence is " + sentence_type
print(get_type_of_sentence('Hodor')) # => Sentence is normal
print(get_type_of_sentence('Hodor?')) # => Sentence is questionМы добавили else и новый блок. Он выполнится, если условие в if окажется ложным. Еще в блок else можно вкладывать другие условия if. Else переводится "иначе", "в ином случае".
┌───────────┐
│ условие? │
└─────┬─────┘
True │ │ False
↓ ↓
┌──────────┐ ┌──────────┐
│ тело if │ │ тело else│
└──────────┘ └──────────┘Пример вложенных блоков:
number = 10
if number > 10:
print("Number is greater than 10")
else:
if number == 10:
print("Number is exactly 10")
else:
print("Number is less than 10")Оформить конструкцию if-else можно двумя способами. С помощью отрицания можно изменить порядок блоков:
def get_type_of_sentence(sentence: str) -> str:
last_char = sentence[-1]
if last_char != '?':
sentence_type = 'normal'
else:
sentence_type = 'question'
return "Sentence is " + sentence_typeЧтобы конструкцию было легче оформлять, старайтесь выбирать проверку без отрицаний и подстраивайте содержимое блоков под нее.
На примере использования else видно, как важно не забывать отделять блоки.
# Неправильно
def check_number(number):
if number > 0:
print("Число положительное")
if number > 10:
print("Число больше 10")
else:
print("Число не положительное")
check_number(3)
# => Число положительное
# => Число не положительноеВ примере выше мы забыли "вложить" с помощью отступа второй if, поэтому else теперь относится ко второму if.
# Правильно
def check_number(number: int) -> None:
if number > 0:
print("Число положительное")
if number > 10:
print("Число больше 10")
else:
print("Число не положительное")
check_number(3)
# => Число положительноеТеперь второй if вложен в первый, а else на одном уровне с первым и противопоставляется ему.
Задание
Реализуйте функцию normalize_url(), которая выполняет нормализацию данных. Она принимает адрес сайта и возвращает его с https:// в начале.
Функция принимает адреса в виде АДРЕС или http://АДРЕС, но всегда возвращает адрес в виде https://АДРЕС. На вход функции также может поступить адрес в уже нормализованном виде https://АДРЕС, в этом случае ничего менять не надо.
Примеры вызова:
print(normalize_url('https://ya.ru')) # => 'https://ya.ru'
print(normalize_url('google.com')) # => 'https://google.com'
print(normalize_url('http://ai.fi')) # => 'https://ai.fi'Есть несколько способов решить задачу. Один из них — сравнивать первые 7 символов строки-аргумента со строкой http://, а потом на основе этого добавлять или не добавлять к ней https://.
Также вам скорее всего потребуется отбросить ненужную часть в начале строки. Помните, мы рассматривали способ получения кусочка от строки с помощью среза? Если нет, напоминаю:
# Берем 2 символа от начала
print('python'[:2]) # => 'py'Так вот, с помощью срезов можно также отбросить определенное количество символов:
# Отбрасываем первые 2 символа
print('python'[2:]) # => 'thon'Python: Условная конструкция else
Посмотрите на функцию ниже. Она определяет тип предложения по последнему символу: если предложение заканчивается вопросительным знаком, функция вернет Sentence is question, иначе — Sentence is normal:
def get_type_of_sentence(sentence: str) -> str:
last_char = sentence[-1]
if last_char == '?':
sentence_type = 'question'
else:
sentence_type = 'normal'
return "Sentence is " + sentence_type
print(get_type_of_sentence('Hodor')) # => Sentence is normal
print(get_type_of_sentence('Hodor?')) # => Sentence is questionМы добавили else и новый блок. Он выполнится, если условие в if окажется ложным. Еще в блок else можно вкладывать другие условия if. Else переводится "иначе", "в ином случае".
┌───────────┐
│ условие? │
└─────┬─────┘
True │ │ False
↓ ↓
┌──────────┐ ┌──────────┐
│ тело if │ │ тело else│
└──────────┘ └──────────┘Пример вложенных блоков:
number = 10
if number > 10:
print("Number is greater than 10")
else:
if number == 10:
print("Number is exactly 10")
else:
print("Number is less than 10")Оформить конструкцию if-else можно двумя способами. С помощью отрицания можно изменить порядок блоков:
def get_type_of_sentence(sentence: str) -> str:
last_char = sentence[-1]
if last_char != '?':
sentence_type = 'normal'
else:
sentence_type = 'question'
return "Sentence is " + sentence_typeЧтобы конструкцию было легче оформлять, старайтесь выбирать проверку без отрицаний и подстраивайте содержимое блоков под нее.
На примере использования else видно, как важно не забывать отделять блоки.
# Неправильно
def check_number(number):
if number > 0:
print("Число положительное")
if number > 10:
print("Число больше 10")
else:
print("Число не положительное")
check_number(3)
# => Число положительное
# => Число не положительноеВ примере выше мы забыли "вложить" с помощью отступа второй if, поэтому else теперь относится ко второму if.
# Правильно
def check_number(number: int) -> None:
if number > 0:
print("Число положительное")
if number > 10:
print("Число больше 10")
else:
print("Число не положительное")
check_number(3)
# => Число положительноеТеперь второй if вложен в первый, а else на одном уровне с первым и противопоставляется ему.
Задание
Реализуйте функцию normalize_url(), которая выполняет нормализацию данных. Она принимает адрес сайта и возвращает его с https:// в начале.
Функция принимает адреса в виде АДРЕС или http://АДРЕС, но всегда возвращает адрес в виде https://АДРЕС. На вход функции также может поступить адрес в уже нормализованном виде https://АДРЕС, в этом случае ничего менять не надо.
Примеры вызова:
print(normalize_url('https://ya.ru')) # => 'https://ya.ru'
print(normalize_url('google.com')) # => 'https://google.com'
print(normalize_url('http://ai.fi')) # => 'https://ai.fi'Есть несколько способов решить задачу. Один из них — сравнивать первые 7 символов строки-аргумента со строкой http://, а потом на основе этого добавлять или не добавлять к ней https://.
Также вам скорее всего потребуется отбросить ненужную часть в начале строки. Помните, мы рассматривали способ получения кусочка от строки с помощью среза? Если нет, напоминаю:
# Берем 2 символа от начала
print('python'[:2]) # => 'py'Так вот, с помощью срезов можно также отбросить определенное количество символов:
# Отбрасываем первые 2 символа
print('python'[2:]) # => 'thon'Ваше упражнение проверяется по этим тестам
import solution
def test():
assert solution.normalize_url("yandex.ru") == "https://yandex.ru"
assert solution.normalize_url("http://yandex.ru") == "https://yandex.ru"
assert solution.normalize_url("https://yandex.ru") == "https://yandex.ru"
assert solution.normalize_url("httpsecurity.com") == "https://httpsecurity.com"
assert (
solution.normalize_url("https://httpbin.org/redirect-to?url=http://google.com")
== "https://httpbin.org/redirect-to?url=http://google.com"
)
assert (
solution.normalize_url("httpbin.org/redirect-to?url=https://google.com")
== "https://httpbin.org/redirect-to?url=https://google.com"
)
assert (
solution.normalize_url("httpbin.org/redirect-to?url=http://google.com")
== "https://httpbin.org/redirect-to?url=http://google.com"
)Решение учителя откроется через:
20:00
