2017-01-16 7 views
0

私はタイマー(Python 3.6.0)を作ろうとしています。簡単なタイマーの他の投稿があることはわかっていますが、もっと複雑なタイマーを作りたいと思っています。ここに私のコードは次のとおりです。プログラムの実行中にPythonがwhileループを実行している間、どのようにリアルタイム入力を取得できますか?

import time 

x = 0 

run = input("Start timer? [Y]/[N]") 
while run == 'Y': 
    time.sleep(1) 
    x += 1 
    print(x) 
else: 
    print("end of code") 

は、whileループを破る方法は、(タイマーを停止することができるように)はありますか?ユーザーがループを止めることができるように、 "x = 1"行の下に "in = input()"を入れると、ユーザーは毎秒入力を提供する必要があるため、タイマーはカウントを停止します。私が上記のコードを何らかの入力なしで実行すると、ループが継続するので、Pythonシェルに何も入力できません。この問題を解決する方法はありますか?

+0

input()を実行しながらコードを実行するには、スレッドを使用する必要があります。これは非常に複雑になります。あなたはこれが本当に必要なのですか? –

+0

http://stackoverflow.com/questions/3295938/else-clause-on-python-while-statement –

+0

[こちら](http://stackoverflow.com/questions/40949738/implementing-a-timercountdown-that-あなた自身を始めるために役立つ、それ自体が重複しているゲームロジックと一緒に走るパラレル)。注:Alex Martelliのベースコピーは、異なるOSで動作するようになっているようです。 – roganjosh

答えて

0

コメントで説明したように、このようなものがあなたに適しているかもしれません。私は、タイマがinputを待っている間にやらなければならないことは確かではありませんが、おそらくこれが役に立ちます。

import time 

start_timer = input('Do you want to start the timer? Y/N: ') 

if start_timer.lower() == 'y': 
    print('Type N or n to break the loop') 
    start = time.time() 
    while start_timer.lower() != 'n': 
     start_timer = input() 

    end = time.time() 
    print('Total loop time: {}'.format(end - start)) 
else: 
    print('Ok, ending') 

編集:whileループから抜け出すための 唯一の方法は、Nまたはnを(それがNであれば.lower()の使用はnへの入力に変換されます)を入力することです。システム時刻は、ループに入る前に記録されます。ユーザーは、nを除いて、望む限り何でも入力することができます。 nと入力すると、ループが解除され、システム時刻が再度取得され、開始時刻と終了時刻の差が表示されます。実行中のタイマーは必要ありません。前後の時間だけです。

+0

@BramFran私は少しコードを変更しました。ループを中断する方法は1つしかないので、ループを中断するように設定された入力(この場合は「n」)と一致しない場合、ユーザーは入力を続行できます。私も説明を加えました。 – roganjosh

+0

これは私が必要としていたものです!非常に賢いsoloution。 –

関連する問題