Skip to content

Commit 2b824d2

Browse files
committed
update
Signed-off-by: Kirill Mokevnin <mokevnin@gmail.com>
1 parent 206481b commit 2b824d2

File tree

21 files changed

+146
-713
lines changed

21 files changed

+146
-713
lines changed

modules/38-objects/100-objects/ru/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ print(text.upper()) # => HEXLET
1616
Встроенных методов у строк довольно много. Ниже некоторые из них:
1717

1818
```python
19+
# Перевод первой буквы в верхний регистр
20+
'hexlet'.capitalize() # => Hexlet
21+
1922
# Перевод всех букв в нижний регистр
2023
print('HeXleT'.lower()) # => hexlet
2124

modules/40-define-functions/100-define-function/ru/EXERCISE.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
Реализуйте функцию с именем `print_motto()`, которая выведет на экран фразу *Winter is coming*.
32

43
```python
Lines changed: 66 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,88 @@
1-
С помощью определения собственных функций писать и поддерживать программы проще. Они позволяют объединять составные операции в одну. Поэтому в этом уроке поговорим, как создавать собственные функции.
1+
До этого момента мы использовали только уже готовые функции — `print()`, `len()`, `max()` и другие. Но в Python можно создавать свои собственные функции. Это основа программирования: выделение повторяющейся логики в именованные блоки кода.
22

3-
Допустим, мы хотим отправить письма на сайте — это достаточно сложный процесс, который включает взаимодействие с внешними системами. Но если определить функцию, вся сложность скроется за одной простой функцией:
3+
## Зачем определять функции
4+
5+
Допустим, у нас есть несколько похожих участков кода:
6+
7+
```python
8+
print('Hello, Hexlet!')
9+
print('Hello, world!')
10+
print('Hello, Python!')
11+
```
12+
13+
Чтобы не повторять один и тот же шаблон, мы можем оформить его в виде своей функции, которая принимает на вход один параметр и печатает нужную строчку на экран:
414

515
```python
6-
# Гипотетический пример
7-
# Место откуда берется функция
8-
from emails import send
16+
def say_hello(name):
17+
print(f'Hello, {name}!')
18+
```
919

10-
email = 'support@hexlet.io'
11-
title = 'Помогите'
12-
body = 'Я написал историю успеха, как я могу получить скидку?'
20+
Теперь мы можем вызывать её с разными аргументами:
1321

14-
# Один маленький вызов — много логики внутри
15-
send(email, title, body)
22+
```python
23+
say_hello('Hexlet') # => Hello, Hexlet!
24+
say_hello('world') # => Hello, world!
25+
say_hello('Python') # => Hello, Python!
1626
```
1727

18-
Внутри себя этот вызов выполняет много логики: соединяется с почтовым сервером, формирует правильный запрос на основе заголовка и тела сообщения, а затем все отправляет, не забыв закрыть соединение.
28+
В нашем примере функция ничего не возвращает, она действует как `print()` выводя на экран сообщение.
1929

20-
Создадим нашу первую функцию. Ее задача — вывести на экран приветствие:
30+
## Синтаксис определения
2131

