0

我需要编写一个加密程序,而我正在完成作业。下面列出了这部分的说明。如果他们不输入 e、d 或 q,我如何告诉 python 重做 while 循环?我的 q 条目工作正常,但如您所见,我需要帮助来尝试创建用户输入另一个字符的情况。

确保用户使用 while 循环输入“e”或“d”或“q”,以使他们重做任何错误的输入。然后 StartMenu() 应该将他们的选择返回给 main() 函数,其中 main() 的变量应该捕获该返回值。

 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 main():
    alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,.?! \t\n\r"
    PrintDescription()
    while True:
        StartMenu()
        a = raw_input("")
        if a!='e' and a!='d' and a!='q':
          print 'You must enter e, d or q'
          False
          break
        if a == 'q':
         break
4

2 回答 2

2

只是为了放弃评论中的扩展对话,这应该满足您的所有要求:

def main():
    alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,.?! \t\n\r"
    PrintDescription()
    a = None
    while a not in ('e', 'd', 'q'):
        if a:
            print "Try again!"
        else:
            StartMenu()
        a = raw_input("")
    if a == 'q':
        sys.exit(0)

发生了什么...

第一次通过 main 函数时,a 将被设置为 None。然后将开始一个 while 循环,表示继续运行,直到 a 是三个必需字母之一。当然第一次通过a是None,所以会进入while循环。由于 a 为无,因此if a:计算结果为False。所以该块将被跳过。但是,else 将被执行并打印 StartMenu。然后,您将阅读用户输入并决定循环重新开始时要做什么。如果满足条件(即 a 是 'e'、'd' 或 'q' 之一,则它不会再次迭代循环。但是,如果 a 不在三个字母中,则再次迭代循环将开始。然而,这一次,a 是这样if a:计算的True. 现在它打印“再试一次!” 并且不打印 StartMenu。从现在开始,这将一直持续到输入三个字母之一。

于 2013-03-23T04:04:07.853 回答
1
while raw_input("") not in ['e', 'd', 'q']:
   berate_user()
于 2013-03-23T03:53:00.740 回答