python中的switch case程序

时间:2017-04-27 06:25:31

标签: python mysql

我正在努力在python中获得一个switch case程序,当我运行脚本时我想显示三个选项

输入您的选择:

1.插入记录

2.更新记录

3.Display Records

在看到这些之后,用户应该能够输入他的选择。自从我对python的新手我用Google搜索并发现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()

这是我尝试过的但没有用,因为它需要在运行脚本时输入选择(例如python abc.py 1

5 个答案:

答案 0 :(得分:1)

您可以使用dict代替switch / case,如下所示:

from sys import argv

def insertRecord(args):
  ...

def updateRecord(args):
  ...

def displayRecords(args):
  ...

{
  1 : insertRecords,
  2 : updateRecords,
  3 : displayRecords
}[argv[1]](argv[2])

如果您想捕获默认情况,可以添加以下内容:

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()

希望这会有所帮助。

答案 1 :(得分:0)

sys.argv字符串的列表。您正试图将其中一个与整数进行比较,如果没有转换,这将无效。

在这种情况下,您不需要转换,只需与字符串进行比较:

if choice == '1':
    print 1
elif choice == '2':
    print 2
elif choice == '3':
    print 3
else:
    print("You entered a wrong choice")

您仍然可以先将字符串转换为整数,以便进行更复杂的检查:

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)

如果要构建交互式菜单,那么命令行选项可能不是最佳选择。请改用input() function,以便打印提示并使用一系列交换。请参阅Asking the user for input until they give a valid response

答案 2 :(得分:0)

查看sys.argv的说明。它不用于运行时的输入。相反,它用于在调用脚本时将参数传递给脚本。所以这个脚本:

com.adobe.plugins.GAPlugin

使用import sys print sys.argv 跟注时,会打印python script.py one two three

如果您希望获得有关程序执行的用户输入,请使用input。仔细查看返回值等详细信息。

Martijn的下一个问题是python没有switch-case。你应该使用['one', 'two', 'three'] constrcution。

答案 3 :(得分:0)

听起来你想提示用户输入。在python 2.x中,使用raw_input。用户输入字符串,因此我更改了您要查找的内容。在找到匹配项后,使用elif结束比较。

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()

答案 4 :(得分:0)

您可以将选择作为参数传递,否则它将询问。 我更喜欢lambda版本在“ switch-cases”中,以确保仅在访问时才执行。 这样,您就可以用性能密集型任务替换print(1)等,并且它不会在字典中的每个条目上都运行。

Python3示例:

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()

与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()