Python Forum

Full Version: Why does my Switch trigger all Cases?
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hello, I'm a first time user of Python, but I have c++/VB.Net experience. I absolutely dread Python's syntax, but I need to learn it.

What is wrong with my implementation of this switch? Instead of only calling the function of the matching string, it calls all 3.

def f_3OAK():
	print("Hello1.")
	return False

def f_4OAK():
	print("Hello2.")
	return False

def f_5OAK():
	print("Hello3.")
	return False
	
def case(s_Input): #My definition of a Case Switch.
	return {
		'3OAK': f_3OAK(),
		'4OAK': f_4OAK(),
		'5OAK': f_5OAK()
	}[s_Input]

while True:
    case(input("\nPlease enter the win you wish to search for: "))
Thank you in advance.
There is no "switch" or anything else that calls a function in the code you posted.
@woooee, case(input("\nPlease enter the win you wish to search for: ")) will call the case() function.
IAMK - please post code directly rather than using links (which can cause security issues).
Read BBCODE on how to do this
Some changes,get() is nice as it also can span a message(None default) it something is not found.
return in all function.
def f_3OAK():
    return("Hello1.")

def f_4OAK():
    return("Hello2.")

def f_5OAK():
    return("Hello3.")

def case(s_input):
    return {
        '3OAK': f_3OAK(),
        '4OAK': f_4OAK(),
        '5OAK': f_5OAK()
    }.get(s_input, 'Not in dictionary')

user_input = input("\nPlease enter the win you wish to search for: ")
print(case(user_input))
Test:
Output:
λ python sw.py Please enter the win you wish to search for: 3OAK Hello1. λ python sw.py Please enter the win you wish to search for: 3aaa Not in dictionary
(Apr-08-2018, 10:09 PM)snippsat Wrote: [ -> ]def case(s_input):
return {
'3OAK': f_3OAK(),
'4OAK': f_4OAK(),
'5OAK': f_5OAK()
}.get(s_input, 'Not in dictionary')

Thank you. This worked.

However, do you know why my code was printing all 3?
(Apr-09-2018, 09:21 AM)IAMK Wrote: [ -> ]However, do you know why my code was printing all 3?
Function calls in return dictionary will trigger all call.
Could do it like this.
def f_3OAK():
    print("Hello1.")

def f_4OAK():
    print("Hello2.")

def f_5OAK():
    print("Hello3.")

def case(s_Input):
    return {
        '3OAK': f_3OAK,
        '4OAK': f_4OAK,
        '5OAK': f_5OAK
    }[s_Input]

while True:
    case(input("\nPlease enter the win you wish to search for: "))()