BEEGEEK [ Python 3 ]
5.0/5 rating 1 vote

Пароль BEEGEEK банка имеет вид a:b:c, где a, b и c – натуральные числа. Поскольку основатель BEEGEEK фанатеет от математики, то он решил:

  • число a – должно быть палиндромом;
  • число b – должно быть простым;
  • число c – должно быть четным.

Напишите функцию is_valid_password(password), которая принимает в качестве аргумента строковое значение пароля password и возвращает значение True если пароль является действительным паролем BEEGEEK банка и False в противном случае.

Мусор, но понятный:

# объявление функции
def is_valid_password(password):
    split_password = password.split(':')
    
    # является ли первое число палиндромом
    flag = True
    low_text = split_password[0].lower()
    list_for_print = []
    for i in range(len(low_text)):
        if low_text[i].isalnum() is True:
            list_for_print.append(low_text[i])

    for i in range(len(list_for_print) // 2):
        if list_for_print[i] != list_for_print[-1 - i]:
            flag = False
            break
        
    # является ли второе число простым
    count = 0
    flag_2 = True
    for i in range(2, int(split_password[1]) + 1):
        if int(split_password[1]) % i == 0:
            count += 1
    if count == 1:
        flag_2 = True
    else:
        flag_2 = False
        
    # является ли третье число четным
    if int(split_password[2]) % 2 == 0:
        flag_3 = True
    else:
        flag_3 = False
        
    if flag is True and flag_2 is True and flag_3 is True and len(split_password) == 3:
        return True
    else:
        return False
    
psw = input()

# вызываем функцию

print(is_valid_password(psw))

 Короче и красивее:

def is_valid_password(password):
    password = password.split(':')
    a, b, c = password[0], int(password[1]), int(password[2])
    if len(password) != 3 or a != a[::-1] or c % 2 != 0:
        return False
    for i in range(2, b):
        if b % i == 0:
            return False
    return True   
    
psw = input()
print(is_valid_password(psw))

 Было представлено такое решение: 

# число a – должно быть палиндромом;
# число b – должно быть простым;
# число c – должно быть четным.

# объявление функции
def is_valid_password(password):
    password = password.split(':')
    return (password[0] == password[0][::-1]) and (len([i for i in range(1, int(password[1])+1) if int(password[1]) % i == 0]) == 2) and (int(password[2]) % 2 == 0)

# считываем данные
psw = input()

# вызываем функцию
print(is_valid_password(psw))
Входные данные         Выходные данные    
1 15551:7:290 True
2 155561:7:290 False
3 15551:72:290 False
4 15551:7:291 False
5 155351:70:290 False
6 1551151:700:2901 False
7 11111:71:90000 True
8 24422442:181:890000 True
9 1221:101:22:22 False
10 1221:101:22:221221:101:22:22 False