ループの外側 (ループに入る前) で入力を収集するだけです。ユーザーに 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)
異なる種類の方法で提示され、OS への依存度が低くなります
動作するはずの別の方法があります。私はそれをテストするのに便利なWindowsボックスを持っていませんが、それは私が使用していたトリックであり、かなり文書化されていません. おそらく私は秘密を漏らしています...しかし、基本的にはこのようなものです.魔法の計算の開始時にスクリーンセーバー機能をオンにするAPIを呼び出すことで、アプリがスクリーンセーバーであるとOSに思わせる. 魔法の計算が終了したとき、または入力を再び受け入れる準備ができたときに、API を再度呼び出して、スクリーンセーバー機能をオフにします。
それはうまくいくでしょう。
それを行う別の方法もあります。あなたは窓にいるので、これもうまくいきます。かなりの量の作業ですが、それほど多くはありません。Windows では、フォアグラウンド (Z オーダーの一番上) にあるウィンドウは、そのウィンドウが「生の入力スレッド」を取得します。生の入力スレッドは、マウスとキーボードの入力を受け取ります。したがって、すべての入力をキャプチャするには、Z オーダーの一番上にある透明なウィンドウまたは (非透明な) ウィンドウを立ち上げる関数を作成するだけです。 Even Geduld または Please wait などのメッセージをユーザーにさらに入力を求める準備ができたら、showwindow() を使用してウィンドウを非表示にし、以前の結果を表示し、入力を取得してからウィンドウを再表示し、すべてのキー/マウスをキャプチャします。もう一度。
もちろん、これらのソリューションはすべて、何らかの試行/例外処理および/または低レベルの Windows SDK 呼び出しのラッピングを実装しない限り、特定の OS に結び付けられます。