2016-05-13 49 views
1

我有一個代碼來讀取模擬數據,我打印出來就像數字(開,關)。當狀態爲ON時,我在屏幕上看到多個ON;當它關閉時,我在屏幕上看到多個關閉。閱讀完後,我會將數據傳輸到Google Spreadsheets。所以我只需要在狀態改變時轉移。我在這裏討論了一些話題,但我沒有找到我想要的東西。如果我找到解決方案,我認爲這對人們有幫助。如果狀態改變,如何打印一次(沒有倍數)?

這裏是我的代碼:

while True: 
    if sensor > 1.60: 
    Status = 'ON' 
    else: 
    Status = 'OFF' 

    print("Status : {}".format(Status)) 

我試圖命令如下狀態休息= 'ON',但它不是一個很好的解決方案。

+2

此代碼是否在某種循環中執行?如果您只對狀態更改感興趣,則必須跟蹤以前的值並根據您的邏輯進行。 – 2016-05-13 07:10:24

+0

除非您顯示包含打印的循環,否則我們將無法解釋如何在循環外打印... –

+0

將'prev_Status'初始化爲'None'。然後,在更新'Status'後,將它與'prev_Status'進行比較。如果它是一樣的,什麼都不要做。如果不是,則打印「Status」,並執行'prev_Status = Status'。 –

回答

1

按照您的要求,這是我的建議。這與其他人發佈的內容非常相似,除了這裏我已經明確地展示了初始化和循環。唯一缺少的是更新sensor的代碼。

prev_Status = None 

while True: 
    if sensor > 1.60: 
     Status = 'ON' 
    else: 
     Status = 'OFF' 

    if Status != prev_Status: 
     print("Status : {}".format(Status)) 
     prev_Status = Status 
1

試試這可能嗎?您需要在開始時初始化preStatus ='ON'

if sensor > 1.60: 
    Status = 'ON' 
else: 
    Status = 'OFF' 

if preStatus!=Status: 
    print("Status : {}".format(Status)) 
    preStatus=Status 
+0

你忘了縮進上次的作業。如果'if'條件是錯誤的,它沒有任何用處。 –

+0

我對這個問題的理解是,如果條件是錯誤的,那麼什麼都不會打印,在這種情況下,preStatus ==狀態 –

+0

恩,是的,那是我的觀點。做一個無用的任務通常是不好的代碼。如果他們*已經*相等,這個任務就沒用了。你只需要做這個任務,如果他們*不*相等。換句話說,就像我說的那樣,你忘了縮進最後一項任務。這不是功能上的變化。這只是更好(更高效)的代碼。 –

0

只需添加另一個變量,每次檢查輸入時都會更新並引用它。

if sensor > 1.60 and previous_status == 'OFF: 
    Status = 'ON' 
    previous_status = 'ON' 
elif sensor <= 1.60 and previous_status == 'ON': 
    Status = 'OFF' 
    previous_status = 'OFF' 

希望這會有所幫助。

+0

我想你不會比較'Status'和'previous_Status' – coskukoz

+0

@CoşkunKozakbaş。我改變了我的答案,以顯示兩者之間更好的關係。 –