我是一个完整的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()
答案 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')