| Для выполнения задания найди ссылку-приглашение в онлайн чате, получи доступ к репозиторию с файлом-заготовкой и заполни пропуски в нём. Фиксируй изменения (делай коммиты) после решения каждой задачи. Оставь название файла неизменным, иначе робот-проверятель не найдёт твои ответы. Отправить решения на 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.
| 
 Не забудь отправить работу на проверку: 
 |