Python 3.4.2:我的无限函数while循环不起作用

时间:2015-02-13 12:57:12

标签: python function loops while-loop

我的无限while循环无法正常工作:

def main():
    print("Type 1 to create a file")
    print("Type 2 to read a file")
    print("Type 3 to append a file")
    print("Type 4 to calculate total of file")
    print("Type 5 to end the program")
    choice=input("Select a number:")
    if choice == '1':
            file_create(filename)
    elif choice == '2':
            read_file(filename)
    elif choice == '3':
            append_file(filename)
    elif choice == '4':
            add_numbers(filename)
filename=input("Give a name to your file:")     
while main():
    # ...

执行main一次,但不循环。

2 个答案:

答案 0 :(得分:2)

Mr.Anyoneout,Sylvain绝对是正确的。既然你不理解它,我会解释。 一个循环需要一个条件: - 真或假。 所以当你说: -

while True:
    print('World')

与: -

相同
a = 100
while a == 100:
    print('poop')

因为== 100将评估为'True',并且因为让值保持不变而启动循环,并启动无限循环。但是你可以直接进行评估,即'True',以便直接启动无限循环。

如你所说: -

while main():
    print('World')

所以现在想...当main()... main()是什么?...编译器没有得到任何代码来评估某些内容为'True'或'False'并且循环永远不会启动!

所以你需要的正确代码是: -

while True:
    main()

答案 1 :(得分:0)

def main():
    # ...
    # <- no return statement

while main():
    # Something

只要条件为真,while循环就会循环。在这里,由于您的main()函数没有return语句,因此它不会返回任何显式。所以Python的行为好像它正在返回NoneNone不是真的。所以条件是假的,你甚至不执行一次身体。


那样的事情(假设你需要在用户想要退出之前执行main()):

def main():
    # ...
    print("Type 9 to quit")
    choice=input("Select a number:")
    if choice == '9':
        return False

    # Handle other cases
    if choice == '1':
        file_create(filename)
    elif choice == '2':
        # ...

    return True

另一方面,正如@thiruvenkadam在下面的评论中所建议的那样,你可以保留你的主题,因为它写在你的问题中,但真的 写一个无限循环:

while True:
    main()

但是,如果你想优雅地终止你的程序,你将不得不依赖其他一些机制,比如使用例外...