Skip to content

Commit 5e4a70a

Browse files
committed
6-7 (functions)
1 parent 1ee553d commit 5e4a70a

File tree

2 files changed

+332
-0
lines changed

2 files changed

+332
-0
lines changed

6_functions_1.py

Lines changed: 197 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
########################################################################################################################
2+
#
3+
# 30 - Функции и их вызов
4+
#
5+
# Задание:
6+
# В 7 королевствах жил один человек, который имел доступ к компьютерам и умел программировать — Сэм Тарли
7+
# Он занимался картографией, поэтому он написал для себя функцию calculate_distance, высчитывающую расстояние (в лигах)
8+
# между городами. Функция принимает два строковых параметра — два названия городов, и возвращает число — расстояние
9+
# между ними.
10+
#
11+
# Вот пример использования, где на экран выводится расстояние между Lannisport и Bayasabhad:
12+
#
13+
# from hexlet.code_basics import calculate_distance
14+
#
15+
# distance = calculate_distance('Lannisport', 'Bayasabhad')
16+
# print(distance)
17+
#
18+
# Воспользуйтесь функцией calculate_distance и выведите на экран расстояние между городами Qarth
19+
# и Vaes Dothrak. Не копируйте пример, а создайте переменную с другим именем и напишите код с нуля самостоятельно
20+
#
21+
# Solution:
22+
#
23+
from hexlet.code_basics import calculate_distance
24+
25+
# BEGIN
26+
print(calculate_distance('Qarth', 'Vaes Dothrak'))
27+
# END
28+
#
29+
########################################################################################################################
30+
#
31+
# 31 - Сигнатура фукнции
32+
#
33+
# Задание
34+
# В Python есть функция hex. Изучите её сигнатуру на странице документации.
35+
# Напишите программу, которая использует функцию hex с переменной number и выводит результат на экран
36+
#
37+
# Определения
38+
#
39+
# Сигнатура функции — формальное описание типов аргументов и типа возвращаемого значения функции
40+
#
41+
# Solution:
42+
#
43+
number = 255
44+
45+
# BEGIN
46+
print(hex(number))
47+
# END
48+
#
49+
########################################################################################################################
50+
#
51+
# 32 - Стандартная библиотека
52+
#
53+
# Задание
54+
# Функция type позволяет определить тип передаваемого аргумента. Название типа возвращается в виде строки. Например,
55+
# вызов type(10) вернет строку <class 'int'> (int, это сокращение от integer — целое число)
56+
#
57+
# Выведите на экран тип значения переменной motto
58+
#
59+
# Solution:
60+
#
61+
motto = 'Family, Duty, Honor';
62+
63+
# BEGIN
64+
print(type(motto))
65+
# END
66+
#
67+
########################################################################################################################
68+
#
69+
# 33 - Аргументы по умолчанию
70+
#
71+
# Задание
72+
# Округлите число, записанное в переменную number, до двух знаков после запятой и выведите результат на экран
73+
#
74+
# Soluton:
75+
#
76+
number = 10.1234
77+
78+
# BEGIN
79+
print(round(number, 2))
80+
# END
81+
#
82+
########################################################################################################################
83+
#
84+
# 34 - Вызов функции - выражение
85+
#
86+
# Задание
87+
# Арья собирается в путешествие из Винтерфела в Орлиное гнездо, чтобы навестить Лизу Аррен, но по пути ей нужно заехать
88+
# к Фреям для совершения акта возмездия. Ей нужно рассчитать общую длину маршрута
89+
#
90+
# К сожалению, функция calculate_distance может вычислять расстояние только между двумя точками. Поэтому придется
91+
# сначала узнать расстояние от Винтерфелла до замка Фреев, а потом расстояние до Орлиного гнезда
92+
#
93+
# Названия замков на английском языке:
94+
#
95+
# Винтерфелл — Winterfell
96+
# Близнецы (Замок Фреев) — The Twins
97+
# Орлиное гнездо — The Eyrie
98+
#
99+
# Выведите на экран полную длину маршрута Арьи. Напомним, что функция calculate_distance принимает два аргумента
100+
# и возвращает число
101+
#
102+
# Solution:
103+
#
104+
from hexlet.code_basics import calculate_distance
105+
106+
# BEGIN
107+
print(calculate_distance('Winterfell', 'The Twins') + calculate_distance('The Twins', 'The Eyrie'))
108+
# END
109+
#
110+
########################################################################################################################
111+
#
112+
# 35 - Аргументы как выражения
113+
#
114+
# Задание
115+
# Вам доступна функция calculate_distance_between_towns. Она принимает один аргумент, в котором должны содержаться
116+
# названия двух городов через дефис. В ответ она возвращает расстояние между этими городами. Вот пример использования:
117+
# distance = calculate_distance_between_towns('Lannisport-Bayasabhad')
118+
#
119+
# Напишите программу, которая использует функцию calculate_distance_between_towns и выводит на экран расстояние
120+
# между городами, записанными в переменные source и destination
121+
#
122+
# Solution:
123+
#
124+
from hexlet.code_basics import calculate_distance_between_towns
125+
126+
source = 'The Twins'
127+
destination = 'The Eyrie'
128+
129+
# BEGIN
130+
print(calculate_distance_between_towns(source + '-' + destination))
131+
# END
132+
#
133+
########################################################################################################################
134+
#
135+
# 36 - Вызов функций в аргументах функций
136+
#
137+
# Задание
138+
# Для построения генеалогического дерева семьи Старков Сэм написал функцию parent_for, которая возвращает имя родителя,
139+
# если передать ей первым параметром имя ребенка. Вторым параметром функция принимает строчку 'father' или 'mother'
140+
# Так функция понимает, кого из родителей возвращать. По умолчанию параметр равен 'mother'. То есть, если нужно узнать
141+
# имя матери, то можно не передавать специально 'mother', а передать лишь один параметр — имя ребенка
142+
#
143+
# Напишите программу, которая выводит на экран имя деда Джоффри по материнской линии. Полное имя Джоффри на
144+
# английском: 'Joffrey Baratheon'
145+
#
146+
# Solution:
147+
#
148+
from hexlet.code_basics import parent_for
149+
150+
# BEGIN
151+
print(parent_for(parent_for('Joffrey Baratheon'), 'father'))
152+
# END
153+
#
154+
########################################################################################################################
155+
#
156+
# 37 -Побочные эффекты
157+
#
158+
# Задание
159+
# Это задание не связано напрямую с уроком. Но выполнить его без создания переменных — важный шаг в вашем
160+
# профессиональном развитии
161+
# Выведите на экран имя матери Дайнерис Таргариен (Daenerys Targaryen), используя функцию parent_for без создания
162+
# переменных
163+
# Напомним, что parent_for принимает первым параметром имя ребенка и возвращает имя родителя. Вторым параметром функция
164+
# принимает строчку 'father' или 'mother'. Так функция понимает, кого из родителей возвращать. По умолчанию параметр
165+
# равен 'mother'
166+
#
167+
# Solution:
168+
#
169+
from hexlet.code_basics import parent_for
170+
171+
# BEGIN
172+
print(parent_for('Daenerys Targaryen'))
173+
# END
174+
#
175+
########################################################################################################################
176+
#
177+
# 38 - Неизменяемость и примитивные типы
178+
#
179+
# Задание
180+
# Переведите число, записанное в переменную value, в шестнадцатиричный вид, используя функцию hex. Новое значение (а
181+
# это уже будет строка!) запишите в ту же переменную value
182+
#
183+
# Возможно, вам покажется, что код получился странным. Это типичный пример: переписывание переменных делает код
184+
# менее понятным и более запутанным, особенно в таких случаях, как этот - когда новое значение имеет тип, отличающийся
185+
# от типа старого значения
186+
#
187+
# Solution:
188+
#
189+
value = 42
190+
191+
# BEGIN
192+
value = hex(value)
193+
# END
194+
195+
print(value)
196+
#
197+
########################################################################################################################

