Simulated arcade with a slot machine and number-guessing game
slotmachine() and higherorlower() call gameend(). In turn, gameend() may call main(). This is considered "spaghetti code", because functions should not be used as goto labels.

Rather, if your code acts as a loop, then it should be written with a loop, like this:

def main():
    while True:
        menu = int(input("What would you like to play?(Enter the corresponding number for each one)\n1. Slot Machine - 20 coins per turn\n2. Higher or Lower - 10 coins per turn\n"))
        if menu == 1:
            slot_machine(tokens)
        elif menu == 2:
            higher_or_lower(tokens)
        if game_end():
            break


The way you pass tokens is inappropriate. In main(), you are using a global variable tokens. However, in slotmachine() and higherorlower(), there is a local variable coincidentally named tokens, due to the function parameter. Make up your mind whether you want to use a global variable or pass the state around using parameters and return values.