2017-01-16 96 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 Shell中輸入任何內容,因爲循環繼續進行。有什麼辦法可以解決這個問題嗎?

+0

如果您希望在執行輸入()時執行代碼,則需要使用線程。這可能會很快變得非常複雜。你確定這是你需要做的嗎? –

+0

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

+0

請參閱[這裏](http://stackoverflow.com/questions/40949738/implementing-a-timercountdown-that-與遊戲邏輯運行 - pararell)本身是一個重複,以幫助您開始。注意:Alex Martelli的基本副本似乎在跨不同操作系統的工作中起作用。 – 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循環的唯一方法是鍵入Nn(使用.lower()將輸入轉化爲n如果N)。進入循環之前記錄系統時間。用戶可以隨時鍵入他們想要的任何東西,除了n。然後鍵入n將打破循環,再次獲取系統時間,並顯示開始和結束時間之間的差異。無需運行計時器,只需「前後」時間即可。

+0

@BramFran我已經稍微更改了代碼。現在只有一種方法可以打破循環,允許用戶繼續輸入輸入,只要它們與設置爲中斷循環的輸入不匹配(在這種情況下爲'n')。我還添加了一個解釋。 – roganjosh

+0

這正是我需要的!非常聰明的soloution。 –