说明:
编辑:我只需要方法菜单返回“即将到来”,因为-就目前而言,如果用户输入c,p或s,则它什么也不返回。我不明白为什么会这样。
def PrintDescription():
print 'This program encrypts and descrypts messages using multiple \
encryption methods.\nInput files must be in the same directory as this program.\
\nOutput files will be created in this same directory.'
def StartMenu():
print 'Do you wish to encrypt or decrypt?'
print '<e>ncrypt'
print '<d>ecrypt'
print '<q>uit'
def MethodMenu():
print 'Which method would you like to use?'
print '<c>aesarian fixed offset'
print '<p>seudo-random offset'
print '<s>ubstitution cipher'
a = raw_input("")
while a not in ('c', 'p', 's'):
if a:
print "Error: You must type c, p, or s"
a = raw_input("")
if a == 'c' or a=='p' or a=='s':
print 'Coming Soon'
def main():
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,.?! \t\n\r"
PrintDescription()
a = None
while a not in ('e', 'd', 'q'):
if a:
print "Error: You must type e, d, or q"
else:
StartMenu()
a = raw_input("")
if a == 'e' or a=='d':
MethodMenu()
if a == 'q':
break
main()
最佳答案
在提出解决方案之前,这里有一些评论。
MethodMenu()函数当前不返回任何内容。我认为您是要退还用户的选择。
我看到了StartMenu()和MethodMenu()之间的模式:每个模式都显示一个选择列表,并反复获取用户的输入,直到用户输入正确的输入为止。但是,StartMenu()函数不管理用户的输入,而MethodMenu()确实在设计中==>不一致。
由于获取用户输入并对其进行验证的行为发生了两次,因此最好将代码块移到一个单独的函数中,您可以调用该函数,而不是多次编写同一代码块。
我注意到单字母变量a的用户。通常,我建议使用更具描述性的名称,例如user_choice,user_answer或user_input。
事不宜迟,我的解决方案是:
def PrintDescription():
print 'This program encrypts and descrypts messages using multiple \
encryption methods.\nInput files must be in the same directory as this program.\
\nOutput files will be created in this same directory.'
def GetChoice(acceptable_answers):
while True:
user_choice = raw_input('')
if user_choice in acceptable_answers:
return user_choice
else:
print 'Please try:', ', '.join(acceptable_answers)
def StartMenu():
print 'Do you wish to encrypt or decrypt?'
print '<e>ncrypt'
print '<d>ecrypt'
print '<q>uit'
user_choice = GetChoice('edq')
return user_choice
def MethodMenu():
print 'Which method would you like to use?'
print '<c>aesarian fixed offset'
print '<p>seudo-random offset'
print '<s>ubstitution cipher'
user_choice = GetChoice('cps')
return user_choice
def main():
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,.?! \t\n\r"
PrintDescription()
while True:
user_choice = StartMenu()
if user_choice in ('e', 'd'):
user_choice = MethodMenu()
# Do something based on the user_choice
if user_choice == 'q':
break
main()
更新资料
如果您必须了解
MethodMenu()
的问题,请按以下说明进行操作:用户第一次键入正确的选项(c,p或s):跳过了整个while循环,这意味着“即将推出”被打印。您可以修改解决方案,也可以使用hek2mgl。