2012-01-24 11 views
0

これはPythonで行うことができますか? 無限ループを印刷し、ループ間の値を変更することから始めます。Pythonが無限ループのときの値を変更

x = 5 
while (true): 
    print x 
x = 3 # regain control of the interpreter and set to new value 

予想される出力:

5 
5 
5 
...... 
3 
3 
3 
+0

出力値の変化をトリガ条件が存在する必要があります。いつPythonで値を変更しますか? – mauris

+6

一歩を踏み出して、このアイデアで実際に解決しようとしていることを教えてください。 – wim

+0

「ループ3回印刷5回、ループ3回印刷3回」?なぜあなたは無限ループを望んでいますか? –

答えて

4

いいえ、あなたが書いたコードは動作しません。終了していないループの後のステートメントは決して実行されません。また、threadingを使用

x = 5 
while True: 
    if (some-condition): 
    x = 3 
    print x 

、第二のスレッドでxの値を変更します:

は、次の試してみてください

def changeX(): 
    global x 
    x = 3 

x = 5 
import threading 
threading.Timer(3, changeX).start() # executes changeX after 3 seconds in a second thread 

while True: 
    print x 
+0

スレッディングは、Pythonインタプリタを実行し、メインスレッドのグローバル状態にアクセスできる別のスレッドを設定する必要がある場合を除いて、彼が何をしたいのかについての最良の説明のように聞こえるでしょうか? o_O –

0

ない正確に。なぜあなたはこれをしたいのですか?根本的な問題は何ですか?

"正しい"方法は、おそらくwhileループ内のコードを変更して、時々実際にあなたの状態をチェックし、それを終了するときにループを終了させることです(例えば、入力)それと

述べ、技術的に、あなたは、(winpdbとしてデバッガを使用して、実行中のプログラムにアタッチすることができ、またはそれとpdbと混乱に建てられた。

をしかし、あなたはおそらく私が「の場合、何をしたいのかあなたの根底にある動機について推測しているが、他の処理を同時に行っているにもかかわらず、引き続き入力を受け入れる。

その場合、Pythonでスレッドを使用する方法を学びたいと思っています。 threadingモジュールを確認してください。

1

それはあなたがこれを行うために必要なものは不明だが、あなた「ctrl-c」イベントをキャッチして新しい値を入力することができます:

x = 5 
while True: 
    try: 
     print x 
    except KeyboardInterrupt: 
     x = raw_input("Enter new value: ").strip() 
1

この質問に対する最良の答えは、スレッドを使用することであるが、実行中のインタプリタスレッドにコードを挿入する方法があります:

https://fedorahosted.org/pyrasite/

+0

interesintgリンク – delita

関連する問題