Python程序没有结束

时间:2016-03-25 17:23:08

标签: python

我是一个完整的python noob,我试图找出当我输入“0”时为什么我的程序没有结束。它只是重新启动菜单。

def menu():
    print('\n\n\n\n')
    print('List Processing Program Menu')
    print('0 to exit')
    print('1 to view data')
    print('2 to append data')

    while(1):
        try:
            choice = -1
            while(choice < 0 or choice > 2):
                choice = int(input('Please enter a valid number choice '))
            break
        except ValueError:
            print('Enter an integer number for your menu selection')
        return choice

def main():
    while(1):
        choice = menu()
        if(choice == 0):
            break
main()

6 个答案:

答案 0 :(得分:1)

while(choice < 0 or choice > 2):
    choice = int(input('Please enter a valid number choice '))
    break

你的问题就在这里。 while循环被打破,并且始终返回None(在每个Python函数的末尾都有一个return的{​​{1}}。

您可以按如下方式清理代码:

None

答案 1 :(得分:1)

menu没有返回任何值,因为您的return语句位于while循环中,而break循环位于main之前。因此,在None内,选择始终为return

如果您取消缩进def menu(): print('\n\n\n\n') print('List Processing Program Menu') print('0 to exit') print('1 to view data') print('2 to append data') while(1): try: choice = -1 while(choice < 0 or choice > 2): choice = int(input('Please enter a valid number choice ')) break except ValueError: print('Enter an integer number for your menu selection') return choice def main(): while(1): choice = menu() if(choice == 0): break main() 语句,这将按预期工作。

try/except

如果您想要简明扼要,可以删除所有def menu(): choice = -1 while choice < 0 or choice > 2: choice = int(input('Please enter a valid number choice')) return choice def main(): choice = -1 while choice != 0: choice = menu() 语句,因为您无论如何都不需要执行这些语句。

function! GoHtml()
    GoFmt
    if !empty(b:current_syntax)
            unlet b:current_syntax
    endif
    syn include @html syntax/html.vim
    syntax region htmlCode start=+<!DOCTYPE+ keepend end=+</html>+ contains=@html containedin=goRawString contained
endfunction

autocmd BufEnter *.go call GoHtml()
autocmd BufWrite *.go call GoHtml()

execute pathogen#infect()

" don't save automatically, let us handle this
let g:go_fmt_autosave = 0

" for golang: automatically run GoImports
let g:go_fmt_command = "GoImports"

答案 2 :(得分:0)

while (choice < 0 or choice > 2):循环之后,您说break,但return choice位于while(1)循环内。这意味着您的函数将隐含返回None,而不是choice。您只需要取消缩进return choice行。

答案 3 :(得分:0)

您的def menu(): print('\n\n\n\n') print('List Processing Program Menu') print('0 to exit') print('1 to view data') print('2 to append data') choice = None while choice not in [0, 1, 2]: try: choice = int(input('Please enter a valid number choice ')) except ValueError: print('Enter an integer number for your menu selection') return choice 函数返回menu(),因为您的None语句位于return循环内,当条目有效时,您while。{ / p>

取消您的break声明,以便它与return对齐,或者更好,只是来自循环内的while,而不是使用return

答案 4 :(得分:0)

你永远不会回归choice,因为它在你的第一个while循环中。当您中断while循环时,您只返回None,因为没有指定特定的返回。你有两个选择:

将返回移到while循环之外,或者执行以下操作:

    try:
        choice = -1
        while(choice < 0 or choice > 2):
            return int(input('Please enter a valid number choice '))
    except ValueError:
        print('Enter an integer number for your menu selection')

答案 5 :(得分:0)

您在阅读选项时需要缩进中断,否则菜单功能将始终返回无。

    try:
        choice = -1
        while(choice < 0 or choice > 2):
            choice = int(input('Please enter a valid number choice '))
            break
    except ValueError:
        print('Enter an integer number for your menu selection')