2017-05-10 9 views
1

私はpythinが新しく、いくつかのデータを収集するためにif文を試してみようとしています。if文、pythonの追加の列を表示

import grovepi 
import time 
import datetime 
import grovelcd 
#headerline 
print ("Time,Noise (db),Light (lux),Temperature (C),Humidity (rH)") 

ここには、csvファイルに印刷されるときの既存のヘッダー行があります。以下に概要を示す別の情報が必要です。上記

while True: 
    timestamp=time.time() 
    #read from a analog sensor on input 1 
    d= grovepi.analogRead(1) 
    #read from an analog sensor on input 2 
    a= grovepi.analogRead(2) 
    #read from an digital sensor on input 3 
    (t,h)=grovepi.dht(3,0) 

私が望むどのような各センサの読み取り

print ("%f,%d,%d,%f,%f"%(timestamp,d,a,t,h)) 

iが値を取ると、それは私が望むものと一致するかどうかを判断するためにif文を取得して問題が生じています、追加の値です。これらはすべて数値でなければなりません。

私が持っているアイデアは、私は、この出力のように見えてきたものを基本的に

if t > 35: 
    print("Warning") 
if h > 50: 
    print("Warning") 
if n > 75: 
    print("Warning") 
else: 
    print("OK") 

です:達成しようとして何イム

Noise Light Temperature Humidity 
85  500  34   76 

はこれです:

Noise Light Temperature Humidity Note 
85  500  34   76  OK 

すべてのヘルプ感謝を、私は不幸にも非常によくPythonを知らない。

+0

まず、組み込みの' sprint() 'はありません。この機能は他のモジュールから提供されていますか?第2に、 'if'ステートメントの' else'は最後の 'if'だけを参照します。 't 'と' h'の値にかかわらず、 'n <= 75'のときだけOKが出力されます。警告がないときにOKを印刷する場合は、コードの最後のブロックを書き直す必要があります。 – DyZ

+0

私はスプリントを変更しました、私は考えて印刷する必要があります – HCI

答えて

0

あなたはこのように、あなたは、単純なブール変数でそれを行うことができます「警告、1234567890,34.3,51.2,70.3」のように、余分な列を印刷する場合:上記

while True: 
    ... 
    warning = t > 35 or h > 50 or n > 75 
    print ("%f,%d,%d,%f,%f,%s" % (
     timestamp, d, a, t, h, "Warning" if warning else "OK" 
    )) 

、私は」 veはwarningをブール条件として定義し、インラインif演算子が「警告」または「OK」のどちらかを印刷する場合に使用されます。

あなたは文字列変数に割り当てることができ、余分な柔軟性が必要な場合:

while True: 
    ... 
    # Note, only message for the first matching condition would display 
    if t > 35: 
     message = "Warning: T" 
    elif h > 50: 
     message = "Warning: H" 
    elif n > 75: 
     message = "Warning: N" 
    else: 
     message = "OK" 
    print ("%f,%d,%d,%f,%f,%s" % (timestamp, d, a, t, h, message)) 

をそして、あなたは複数のメッセージを表示する必要がある場合、あなたはこのように、リストを収集することができます。

while True: 
    ... 
    warnings = [] 
    if t > 35: 
     warnings.append("WarnT") 
    if h > 50: 
     warnings.append("WarnH") 
    ... 
    status = " ".join(warnings) if warnings else "OK" 
    print ("%f,%d,%d,%f,%f,%s" % (timestamp, d, a, t, h, status)) 

これを(["WarnT", "WarnH"]のような)リスト内のすべての警告を収集し、リストが空でない場合は、スペース(" ".join(warnings))に結合し、 "WarnT WarnH"になります。そうでなければ "OK"をメッセージとして使用します。適切な出力を調整します。

これが役に立ちます。

(固定小数点数を使用する場合は、%fの代わりに%0.2fなどを使用することを検討することがあります)「59.031045032」のような「59.03」など、 ")

+0

ちょうどそれを試してみました、大変感謝します。より柔軟なオプションについても知っておくと、非常に便利です。 – HCI

+1

素晴らしい。また、ちょうど 't、h = grovepi.dht(3、0)'の 't、h'の括弧は必要ないことを指摘しておきたいと思います。カッコを付けることは間違いではありません。ただ必要ないだけです。 – drdaeman

+1

おかげで、もっときちんとしたものは素晴らしいです。助けてくれてありがとう、私のためのpythonの初期の日が、私はそこに行く! – HCI

関連する問題