App for a tabletop RP that generates hits and misses for weapons
The way you normally emulate switches in Python is with a dictionary. That's a bit of a funny solution when you have to evaluate all these conditions though. If they were regular values then you could mathematically determine them and save lines that way, but since you have the odd variations those changes would only obfuscate your code for the sake of a cleverer seeming solution. I would suggest you gather the printed values into a result at least. You could access them with a value key and return that value the same way.

hit_strings = {
                5: "CRIT! HEADSHOT!"
                3: "Lethal!",
                2: "Severe!",
                1: "Ouch!",
                0.5: "Grazed!",
                0: "Miss!",
              }

def hitCheck(rng, acc):
    hitTotal = acc + rng
    if hitTotal &gt; 190:
        result = 5
    if 160 &lt; hitTotal &lt; 191:
        result = 4
    if 120 &lt; hitTotal &lt; 161:
        result = 2
    if 80 &lt; hitTotal &lt; 121:
        result = 1
    if 40 &lt; hitTotal &lt; 81:
        result = 0.5
    if 0 &lt; hitTotal &lt; 41:
        result = 0

    print (hit_strings[result])
    return result


It's still long, but this does make it more modular and easier to expand with more values.

The luck generator isn't particular different no, just have one call. You should also remove your defunct comments that you used as print tests.

Your big problem in getReady is that you try to cram everything into one function. You could separate them out easily with functions like get_attempts

def get_attempts():
    while True:
        print("\n")
        total = input('Max attempts: ')
        print("\n")
        if total == '' or int(total) &lt; 0:
            print("Value must be higher than 0!")
        else:
            total = int(total)
            return total

#Here's the main part of the app.
def getReady():
    running = False
    while not running:
        i = downed = total = 0
        total = get_attempts()


Though going back to get_attempts, you should just put newline characters in your input string instead of on separate lines. Also it's better to validate that input is actually a number. The most Pythonic way to do this is to attempt to turn it into an integer and catch it if that's not possible.

def get_attempts():
    while True:
        total = input('\n\nMax attempts:\n\n')
        try:
            total = int(total)
        except ValueError:
            print("Value must be a number!")


Then you can test if it's greater than 0 and print the other message if it's not.

        if total &gt; 0:
            return total
        print("Value must be higher than 0!")


Splitting up your functions like this will make your code much neater and easier to change.