为什么 main() 和 if __name__=='__main__': main() 造成了麻烦?
why main() and if __name__=='__main__': main() is causing trouble?
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',我会没事的使用以下代码。
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)
有人可以解释为什么它在 former 中不起作用吗?我应该如何让它起作用?
与:
if __name__=='__main__':
main()
main()
你调用了main
函数两次(当你的程序是运行作为主程序时),所以当你输入一串数字后,再按一次回车结束输入, main
调用 removal
进行预期的操作,不产生任何输出,returns 到主程序开始另一个调用 main
,提示另一个系列的数字输入。如果此时您简单地按下另一个 Enter,您最终会得到 inputs
列表的一个空列表,您的 removal
函数无法正确处理该列表,并且会调用 min
列表,导致 ValueError: min() arg is an empty sequence
.
的异常
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',我会没事的使用以下代码。
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)
有人可以解释为什么它在 former 中不起作用吗?我应该如何让它起作用?
与:
if __name__=='__main__':
main()
main()
你调用了main
函数两次(当你的程序是运行作为主程序时),所以当你输入一串数字后,再按一次回车结束输入, main
调用 removal
进行预期的操作,不产生任何输出,returns 到主程序开始另一个调用 main
,提示另一个系列的数字输入。如果此时您简单地按下另一个 Enter,您最终会得到 inputs
列表的一个空列表,您的 removal
函数无法正确处理该列表,并且会调用 min
列表,导致 ValueError: min() arg is an empty sequence
.