game_utils.py 2.55 KB
 UPPERCASE_LETTERS = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K",
                     "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
LOWERCASE_LETTERS = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
                     "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]


def to_uppercase(letter: str) -> str:
    if letter in LOWERCASE_LETTERS:
        # swap it out for the uppercase version
        idx: int = LOWERCASE_LETTERS.index(letter)
        upper_version: str = UPPERCASE_LETTERS[idx]
        return upper_version
    return letter


def uppercase(word: str) -> str:
    """
    Returns a new version of `word` where every letter is uppercased.

    Args:
        word (str): The string to uppercase

    Returns:
        str: The uppercased version of `word`
    """
    output: str = ""
    for letter in word:
        letter = to_uppercase(letter)
        output += letter
    return output


#####################
"""
done: bool = False
while not done:
    ans = input("Are we done yet?").lower()
    if ans == "yes":
        done = True
        
done: bool = False
while not done:
    ans = input("Are we done yet?").lower()
    done = ans == "yes"


ans: str = "no"
while ans != "yes":
    ans = input("Are we done yet?").lower()
"""

#####################


def ask_for_choice(prompt: str, valid_choices: list[str]) -> str:
    """
    Repeatedly prompts the user asking them to make a choice that is
    a member of `valid_choices`.

    Args:
        prompt (str): The prompt to give the user
        valid_choices (list[str]): A list of valid choices

    Returns:
        str: The choice the user inputed
    """
    resp = None
    while resp not in valid_choices:
        resp = input(prompt)
    assert isinstance(resp, str)
    return resp



def is_answer(s: str | None, yn: set) -> bool:
    """
    Returns True when `s` is a member of `yn` and False otherwise

    Args:
        s(str | None): The string to test
        yn(set): A set of potential valid answers

    Returns:
        bool: True iff `s` in `yn`
    """
    return False


def prompt_yes_no(prompt: str) -> bool:
    """
    Repeatedly prompts the user with prompt until they respond with
    an answer starting with y or n. 

    Args:
        prompt (str): The prompt to give to the user

    Returns:
        bool: Returns True when the user eventually inputs y and False when they input n.
    """
    result = None
    while not is_answer(result, set(["Y", "N"])):
        result = input(prompt)
    return is_answer(result, set(["Y"]))