只需在循环之外收集您的输入(在您进入循环之前)。您真的希望用户输入 1000 个数字吗?好吧,也许你会。但只需在顶部包含一个循环并在开始时收集 1000 个数字,并将它们存储在一个数组中。
然后在下半部分改变你的循环,让它完成所有的工作。那么如果有人在没有键盘的情况下输入了一些东西,那就不再重要了。
像这样的东西:
def getvars(top=1000):
vars = []
for i in range(0,top):
anum = int(raw_input('%d) Please enter another number: ' % i))
vars.append(anum)
return vars
def doMagic(numbers):
top = len(numbers)
for number in numbers:
# do magic number stuff
print 'this was my raw number %s' % number
if __name__ == "__main__":
numbers = getvars(top=10)
doMagic(numbers)
以不同的方式呈现,更少依赖操作系统
还有另一种方法可以做到这一点。我没有方便的 windows 框来测试它,但它是我曾经使用的一个技巧,而且它没有记录。也许我在泄露秘密......但它基本上是这样的:通过调用在你的魔法计算开始时打开屏幕保护程序功能的 api,让操作系统认为你的应用程序是一个屏幕保护程序。在魔术计算结束或准备再次接受输入时,再次调用 api 并关闭屏幕保护程序功能。
那会奏效。
还有另一种方法可以做到这一点。由于您在 Windows 中,因此这也可以。但它的工作量相当大,但并不是太多。在 Windows 中,作为前景的窗口(在 Z 顺序的顶部)该窗口获取“原始输入线程”。原始输入线程接收鼠标和键盘输入。因此,要捕获所有输入,您需要做的就是创建一个位于 Z 顺序顶部的透明或(非透明)窗口的函数 setWindowPos 可以解决问题,让它覆盖整个屏幕并可能显示消息,例如 Even Geduld 或 Please wait 当您准备好提示用户进行更多输入时,您使用 showwindow() 隐藏窗口,显示以前的结果,获取输入,然后重新显示窗口并捕获所有键/鼠标再次。
当然,所有这些解决方案都将您绑定到特定的操作系统,除非您实现了某种类型的 try/except 处理和/或包装低级 Windows SDK 调用。