/
Программирование
/
Курс Python
/

Условная конструкция else

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'

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются