import re input = "cqjxjnds" mistakeable_letters = re.compile(r"([iol])") doubles = re.compile(r"(.)\1") def gen_new_password(pInput): new_password = False ret = pInput while new_password != True: characters = list(ret) char = characters[len(characters)-1] characters[len(characters)-1] = chr(ord(char) + 1) for i in range(len(characters)-1, 0, -1): if characters[i] == '{': characters[i] = 'a' characters[i-1] = chr(ord(characters[i-1]) + 1) ret = "".join(characters) no_mistakable_letter = False two_doubles = False letter_sequence = False mistakeable_letter_count = len(re.findall(mistakeable_letters, ret)) if mistakeable_letter_count == 0: no_mistakable_letter = True double_count = len(re.findall(doubles, ret)) if double_count >= 2: two_doubles = True for i in range(0, len(characters)-3): if ord(characters[i+1]) == ord(characters[i]) + 1 and ord(characters[i+2]) == ord(characters[i]) + 2: letter_sequence = True if no_mistakable_letter == True and two_doubles == True and letter_sequence == True: new_password = True return ret password_1 = gen_new_password(input) password_2 = gen_new_password(password_1) print("First new password: " + password_1) print("Second new password: " + password_2)