我正在努力在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
)
答案 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()