i am struggling to get a switch case program in python,when i run the script i want to display three options
Enter your choice :
1.Insert Records
2.Update Records
3.Display Records
and after seeing these,the user should be able to enter his choice.Since am new to python i googled and found that there is no switch case in python.
def main():
print("Enter your choice : ")
print("1.Insert Records \n2.Update Records \n3.Display Records")
choice = sys.argv[1]
if(choice == 1):
print 1
if(choice == 2):
print 2
if(choice == 3):
print 3
else:
print("You entered a wrong choice")
if __name__ == "__main__":
main()
This is what i tried but its of no use, because it needs to enter choice at the time of running the script(eg. python abc.py 1
)
Instead of switch/case, you can use a dict, like this:
from sys import argv
def insertRecord(args):
...
def updateRecord(args):
...
def displayRecords(args):
...
{
1 : insertRecords,
2 : updateRecords,
3 : displayRecords
}[argv[1]](argv[2])
If you want to catch a default case, you can add something like this:
from sys import argv
def insertRecord(args):
...
def updateRecord(args):
...
def displayRecords(args):
...
def printHelp():
...
try:
{
1 : insertRecords,
2 : updateRecords,
3 : displayRecords
}[argv[1]](argv[2])
except KeyError:
printHelp()
Hope this helps.
sys.argv
is a list of strings . You are trying to compare one of those to integers, and that won't work without conversion.
In this case, you don't need to convert, just compare to strings instead:
if choice == '1':
print 1
elif choice == '2':
print 2
elif choice == '3':
print 3
else:
print("You entered a wrong choice")
You can still convert the string to an integer first, allowing you to do more complex checks:
try:
choice = int(sys.argv[1])
except ValueError:
print("You entered a wrong choice")
else:
if not 1 <= choice <= 3:
print("You entered a wrong choice")
else:
print(choice)
If you are building an interactive menu, then perhaps the command line options are not the best choice here. Use the input()
function instead so you print prompts and use a series of exchanges. See Asking the user for input until they give a valid response .
Look at the description of sys.argv . It is not used for input in runtime. Rather it is used to pass arguments to script when it is called. So this script:
import sys
print sys.argv
When called with python script.py one two three
would print ['one', 'two', 'three']
If you want to get user input on executiopn of the program you should use input . Look carefully at the details such as returned value etc.
The next issue as makred by Martijn is that python does not have switch-case. You should use if-elif-else
constrcution.
It sounds like you want to prompt the user for input. In python 2.x, use raw_input
for that. Users enter strings, so I changed what you are looking for. And used elif
to end the compares after you find a match.
def main():
print("Enter your choice : ")
choice = raw_input("1.Insert Records \n2.Update Records \n3.Display Records")
if(choice == '1'):
print 1
elif(choice == '2'):
print 2
elif(choice == '3'):
print 3
else:
print("You entered a wrong choice")
if __name__ == "__main__":
main()
You are able to pass the choice as argument OR it will ask. I prefer the lambda-version in "switch-cases" to be sure it will only be executed when accessed. This way you can replace print(1) etc. with a performance intense task and it won't run for every entry in the dict.
Python3 example:
import sys
def get_input():
print("Enter your choice : ")
return input("1.Insert Records \n2.Update Records \n3.Display Records")
def main():
choice = sys.argv[1] if len(sys.argv)>1 else get_input()
{
'1': lambda: print(1),
'2': lambda: print(2),
'3': lambda: print(3),
'4': lambda: print(4),
}.get(choice, lambda: print("You entered a wrong choice"))()
if __name__ == "__main__":
main()
Same in python2:
import sys
def get_input():
print "Enter your choice : "
return raw_input("1.Insert Records \n2.Update Records \n3.Display Records")
def print_val(val):
print val
def main():
choice = sys.argv[1] if len(sys.argv)>1 else get_input()
{
'1': lambda: print_val(1),
'2': lambda: print_val(2),
'3': lambda: print_val(3),
'4': lambda: print_val(4),
}.get(choice, lambda: print_val("You entered a wrong choice"))()
if __name__ == "__main__":
main()
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.