7_functions_2.py

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
########################################################################################################################
2+
#
3+
# 39 - Создание (определение) функций
4+
#
5+
# Задание
6+
# Реализуйте функцию print_jaimes_line, которая принимает один аргумент — строку, и выводит реплику на экран в формате
7+
# JAIME: переданная_строка
8+
# Как назвать переменную, которая будет аргументом — решайте сами
9+
#
10+
# Solution:
11+
#
12+
def print_jaimes_line(a):
13+
print('JAIME: ' + a)
14+
#
15+
########################################################################################################################
16+
#
17+
# 40 - Аргументы, переменные и инструкции
18+
#
19+
# Задание
20+
# Сэм составляет множество карт, и ему часто нужно выводить на экран повторяющиеся символы для визуализации маршрутов
21+
# Например, так Сэм иллюстрирует узкие дороги между городами:
22+
# Meereen =-=-=-=- Myr
23+
#
24+
# А так иллюстрирует широкие трассы:
25+
# Vaes Dothrak ======== Vahar
26+
#
27+
# Строки в Python, это последовательности (списки, наборы) символов в нужном порядке. В документации Python приведены
28+
# операции, общие для всех последовательностей. Так, любую последовательность - в том числе и строку - можно повторить
29+
# несколько раз, умножив оную на число (это не будет нарушением типизации, ведь именно такое сочетание типов
30+
# - последовательность слева и число справа - предусмотрено создателями языка для операции умножения):
31+
# print('=-' * 4)
32+
# =-=-=-=-
33+
#
34+
# Сэм не очень доволен. Ему нужно нарисовать сотни маршрутов разной длины с разными символами. Неудобно размножать
35+
# строки сотни раз и сотни раз вызывать print
36+
# Напишите для Сэма функцию print_seq, которая сама выводит на экран получившиеся повторения. Она принимает два
37+
# аргумента — строку и число, и выводит повторяющуюся строку на экран. Для генерации строки используйте “размножение”
38+
# строк
39+
# Вот пример того, как Сэм будет использовать написанную вами print_seq:
40+
# print_seq('=-', 4)
41+
#
42+
# Solution:
43+
#
44+
def print_seq(text, num):
45+
print(text * num)
46+
#
47+
########################################################################################################################
48+
#
49+
# 41 - Возврат значений
50+
#
51+
# Задание
52+
# Сэм создаёт генеалогические деревья разных семей. Ему постоянно приходится рассчитывать количество места, занимаемое
53+
# именами родителей на экране#
54+
# Создайте функцию get_parent_names_total_length для Сэма. Она должна принимать один аргумент — имя ребенка
55+
# , и возвращать количество символов в именах матери и отца суммарно. Функция не должна выводить ничего на экран,
56+
# только возвращать число
57+
#
58+
# Для реализации используйте уже существующие функции parent_for и len:
59+
# Получение имени матери parent_for(child, 'mother'), где child — имя ребёнка.
60+
# Получение имени отца parent_for(child, 'father'), где child — имя ребёнка
61+
# Получение длины строки: len(str), где str — строка
62+
#
63+
# Solution:
64+
#
65+
from hexlet.code_basics import parent_for
66+
67+
# BEGIN
68+
def get_parent_names_total_length(name):
69+
return len(parent_for(name, 'mother')) + len(parent_for(name, 'father'))
70+
# END
71+
#
72+
########################################################################################################################
73+
#
74+
# 42 - Возврат по умолчанию
75+
#
76+
# Задание
77+
# Это немного странное задание, но для тренировки будет полезным. Реализуйте функцию get_none, которая просто возвращает
78+
# None и больше ничего не делает
79+
#
80+
# Solution:
81+
#
82+
def get_none():
83+
return None
84+
#
85+
########################################################################################################################
86+
#
87+
# 43 - Параметры по умолчанию
88+
#
89+
# Задание
90+
# Реализуйте функцию custom_parent_for, которая принимает два аргумента:
91+
#
92+
# Строку — имя ребёнка.
93+
# Строку с указанием родителя. Этот аргумент должен по умолчанию быть 'father'.
94+
#
95+
# Функция должна возвращать имя соответствующего родителя
96+
#
97+
# Solution:
98+
#
99+
from hexlet.code_basics import parent_for
100+
101+
# BEGIN
102+
def custom_parent_for(name, parent='father'):
103+
return parent_for(name, parent)
104+
# END
105+
#
106+
########################################################################################################################
107+
#
108+
# 44 - Именование
109+
#
110+
# Задание
111+
# Реализуйте функцию get_formatted_birthday, которая принимает на вход три параметра: день, месяц и год рождения, а
112+
# возвращает их строкой в отформатированном виде, например: 30-02-1953
113+
# День и месяц нужно форматировать так, чтобы при необходимости добавлялся 0 слева. Например, если в качестве месяца
114+
# пришла цифра 7, то в выходной строке она должна быть представлена как 07
115+
#
116+
# Solution:
117+
#
118+
def get_formatted_birthday(day, month, year):
119+
return '%02d-%02d-%4s' % (day, month, year)
120+
#
121+
########################################################################################################################
122+
#
123+
# 45 - Окружение
124+
#
125+
# Задание
126+
# Это задание не связано напрямую с уроком, это просто еще одно полезное упражнение по работе с функциями
127+
# Напишите функцию get_age_difference, которая принимает два года рождения и возвращает строку с разницей в возрасте в
128+
# виде The age difference is 11
129+
#
130+
# Solution:
131+
#
132+
def get_age_difference(year_1, year_2):
133+
return 'The age difference is ' + str(abs(year_1 - year_2))
134+
#
135+
########################################################################################################################

0 commit comments

Comments
 (0)