import random

def game_guesse():
    x = random.randint(1, 101)
    print(x)
    print("Добро пожаловать в числовую угадайку")
    number = int(input())
    trys = 1
    while number:
        if is_valid(number) == False:
            print('А может быть все-таки введем целое число от 1 до 100?')
            number = int(input())
            trys += 1
            continue
        if number > x:
            print('Ваше число больше загаданного, попробуйте еще разок')
        elif number < x:
            print('Ваше число меньше загаданного, попробуйте еще разок')
        else:
            print('Вы угадали, поздравляем!')
            print(f'Число попыток: {trys}')
            print('Спасибо, что играли в числовую угадайку. Еще увидимся...')
            break
        number = int(input())
        trys += 1

def is_valid(num):
    return 1 <= num <= 100

# game_guesse()

# Шифр Цезаря. Очень плохая реализация.
def caesar_cipher_1(data: str, rot: int):
    RU_LEN = 32
    chipher_date = ''
    a = ord('а')
    A = ord('А')
    low_case_ch = [chr(x) for x in range(a, a + RU_LEN)]
    low_case = [x for x in range(a, a + RU_LEN)]

    up_case_ch = [chr(x) for x in range(A, A + RU_LEN)]
    up_case = [x for x in range(A, A + RU_LEN)]

    print(''.join(low_case_ch))
    # print(up_case, len(up_case))

    if rot > 31:
        rot = rot%31

    for i in data:
        code = ord(i)
        if code in low_case:
            if rot > (low_case[-1] - code):
                chipher_date += chr(low_case[0] + rot - (low_case[-1] - code) - 1)
            else:
                chipher_date += chr(code + rot)
        elif code in up_case:
            if rot > (up_case[-1] - code):
                chipher_date += chr(up_case[0] + rot - (up_case[-1] - code) - 1)
            else:
                chipher_date += chr(code + rot)
            
        else:
            chipher_date += i

    return chipher_date


# Шифр Цезаря. Нормальная реализация.
def caesar_cipher_2(data: str, rot: int, lang='ru'):

    RU_LEN = 31
    EN_LEN = 25

    chipher_date = ''
    d = [chr(x) for x in range(ord('а'), ord('я') + 1)]
    ru_low_case = ''.join(d) * 2
    d = [chr(x) for x in range(ord('А'), ord('Я') + 1)]
    ru_up_case = ''.join(d) * 2

    d = [chr(x) for x in range(ord('a'), ord('z') + 1)]
    en_low_case = ''.join(d) * 2
    d = [chr(x) for x in range(ord('A'), ord('Z') + 1)]
    en_up_case = ''.join(d) * 2

    if lang == 'ru':
        if rot > RU_LEN:
            rot = rot%RU_LEN
        for i in data:
            if i in ru_low_case:
                chipher_date += ru_low_case[ru_low_case.index(i) + rot]
            elif i in ru_up_case:
                chipher_date += ru_up_case[ru_up_case.index(i) + rot]
            else:
                chipher_date += i
    elif lang == 'en':
        if rot > EN_LEN:
            rot = rot%EN_LEN
        for i in data:
            if i in en_low_case:
                chipher_date += en_low_case[en_low_case.index(i) + rot]
            elif i in en_up_case:
                chipher_date += en_up_case[en_up_case.index(i) + rot]
            else:
                chipher_date += i
    else:
        return '-1'
    
    return chipher_date


# Шифр Цезаря. Нормальная реализация.
def caesar_recipher_2(data: str, rot: int, lang='ru'):

    RU_LEN = 31
    EN_LEN = 25

    chipher_date = ''
    d = [chr(x) for x in range(ord('а'), ord('я') + 1)]
    ru_low_case = ''.join(d) * 2
    d = [chr(x) for x in range(ord('А'), ord('Я') + 1)]
    ru_up_case = ''.join(d) * 2

    d = [chr(x) for x in range(ord('a'), ord('z') + 1)]
    en_low_case = ''.join(d) * 2
    d = [chr(x) for x in range(ord('A'), ord('Z') + 1)]
    en_up_case = ''.join(d) * 2

    if lang == 'ru':
        if rot > RU_LEN:
            rot = rot%RU_LEN
        for i in data:
            if i in ru_low_case:
                chipher_date += ru_low_case[ru_low_case.index(i) - rot]
            elif i in ru_up_case:
                chipher_date += ru_up_case[ru_up_case.index(i) - rot]
            else:
                chipher_date += i
    elif lang == 'en':
        if rot > EN_LEN:
            rot = rot%EN_LEN
        for i in data:
            if i in en_low_case:
                chipher_date += en_low_case[en_low_case.index(i) - rot]
            elif i in en_up_case:
                chipher_date += en_up_case[en_up_case.index(i) - rot]
            else:
                chipher_date += i
    else:
        return '-1'
    
    return chipher_date

# print(caesar_cipher_2("Блажен, кто верует, тепло ему на свете!", 10, 'ru'))
# print(caesar_recipher_2("Лхкрпч, фьш мпъэпь, ьпщхш пцэ чк ымпьп!", 10, 'ru'))
# print(caesar_cipher_2("To be, or not to be, that is the question!", 17, 'en'))


def length(data: str):
    ret = 0
    for i in data:
        if i.isalpha():
            ret += 1
    return len([x for x in data if x.isalpha()])
    

def caesar_cipher_test(data: str):
    l = data.split()
    ret = ''
    for sim in l:
        rot = length(sim)
        for i in sim:
            ret += caesar_cipher_2(i, rot, 'en')
        ret += ' '
    return ret

# print(caesar_cipher_test("my name is Python!"))
# print(caesar_cipher_test('Day, mice. "Year" is a mistake!'))

def test(num):
    bin_num = bin(num)  # 0b1111111
    oct_num = oct(num)  # 0o177
    hex_num = hex(num)  # 0x7f

    print(bin_num[2:])  # 1111111
    print(oct_num[2:])  # 177
    print(hex_num[2:])  # 7f

# test(124)

def my_range_gen(*args):
    if len(args) == 1:
        cnt = 0
        while cnt != args[0]:
            yield cnt
            cnt += 1
    elif len(args) == 2:
        cnt = args[0]
        while cnt < args[1]:
            yield cnt
            cnt += 1
    elif len(args) == 3:
        if args[2] > 0:
            cnt = args[0]
            while cnt < args[1]:
                yield cnt
                cnt += args[2]
        elif args[2] == 0:
            return
        else:
            cnt = args[0]
            while cnt > args[1]:
                yield cnt
                cnt += args[2]


for i in my_range_gen(8):
    print(i)

# for i in my_range_gen(8, 5, -1):
#     print(i)

# for i in my_range_gen(10, 30, 3):
#     print(i)

# for i in my_range_gen(30, 1, 0):
#     print(i)

# for i in my_range_gen(30, 1, -5):
#     print(i)

# for i in my_range_gen(5):
#     print(i)


# s = my_range_gen(5)
# print(next(s))
# print(next(s))
# print(next(s))
# print(next(s))
# print(next(s))
# print(next(s))
        
# def f(*args, **kwargs):
# 	print(args, kwargs)

# f(5, 4, 5, 6, 1, a = 1, b = 5, c = 6, name = 123)