import math

'''
Оформление кода
https://pythonchik.ru/osnovy/imenovanie-v-python


Функция - именованный блок кода который выполняет определенную
задачу или возвращает значение.

Функция - набор операторов, которые возвращают некоторое значение 
вызывающему объекту. В функцию также может быть передано ноль или 
более аргументов, которые могут использоваться при выполнении тела функции.

def f():
    print("QWERTY")

def f():
    print("ABC")

f()
f()

Выведет:
ABC
ABC

Функция перезатрет первую def f()

Любая функция в python возвращает значение. Значение возвращается при
помощи оператора return. Если функция не содержит оператор return,
то по умолчанию такая функция вернет значение None.

Функция должна выполнять только одну операцию. Она должна выполнять ее
хорошо. И ничего другого она делать не должна. Если функция выполняет
только те действия, которые находятся на одном уровне под объявленным
именем функции, то эта функция выполняет одну операцию.

Будьте последовательны в выражениях возврата: либо все операторы return
в функции должны возвращать выражение, либо ни один из них не должен. 
Если какой-либо оператор return возвращает выражение, то оставшиеся 
операторы return тоже должны явно возвращать значение, не смотря на то,
что python по умолчанию возвращает None. 



'''

def get_reverse(data: str):
    return data[-1::-1]

def generate_n_chars(n, s):
    return s*n


def print_histogram(data):
    for i in data:
        print('*'*i)


def count_words(data):
    ret = 0
    for i in data.strip().split(' '):
        if i != '':
            ret += 1
    return ret

# Является ли год високосным
def is_leap(year):
    return (year%4 == 0 and year%100 != 0) or year%400 == 0


# Проверка строки на полиндром
def is_palindrome(value):
    formated_string = ''
    revers_string = ''
    for char in value.lower():
        if char != ' ':
            formated_string += char
    revers_string = formated_string[::-1]
    return revers_string == formated_string


# Возвращает число високосных лет в заданном диапазоне
def count_leap_years(y1, y2):
    number = 0
    for year in range(y1, y2):
        if is_leap(year):
            number += 1
    return number


# Возвращает список високосных годов в заданном диапазоне
def get_leap_years(y1, y2):
    leap_years = []
    for year in range(y1, y2):
        if is_leap(year):
            leap_years.append(year)
    return leap_years


# Создание палиндрома
def create_palindrome(value):
    if is_palindrome(value):
        return value.lower()
    ret = ''
    ret = value + '_i_' + value[::-1]
    return ret.lower()


# Сравнение строк
def is_strings_equal(st1, st2):
    return sorted(st1) == sorted(st2)


#
def is_dunder(st):
    return st.startswith('__') and st.endswith('__') and \
    len(st) >= 6 and st[2:-2].isalpha()




def main():
    # print_histogram([1, 2, 3])
    # print(test_1('hello'))
    # print(count_words('   hello     bro   '))
    # print(is_palindrome("Never Odd or Even"))
    # print(is_palindrome("qwerty"))
    # print(count_leap_years(2021, 2021))
    # print(get_leap_years(1990, 2021))
    # print(is_strings_equal('afdsa', 'aasdfa'))
    pass


if __name__ == '__main__':
    main()