Noob here trying to wrap my head around this idea I had. I know it's not pythonic or anything. Just trying to get a basic system working here but this is the closest to a functioning version of what I'm trying to do. Tried a bunch of things and can't seem to get the `options` to update properly. Really hope some feedback can point me in the right direction. Iv included the entire code, the part with the commented section in the `challenge()` function by `battleChoice` is my main issue. I can't get the `options` dictionary values to change to call different functions based on the current page.

```
import random

class Player:

    def __init__(self, name, element, attack, defence, hp, mp, alive=True, beatsEnemy=False):
        self.name = name
        self.element = element
        self.attack = attack
        self.defence = defence
        self.hp = hp
        self.mp = mp
        self.alive = alive
        self.beatsEnemy = beatsEnemy

    def get_name(self):
        return self.name

    def element():
        print()
        print(f'Hi {P.name}, your current element is {P.element}.')
        print()
        print("What would you like to change it to?")
        print()
        for key, value in elements.items():
                print(f"{key}) {value}")

        eleInp = input("---> ")
        if eleInp in elements.keys():
            P.element = elements[eleInp]
            print(f'You have successfully changed your element to {P.element}.')

        else:
            print("Invalid")

    def spells():
        playerSpells = {}
        for key, value in elements.items():
            if P.element in elements.values():
                playerSpells = P.element.spells
                pass
            else:
                pass

    def playerInput(self):
        running = True

        while running:    

            inp = input("---> ")
            if inp in options.keys():
                options[inp]()
                for key, value in options.items():
                    print(f"{key}) {value.__name__.capitalize()}")

            else:
                print("Invalid")

    def attacking():
        enemy = random.choice(basicEnemies)
        for keys, values in elementalStrengths.items():

                    if P.element in keys and enemy.element in values:
                        print("You have the elemental advantage!")
                        P.beatsEnemy = True
                        enemy.beatsEnemy = False

                    elif enemy.element in keys and P.element in values:
                        print("Enemy has the Elemental Advantage")

                        enemy.beatsEnemy = True
                        P.beatsEnemy = False

                    else:
                        Player.beatsEnemy = False
                        enemy.beatsPlayer = False

        battling = True
        while battling:

                if P.hp <= 0 or enemy.hp <= 0:
                    print("Battle ended.")
                    battling = False
                    if P.hp <= 0:
                        print("You died!")
                        P.alive = False
                    else:
                        print(f'{enemy.name} has died!')

                elif P.hp > 0 and enemy.hp > 0:
                    print(f'{enemy.name} - {enemy.hp} HP ')
                    print()
                    print(f'{P.name} - {P.hp} HP')
                    myDamage = enemy.defence - P.attack
                    enemyDamage = P.defence - enemy.attack
                    P.hp += enemyDamage
                    enemy.hp += myDamage
                    print(enemyDamage)
                    print(myDamage)
                    print(P.hp)
                    print(enemy.hp)

class SpellBook():
    pass

class StoryLine:

    def __init__(self, name, pageNumber, currentOptions, description, info):
        self.name = name
        self.pageNumber = pageNumber
        self.currentOptions = currentOptions
        self.description = description
        self.info = info

    def print_to_screen(self):
        print(self.name)
        print(f'Page Number: {self.pageNumber}')
        for key, value in options.items():
            print(f"{key}) {value.__name__.capitalize()}")
        print(self.description)
        print(self.info)

    def change_options(self):
        for key, value in options.items():
            print(f"{key}) {value.__name__.capitalize()}")

def challenge():                                    
    print("Challenge")
    print("You wish to battle?")
    battleChoice = {'1': "yes", '2':"no"}
    options = battleChoice
    Player.playerInput(battleChoice)
    #battleChoice = int(input("""1) Yes, 2) No
#---->"""))
    #if battleChoice == 1:
        #print("Commence Battle!!!")
        #Player.playerInput(battleOptions)
        #Player.attacking()

    #elif battleChoice == 2:
        #battle = False
        #print("You cowardly ran away...")
    #else:
        #print("----> ")

def stats():
    print("_Player Stats_")
    print()
    print(f'Element - {P.element}')
    print(f'Attack - {P.attack}')
    print(f'Defence - {P.defence}')
    print(f'Health - {P.hp}')
    print(f'Mana - {P.mp}')
    print()

def menu():
    print("Menu Page ")
    print()

    print("Menu Options ")
    print()

def exits():
    print("Thanks for playing!!! :) ")

    exit()

options = {'1': challenge, '2': stats, '3': menu, '4': Player.element, '5': exits}

battleOptions = {'1': Player.attacking, '2': "defend", '3': stats, '4': "items", '5': "run"}

elementalStrengths = {"Fire":["Earth", "Lightning"], "Earth":["Water", "Wind"], "Water":["Fire", "Wind"], "Wind":["Fire", "Lightning"], "Lightning":["Earth", "Water"]}

P = Player("Random", "Lightning", 15, 10, 100, 100, True)
E1 = Player("Slime", "Water", 15, 10, 20, 20, True)
E2 = Player("Ember", "Fire", 15, 10, 20, 20, True)
E3 = Player("Wisp", "Wind", 15, 10, 20, 20, True)
E4 = Player("Rots", "Earth", 15, 10, 20, 20, True)
E5 = Player("Spark", "Lightning", 15, 10, 20, 20, True)

E6 = Player("Armored Slime", "Water", 25, 25, 250, 250, True)

basicEnemies = [E1, E2, E3, E4, E5]

intEnemies =[]

advEnemies  = []

elements = { '1': "Fire", '2': "Water", '3': "Earth", '4': "Air", '5': "Lightning"}

intro = StoryLine("Introduction ", 1, (options), "This is the introduction page. ", "Introduces the game.")
intro2 = StoryLine("Introduction Two", 2, (battleOptions), "This is the second introduction page. ", "Introduces the game again.")

print("welcome player... ")
print(P.get_name())
intro.print_to_screen()
Player.playerInput(options)

```