22-
```text
23-
Hello, Hexlet!
32+
```python
33+
def имя_функции(параметры):
34+
тело
2435
```
2536

37+
- `def` — ключевое слово, с которого начинается определение.
38+
- `имя_функции` — любое допустимое имя, как у переменной.
39+
- В скобках — список параметров, через запятую.
40+
- После двоеточия — тело функции. Оно пишется с отступом в 4 пробела
41+
- Чтобы функция что-то делала, в её теле пишется обычный Python-код.
42+
43+
В Python отступы имеют синтаксическое значение. Они показывают, какой код относится к телу функции. Посмотрите на пример:
44+
2645
```python
27-
# Определение функции
28-
# Определение не вызывает и не выполняет функцию
29-
# Мы лишь говорим, что теперь такая функция существует
30-
def show_greeting():
31-
# Внутри тела отступ четыре пробела
32-
text = 'Hello, Hexlet!'
33-
print(text)
34-
35-
# Вызов функции
36-
show_greeting() # => 'Hello, Hexlet!'
46+
def say_hi():
47+
print('Hi!')
48+
49+
print('Программа продолжается…')
3750
```
3851

39-
В отличие от обычных данных, функции выполняют действия. Поэтому их имена нужно указывать через глаголы: «построить что-то», «нарисовать что-то», «открыть что-то».
52+
Здесь функция `say_hi()` определена, но **`print('Программа продолжается…')`** не относится к функции — у него нет отступа. Он будет выполнен сразу при запуске программы, независимо от вызова `say_hi()`.
53+
54+
Чтобы `say_hi()` сработала, её нужно явно вызвать:
4055

41-
Описание, которое находится ниже имени функции с отступом, называется **телом функции**. Внутри тела можно описывать любой код. Это как небольшая самостоятельная программа — набор произвольных инструкций.
56+
```python
57+
def say_hi():
58+
print('Hi!')
59+
60+
say_hi() # => Hi!
61+
print('Программа продолжается…')
62+
```
4263

43-
Тело выполняется в тот момент, когда запускается функция. При этом каждый вызов функции запускает тело независимо от других вызовов.
64+
## Пример: функция для печати среднего арифметического
4465

45-
Тело функции может быть пустым, тогда внутри него используется ключевое слово `pass`:
66+
Сейчас мы реализуем простую функцию, которая **вычисляет и печатает среднее арифметическое** двух чисел. Среднее арифметическое — это сумма чисел, делённая на их количество. Например, среднее от 6 и 4 считается так: `(6 + 4) / 2 = 5`.
4667

4768
```python
48-
# Минимальное определение функции
49-
def noop():
50-
pass
69+
def print_average(a, b):
70+
total = a + b
71+
average = total / 2
72+
print(average)
5173

52-
noop()
74+
print_average(6, 4) # => 5.0
5375
```
5476

55-
У понятия «создать функцию» много синонимов: «реализовать», «определить» и даже «заимплементить». Они часто встречаются на практике. Создавая свою функцию, вы облегчите сложные операции и сделаете разработку проще.
77+
Здесь:
78+
79+
- `a` и `b` — входные параметры функции.
80+
- `total` — сумма этих чисел.
81+
- `average` — делим сумму на 2, чтобы найти среднее.
82+
- `print()` выводит результат.
83+
84+
При вызове `print_average(6, 4)` на экран выведется `5.0`.
85+
86+
## Переиспользование и читаемость
87+
88+
Функции помогают не только избегать дублирования, но и делают программы более понятными. Название функции само по себе говорит, что она делает. Это особенно важно в больших проектах, где код читают другие программисты (или вы сами через месяц).
Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
# BEGIN
2-
def say_hurray_three_times():
3-
word = "hurray!"
4-
return f"{word} {word} {word}"
5-
6-
7-
# END
1+
def truncate(text, length):
2+
# BEGIN
3+
result = f"{text[0:length]}..."
4+
return result
5+
# END
Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,27 @@
1+
Допишите функцию `truncate()`, которая обрезает переданную строку до указанного количества символов, добавляет в конце троеточие и возвращает получившуюся строку. Подобная логика часто используется на сайтах, чтобы отобразить длинный текст в сокращенном виде.
12

2-
Реализуйте функцию `say_hurray_three_times()`, которая возвращает строку 'hurray! hurray! hurray!'.
3+
Функция принимает два параметра:
4+
5+
1. Строка, которую нужно обрезать
6+
2. Число символов, которые нужно оставить
7+
8+
Пример того, как должна работать написанная вами функция:
9+
10+
```python
11+
# Передаём текст напрямую
12+
# Обрезаем текст, оставляя 2 символа
13+
truncate('hexlet', 2) # 'he...'
14+
15+
# Через переменную
16+
text = 'it works!'
17+
# Обрезаем текст, оставляя 4 символа
18+
truncate(text, 4) # 'it w...'
19+
```
20+
21+
Выполнить задание можно различными способами, подскажем лишь один из них. Для решения этим способом вам понадобится взять подстроку из строки, переданной первым параметром в функцию. Используйте для этого срезы строк. Подумайте, исходя из задания, с какого индекса и по какой вам надо извлечь подстроку?
322

423
```python
5-
hurray = say_hurray_three_times()
6-
print(hurray) # => hurray! hurray! hurray!
24+
word = 'welcome!'
25+
index = 3
26+
word[:index] # wel
727
```

0 commit comments

Comments
 (0)