+ 2
How to switch?
Hello Pythoneers! I am trying to write a program for ATM that accepts from user a choice of operation and executes an operation, which is basically a method. As we know there is no switch case in Python. SO how to handle it without it? As piece of script you can find below: https://code.sololearn.com/cWH9ofLI40Ze
12 Answers
+ 4
# Simply chain 'if' and 'elif' (else if) statements:
if choice == 1:
print('choice 1')
elif choice == 2:
print('choice 2')
elif choice == 3:
print('choice 3')
elif choice == 4:
print('choice 4')
# or you can define a dict (or list in case of continuous numeric keys) containing function to execute:
def onchoice1():
print('choice 1')
def onchoice2():
print('choice 2')
def onchoice3():
print('choice 3')
def onchoice4():
print('choice 4')
choices = { 1: onchoice1, 2 : onchoice2, 3 : onchoice3, 4 : onchoice4 }
choices[choice]()
+ 4
hello Saidamamad brother ! i am from tajikistan do you have viber or imo
+ 2
I did this task using C# once, but I need to learn Python now. It is a little bit confusing for me (
+ 2
# Lambda are useful to define short functions, so in such case as my examples, lambda are useful to avoid defining named function.
# On the other hand, in your last example lambdas are used only to define a call to another function: you could do better with:
return { 1 : ATM.checkBalance,
2: ATM.withdraw,
3: ATM.deposit,
4: ATM.exitProgram,
}.get(choice,ATM.errorOccured)()
+ 2
Practice, practice and practice again is the key... with curiosity: at each new problem to solve, you will search solutions, reading stuff, discovering new language features, and so step by step you will get more ideas for next problems to solve ;)
+ 2
Thank you very much!!! 🙏
+ 1
@visph thanks a lot! That one works! I did similar to that but in dictionary I wrote the parantheses along with the method name, so when the program run, the methods in the dictionary are executed 😂 which is unwanted.
choices[choice] () is amazing trick! 😊👍
+ 1
And I found a tutorial in youtube, which shows a good way also by defining a class method:
@classmethod
def operation(cls, choice):
return{ 1: lambda: ATM.checkBalance(),
2: lambda: ATM.withdraw(),
3: lambda: ATM.deposit(),
4: lambda: ATM.exitProgram(),
}.get(choice,lambda: ATM.errorOccured())()
while(True):
try:
choice = int(input('Operation mode: '))
except:
ATM.errorOccured()
continue;
ATM.operation(choice)
+ 1
It use a temporary dict with lambda functions under the hood ;)
Use of lambda could be a good idea (depending on context), but use of temporary litteral dict is not really, even if the lack of efficiency doesn't have a real impact in almost contexts ^^
0
So using lambda should be avoided in this case? Didn't get you well :(
0
Thank you very much, @visph! I am very week for these kind of tricks :( I don't know how to get like these ideas for problem solving :)
0
it is corret