为什么我的break会调用之前的函数

Why does my break call the previous function

我有两个函数,第一个调用第二个。但是,当我跳出第二个函数时,它会显示来自第一个函数中的 if 语句的文本。我不明白的是,为什么第二个函数调用第一个函数?其次,我不明白为什么它会从从未满足条件的 if 语句中执行代码。

#! /usr/bin/env python

'''A sorting app where the user gets to choose 

between options and the options are ranked by 

likes in a file stored on a file'''

import sys
import random
import pickle 

def intro():
    greeting = '''\nWelcome to chooser where your voice gets to be heard

Press Enter to begin greatness
Press anything else to be immediately banned
>>'''
    enter = raw_input(greeting).lower()
    if enter == '':
        main()
    if enter == 'admin':
        print 'Entering Admin menu\n'
        admin()
    else:
        print '''\nDid you think I was kidding?!
You're gone!\n'''
        sys.exit()
# Enters the main program if the user presses Enter or else it quits 
def main():
    count = 0
    while True:
        nav = '''Type Go to play
Type Q to quit
Type admin to go to admin
>>'''
        start = raw_input(nav).lower()
        if start == 'q':
            print '\nThank you for playing\nBye!\n'
            break
        else:
            print 'Any other key restarts the function'
def chooser():
    pass
if __name__ == '__main__':
    intro()

'''                         -----Questions-----
Why does this function when it expires run the intro function instead of just 
running out of scope????'''

这是终端输出的内容:

基本上在部分:

if enter == '':
    main()
if enter == 'admin':
    print 'Entering Admin menu\n'
    admin()
else:
    print '''\nDid you think I was kidding?!

您有两个单独的语句,一个 'if' 和一个 'if-else' 紧随其后。 第一个检查输入是否为 '',此条件在您的示例中成立,因此调用 main() 并且一切正常。 当 main() returns 时,退出第一个语句并进入第二个语句,它检查输入是否为 admin(这是 false),如果不是,则进行打印。

这里的逻辑是:

  • 如果输入是 '',运行 main()。
  • 如果输入是 'admin',运行 admin()。
  • 如果输入不是 'admin',打印消息。

else 部分与第一个 if 完全无关(仅与第二个)。您需要做的是将第二个 'if' 替换为 'elif',从而生成单个 'if-elif-else' 语句,因此逻辑将是:

  • 如果输入是 '',运行 main()。
  • if enter 不是 '', enter 是 'admin', 运行 admin().
  • 如果输入不是 '',也不是 'admin',则打印消息。