Python Forum
How do I shorten my input options? - text adventure - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: How do I shorten my input options? - text adventure (/thread-1413.html)



How do I shorten my input options? - text adventure - ShiningKnight - Dec-31-2016

As the tittle states I want to shorten a piece of my code into something like a dictonary, im fairly new to python and dont really know how to go about this so any help or an example would be great.
	print (" Go to the -")
	print ("1.) Tavern")
	print ("2.) Arena")
	print ("3.) Quest Board")
	print ("4.) Potion Shop")
	print ("5.) Blacksmith")

	Option = input("-->")
	if (Option == "1"):
		print("You enter the Tavern")
		Tavern()
	elif (Option == "2"):
		print("You enter Arena")
		preArena()
	elif (Option == "3"):
		print("You walk to the Quest Board")
		Quest_Board()
	elif (Option == "4"):
		print("You enter the Potion Shop")
		Potion_Shop()
	elif (Option == "5"):
		print("You enter the Blacksmith")
		Blacksmith()



RE: How do I shorten my input options? - text adventure - Larz60+ - Jan-01-2017

class smart_dict(dict):
    def __missing__(self, key):
        return key

def Tavern():
    print('Typed 1')

def preArena():
    print('Typed 2')

def Quest_Board():
    print('Typed 3')

def Potion_Shop():
    print('Typed 4')

def Blacksmith():
    print('Typed 5')

options = {
    '1': ['You enter the Tavern', Tavern, 'Go to the -Tavern'],
    '2': ['You enter Arena', preArena, 'Go to the - Arena'],
    '3': ['You walk to the Quest Board', Quest_Board, 'Go to the - Quest Board'],
    '4': ['You enter the Potion Shop', Potion_Shop, 'Go to the - Potion Shop'],
    '5': ['You enter the Blacksmith', Blacksmith, 'Go to the - Blacksmith']
}

smart_dict(options)

while True:
    n=1
    print()
    for key, value in options.items():
        print('{}.) {}'.format(n, value[2]))
        n += 1

    Option = input("-->")
    if Option == options[Option]:
        continue
    print(options[Option][0])
    options[Option][1]()
I added stubs for the various functions you need to write


RE: How do I shorten my input options? - text adventure - Mekire - Jan-01-2017

Not actually shorter in this case, but hopefully you can gain some insight into how you could do things like this:
entrance = {"standard" : "You enter the {}.", "walk" : "You walk to the {}."}


options = [(Tavern, "Tavern", "standard"), 
           (preArena, "Arena", "standard"),
           (Quest_Board, "Quest Board", "walk"),
           (Potion_Shop, "Potion Shop", "standard"),
           (Blacksmith, "Blacksmith", "standard")]
    

print(" Go to the -")
for i, option in enumerate(options, start=1):
    print("{}.) {}".format(i, option[1]))


option = int(input("-->")) - 1
call, name, message = options[option]
print(entrance[message].format(name))
call() 
Assuming that those areas are classes you could roll the information in entrance and options into them as well.


RE: How do I shorten my input options? - text adventure - ichabod801 - Jan-01-2017

There's a tutorial on exactly that.