Для выполнения задания найди ссылку-приглашение в онлайн чате, получи доступ к репозиторию с файлом-заготовкой и заполни пропуски в нём. Фиксируй изменения (делай коммиты) после решения каждой задачи. Оставь название файла неизменным, иначе робот-проверятель не найдёт твои ответы. Отправить решения на GitHub нужно до истечения установленного срока. |
После завершения работы над каждым вопросом требуется фиксировать изменения (делать коммит), сопровождая его вменяемым описанием сделанного, например:
Также не возбраняется в любое время проталкивать изменения на GitHub:
|
Вопрос 1
Используя возможность присваивания существующим функциям новых имен, заполни пробелы в определении приведенной функции для сложения a
с абсолютным значением b
. Вызывать abs
запрещено.
from operator import add, sub
def a_plus_abs_b(a, b):
"""Возвращает a+abs(b), но не использует abs.
>>> a_plus_abs_b(2, 3)
5
>>> a_plus_abs_b(2, -3)
5
"""
if b < 0:
op = _____
else:
op = _____
return op(a, b)
Вопрос 2
Напиши функцию, принимающую три положительных числа и возвращающую сумму квадратов двух наибольших из них. В теле функции можно использовать единственное выражение.
def two_of_three(a, b, c):
"""Возвращает x*x + y*y, где x и y — два наибольших значения среди a, b, c.
>>> two_of_three(1, 2, 3)
13
>>> two_of_three(5, 3, 1)
34
>>> two_of_three(10, 2, 8)
164
>>> two_of_three(5, 5, 5)
50
"""
return _____
Попробуй использовать функции
|
Вопрос 3
Вот функция, которая делает то же самое, что и инструкция if
:
def if_function(condition, true_result, false_result):
"""Возвращает true_result, если условие condition истинно и false_result в противном случае.
>>> if_function(True, 2, 3)
2
>>> if_function(False, 2, 3)
3
>>> if_function(3==2, 3+2, 3-2)
1
>>> if_function(3>2, 3+2, 3-2)
5
"""
if condition:
return true_result
else:
return false_result
В действительности эта функция не во всех случаях идентична инструкции if
. Для доказательства этого факта напиши функции c
, t
и f
так, что with_if_statement
напечатает число 2
, а with_if_function
напечатает и 2
, и 1
.
def with_if_statement():
"""
>>> result = with_if_statement()
2
>>> print(result)
None
"""
if c():
return t()
else:
return f()
def with_if_function():
"""
>>> result = with_if_function()
1
2
>>> print(result)
None
"""
return if_function(c(), t(), f())
def c():
"*** ТВОЙ КОД ЗДЕСЬ ***"
def t():
"*** ТВОЙ КОД ЗДЕСЬ ***"
def f():
"*** ТВОЙ КОД ЗДЕСЬ ***"
Если никак не удается понять, в чём разница между инструкцией |
Вопрос 4
Одна из нерешенных проблем математики — гипотеза Коллатца — касается последовательности чисел, называемой сиракузской, или последовательностью чисел-градин.
-
Выберем любое положительное число
n
. -
Если
n
четное, тогда делим его на 2. -
Если
n
нечетное, тогда умножаем его на 3 и прибавляем 1. -
Продолжаем те же действия с
n
, пока не получим 1.
Гипотеза Коллатца заключается в том, что какое бы начальное число n
мы ни взяли, рано или поздно мы получим 1. Число n
будет то увеличиваться, то уменьшаться, но в результате все равно n
станет равным 1 (по крайней мере для всех проверенных чисел — строгих доказательств этого не существует).
Последовательность чисел n
иногда называют последовательностью чисел-градин, поскольку градины тоже перемещаются в атмосфере вверх и вниз, пока в конце концов не упадут на землю.
def hailstone(n):
"""Выводит сиракузскую последовательность (числа-градины), начинающуюся с n, и возвращает её длину.
>>> a = hailstone(10) # Семь элементов: 10, 5, 16, 8, 4, 2, 1
10
5
16
8
4
2
1
>>> a
7
"""
"*** ТВОЙ КОД ЗДЕСЬ ***"
Проверь, что рассмотренная последовательность может быть очень длинной, например при старте с 27. Попробуй отыскать вариант ещё длиннее.
Вопрос 5* (для самых умных)
Напиши однострочную программу, которая выводит в консоль саму себя. Можно использовать следующие возможности Python:
-
числа;
-
инструкции присвоения;
-
строки в одинарных и двойных кавычках;
-
арифметические операторы
+
,-
,*
и/
; -
встроенную функцию
print
; -
встроенную функцию
eval
, которая вычисляет значение представленного строкой выражения; -
встроенную функцию
repr
, которая возвращает строковое выражение аргумента.
Ты можешь соединить две строки с помощью +
, можешь повторить строку много раз, домножив её на число. Точки с запятой ;
могут использоваться для разделения нескольких инструкций в одной строке, например:
>>> c='c';print('a');print('b' + c * 2)
a
bcc
Разберись во взаимосвязи одиночных и двойных кавычек, а также в результатах вызова repr со строковым аргументом.
|
Размести решение в файле hw_01.py
, в строке challenge_question_program
.
Не забудь отправить работу на проверку:
|