python-2.7 - 为什么 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)
有人可以解释为什么它在以前不起作用,我应该如何使它起作用?
解决方案
和:
if __name__=='__main__':
main()
main()
您调用该main
函数两次(当您的程序作为主程序运行时),因此在您输入一系列数字并按另一个 Enter 结束输入后,main
调用removal
执行预期操作,这些操作不会产生任何输出,并返回主程序开始另一次调用main
,提示输入另一串数字。如果此时您只需按另一个 Enter,您最终会得到一个空列表inputs
,您的removal
函数无法正确处理该列表,并且会min
使用空列表调用,从而导致ValueError: min() arg is an empty sequence
.
推荐阅读
- angular - ActivatedRoute 和 AuthGuard - 从 paramMap 获取 ID 的问题
- ringcentral - How to Query for RingOut Call Duration
- c# - How to add an App.Config in Visual Studio Code?
- c# - WPF ItemsControl 绑定到 UserControls
- java - java中Jtextpane中的.PFM字体
- ios - 无法更新 childAutoId 节点中的节点值以更新字典值
- r - 如何将循环输出转换为向量?
- python - 在 Python 中重塑数组
- python-3.x - 如何解决添加到现有菜单的菜单不显示的问题
- typescript - Typescript 不强制执行函数参数