Source code for pytholic.variety

import re as _re
import time as _time
import random as _random


"""
Exceptions
"""


class __UnholyWordError(Exception):
    def __str__(self):
        print("An unholy word has been used.")


class __NumberTooBigError(Exception):
    def __str__(self):
        print("I can only convert numbers as big as 9999 :(")


class __WrongAnswerError(Exception):
    def __str__(self):
        print("It's not that hard :(")


class __SelfDestructError(Exception):
    def __str__(self):
        print("BOOOOOOOOOOOOOOOOOMMMMMMMM.")


"""
Util
"""


def __int_to_roman(num):
    """Turns an int into a string containing a roman representation of that
    number.
    """
    roman_numbers = [
        1000, 900, 500, 400,
        100, 90, 50, 40,
        10, 9, 5, 4,
        1
    ]
    normal_numbers = [
        "M", "CM", "D", "CD",
        "C", "XC", "L", "XL",
        "X", "IX", "V", "IV",
        "I"
    ]
    roman_num = ''
    i = 0
    while num > 0:
        for _ in range(num // roman_numbers[i]):
            roman_num += normal_numbers[i]
            num -= roman_numbers[i]
        i += 1
    return roman_num


"""
The cool stuff :D
"""


[docs]def sanctify(text: str) -> str: """It turns a given string into a latin-like version. The letter "u" is swapped by "v", normal numbers are swapped by roman numbers, all letters are capitalized. :param text: The string to be formatted. :type text: str :return: The given string, but with capital letters, v instead of u and roman numbers instead of normal numbers. :rtype: str :raises TypeError: If a value other than a string is passed as parameter. :raises UnholyWordError: If the string contains the words: satan, demon, baphomet, lucifer, 666 or devil. :raises NumberTooBig: If a number is greater than 9999. >>> text = "Hello World!, i'm 99 years old, good luck" >>> text = sanctify(text) >>> print(text) HELLO WORLD!, I'M XCIX YEARS OLD, GOOD LVCK """ if type(text) != str: raise TypeError sanctified_string = "" forbidden_words = ["satan", "demon", "baphomet", "lucifer", "666", "devil"] text_format = text.lower() # Throws an error if any of the forbidden words are used for word in forbidden_words: if word in text_format: raise __UnholyWordError # call the function to swap normal numbers into roman ones, then it swaps # those numbers within the string numbers_list = _re.findall(r'[0-9]+', text_format) numbers_list = sorted(numbers_list, reverse=True, key=len) if numbers_list is not None: for number in numbers_list: num_int = int(number) if num_int > 9999: raise __NumberTooBigError roman_number = __int_to_roman(num_int) text_format = text_format.replace(number, roman_number) # swaps "u" for "v" because in latin u == v for letter in text_format: if letter == "u": letter = "v" # sums up all the characters sanctified_string += letter # Capital letters because its baseder return sanctified_string.upper()
[docs]def trinity(): """ Explanation of the doctrine of the Holy Trinity through an interactive little game. """ while True: question1 = input( "3 variables, father, son and holy_ghost, have the same value: " '"God", is it possible to say that they are all "God"?\n' "[y] Yes\n" "[n] No\n" ) if question1.lower() == "y": question2 = input( "One value in 3 different variables, one God in 3 different " "Persons, simple as.\n" "[y] Yes\n" ) if question2.lower() == "y": print("🇻🇦") break else: for countdown in range(_random.randint(3, 10), 0, -1): print("Self-destruction in ", countdown) _time.sleep(1) raise __SelfDestructError elif question1.lower() == "n": raise __WrongAnswerError else: print("Type only y or n") _time.sleep(1) continue
if __name__ == "__main__": import doctest doctest.testmod()