python中的switch-case程序

python中的switch-case程序,python,mysql,Python,Mysql,我正在努力获得python中的switch case程序,当我运行脚本时,我想显示三个选项 输入您的选择: 1.插入记录 2.更新记录 3.显示记录 在看到这些之后,用户应该能够输入他的选择。因为我是python新手,所以我在谷歌上搜索发现python中没有开关大小写 def main(): print("Enter your choice : ") print("1.Insert Records \n2.Update Records \n3.Display Records")

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

输入您的选择:

1.插入记录

2.更新记录

3.显示记录

在看到这些之后,用户应该能够输入他的选择。因为我是python新手,所以我在谷歌上搜索发现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()
这是我尝试过的,但没有用,因为它需要在运行scripteg时输入choice。python abc.py 1

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)

如果您正在构建一个交互式菜单,那么命令行选项可能不是这里的最佳选择。改为使用,以便打印提示并使用一系列交换。请参阅。

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

import sys

print sys.argv
使用python script.py调用时,1233将打印['1'、'2'、'3']

如果您想在程序的executiopn上获得用户输入,您应该使用。仔细查看返回值等细节


Martijn提出的下一个问题是python没有开关大小写。您应该使用if-elif-else构造。

听起来您想提示用户输入。在Python2.x中,使用原始输入。用户输入字符串,所以我更改了您要查找的内容。并在找到匹配项后使用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()

您可以使用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()

希望这有帮助

您可以将选择作为参数传递,否则它将询问。 我更喜欢切换情况下的lambda版本,以确保它仅在访问时执行。 通过这种方式,您可以将print1等替换为高性能任务,并且不会针对dict中的每个条目运行

Python 3示例:

导入系统 def get_输入: 打印输入您的选择: 返回输入1.插入记录\n2.更新记录\n3.显示记录 def主: 如果lensys.argv>1,则choice=sys.argv[1]否则获取_输入 { “1”:lambda:print1, “2”:lambda:print2, “3”:lambda:print3, “4”:lambda:print4, }.getchoice,lambda:Print您输入了错误的选项 如果uuuu name uuuuu==\uuuuuuuu main\uuuuuuuu: 主要的 在python2中相同:

导入系统 def get_输入: 打印输入您的选择: 返回原始输入1.插入记录\n2.更新记录\n3.显示记录 def打印阀: 打印val def主: 如果lensys.argv>1,则choice=sys.argv[1]否则获取_输入 { “1”:lambda:print_val1, “2”:lambda:print_val2, “3”:lambda:print_val3, “4”:lambda:print_val4, }.getchoice,lambda:print_Vale您输入了错误的选项 如果uuuu name uuuuu==\uuuuuuuu main\uuuuuuuu: 主要的
sys.argv值始终都是字符串。不清楚这是关于切换还是获取用户输入。你看过内置的输入功能了吗?用户只有在看了选项后才能输入他的选择,我如何实现这一点?这个问题与mysql无关,你能改变它吗?嗨,tintin,你能解决你的问题吗?