generated from hexlet-basics/exercises-template
-
Notifications
You must be signed in to change notification settings - Fork 3
/
description.ru.yml
87 lines (60 loc) · 4.13 KB
/
description.ru.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
---
name: Конструкция else + if = elif
theory: |
Функция `get_type_of_sentence()` различает только вопросительные и обычные предложения. Добавим в нее поддержку восклицательных предложений:
```python
def get_type_of_sentence(sentence):
last_char = sentence[-1]
if last_char == '?':
sentence_type = 'question'
if last_char == '!':
sentence_type = 'exclamation'
else:
sentence_type = 'normal'
return 'Sentence is ' + sentence_type
print(get_type_of_sentence('Who?')) # => 'Sentence is normal'
print(get_type_of_sentence('No')) # => 'Sentence is normal'
print(get_type_of_sentence('No!')) # => 'Sentence is exclamation'
```
https://replit.com/@hexlet/python-basics-conditionals-elif
Мы добавили проверку восклицательных предложений — exclamation. Технически эта функция работает, но вопросительные предложения трактует неверно. Еще в ней есть проблемы с точки зрения семантики:
* Наличие восклицательного знака проверяется в любом случае, даже если уже обнаружился вопросительный знак
* Ветка `else` описана для второго условия, но не для первого. Поэтому вопросительное предложение становится `"normal"`
Чтобы исправить ситуацию, воспользуемся еще одной возможностью условной конструкции:
```python
def get_type_of_sentence(sentence):
last_char = sentence[-1]
if last_char == '?':
sentence_type = 'question'
elif last_char == '!':
sentence_type = 'exclamation'
else:
sentence_type = 'normal'
return 'Sentence is ' + sentence_type
print(get_type_of_sentence('Who?')) # => 'Sentence is question'
print(get_type_of_sentence('No')) # => 'Sentence is normal'
print(get_type_of_sentence('No!')) # => 'Sentence is exclamation'
```
Теперь все условия выстроились в единую конструкцию. `elif` означает — «если не выполнено предыдущее условие, но выполнено текущее». Получается такая схема:
* если последняя буква `?`, то `'question'`
* если последняя буква `!`, то `'exclamation'`
* остальные варианты — `'normal'`
Выполнится только один из блоков кода, который относится ко всей конструкции `if`.
instructions: |
На электронной карте Вестероса, которую реализовал Сэм, союзники Старков отображены зелёным кружком, враги — красным, а нейтральные семьи — серым.
Напишите для Сэма функцию `who_is_this_house_to_starks()`, которая принимает на вход фамилию семьи и возвращает одно из трёх значений: `'friend'`, `'enemy'`, `'neutral'`.
Правила определения:
* Друзья (`'friend'`): `'Karstark'`, `'Tully'`
* Враги (`'enemy'`): `'Lannister'`, `'Frey'`
* Любые другие семьи считаются нейтральными (`'neutral'`)
Примеры вызова:
```python
print(who_is_this_house_to_starks('Karstark')) # => 'friend'
print(who_is_this_house_to_starks('Frey')) # => 'enemy'
print(who_is_this_house_to_starks('Joar')) # => 'neutral'
print(who_is_this_house_to_starks('Ivanov')) # => 'neutral'
```
tips: []
definitions:
- name: "else + if = elif"
description: "способ задать несколько альтернативных условий."