首页 > 解决方案 > 为什么 main() 和 if __name__=='__main__': main() 会造成麻烦?

问题描述

def removal(DataList, n):
    if len(DataList) < 2*n:
        print "Not enough elements!"
    for i in range(n):
        DataList.remove(min(DataList))
        DataList.remove(max(DataList))
    return sorted(DataList)

def main():
    inputs = []
    while True:
        inp = raw_input("Please enter a new integer, press ENTER if you want to stop: ")
        if inp == "":
            break
        else:
            inputs.append(inp)
    removal(inputs,2)
if __name__=='__main__':
    main()
main()

ValueError: min() arg is an empty sequence 同时,如果我不在 main() 中编写代码并且如果name ==' main ',我会得到一个At a ,我可以使用以下代码。

def removal(DataList, n):
    #return to a sorted list with n smallest and n largest numbers removed. 
    for i in range(n):
        DataList.remove(min(DataList))
        DataList.remove(max(DataList))
    return sorted(DataList)
inputs = []
while True:
    inp = raw_input("Please enter a new integer, press ENTER if you want to stop: ")
    if inp == "":
        break
    else:
        inputs.append(inp)
removal(inputs,2)

有人可以解释为什么它在以前不起作用,我应该如何使它起作用?

标签: python-2.7main

解决方案


和:

if __name__=='__main__':
    main()
main()

您调用该main函数两次(当您的程序作为主程序运行时),因此在您输入一系列数字并按另一个 Enter 结束输入后,main调用removal执行预期操作,这些操作不会产生任何输出,并返回主程序开始另一次调用main,提示输入另一串数字。如果此时您只需按另一个 Enter,您最终会得到一个空列表inputs,您的removal函数无法正确处理该列表,并且会min使用空列表调用,从而导致ValueError: min() arg is an empty sequence.


推荐阅读