在运行函数n次后执行某些操作

2024-06-25 06:42:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我以前问过关于这个项目的问题。我快做完了,但我还需要一件事。这是关于水管里的水溢出。它从两个温度传感器读取数据,并计算温差。如果差异正常或需要采取措施,则应在一定数量的测量后通过电子邮件通知。到目前为止,我已经设法在一次测量后发送了一封电子邮件。但是温度差在管道中并不少见,所以我想在一定数量的测量之后通知大家。这就是我到目前为止所做的:

def aflaes_raa_data():
    f1 = open(fil1, "r")
    f2 = open(fil2, "r")
    linjer1 = f1.readlines()
    f1.close()
    linjer2 = f2.readlines()
    f2.close()
    return linjer1, linjer2


def udregn_temp(raw):
   equals_pos = raw[1].find("t=")
   if equals_pos != -1:
       temp_string = raw[1][equals_pos + 2:]
       temp_c = float(temp_string) / 1000.0
       return temp_c


def aflaes_temp():
    linjer1, linjer2 = aflaes_raa_data()
    while linjer1[0].strip()[-3:] != "YES":
        time.sleep(0.2)
    linjer1, linjer2 = aflaes_raa_data()
    temp1 = udregn_temp(linjer1)
    temp2 = udregn_temp(linjer2)
    return "Sensor 1: %d" % temp1 + " grader", "Sensor 2: %d" % temp2 + " grader"


def temp_diff():
    linjer1, linjer2 = aflaes_raa_data()
    temp1, temp2 = udregn_temp(linjer1), udregn_temp(linjer2)
    print("Temperaturforskellen er: ")
    return abs(temp1-temp2)


def send_mail(afsender, password, modtager, emne, email_tekst):
    if 0 < temp_diff() < 4:
        send_mail("something@gmail.com", "password", "something@gmail.com", "Besked fra din vandmåler",
        "Afløbsrør: Temperaturforskellen er lige nu %d, og er højere end grænsen . Handling påkrævet!" % (
                temp_diff()))
    else:
        send_mail(EMAIL_FROM, PASSWORD, EMAIL_TO, "Besked fra din vandmåler",
            "Afløbsrør: "
            "Temperaturforskellen "
            "er lige nu "
            "%d, og er på tæt på 0" % (temp_diff()))


while True:
    print(aflaes_temp())
    print(temp_diff())
    time.sleep(2)

我试过使用for循环

for i in range(10):
    if 0 < temp_diff() < 4:
        send_mail("something@gmail.com", "password", "something@gmail.com", "Besked fra din vandmåler",
              "Afløbsrør: Temperaturforskellen er lige nu %d, og er højere end grænsen . Handling påkrævet!" % (
                  temp_diff()))
    else:
        send_mail("something@gmail.com", "password", "something@gmail.com", "Besked fra din vandmåler",
              "Afløbsrør: "
              "Temperaturforskellen "
              "er lige nu "
              "%d, og er på tæt på 0" % (temp_diff()))

和一个嵌套循环

for i in range(10):
    aflaes_temp()
    for n in range(1):
        if 0 < temp_diff() < 4:
           send_mail("something@gmail.com", "password", "something@gmail.com", "Besked fra din vandmåler",
          "Afløbsrør: Temperaturforskellen er lige nu %d, og er højere end grænsen . Handling påkrævet!" % (
              temp_diff()))
        else:
          send_mail("something@gmail.com", "password", "something@gmail.com", "Besked fra din vandmåler",
          "Afløbsrør: "
          "Temperaturforskellen "
          "er lige nu "
          "%d, og er på tæt på 0" % (temp_diff()))

但是我只得到了几次temp_diff的输出,然后是一封电子邮件。我在互联网上到处找过,但我只能找到运行函数n次的例子


Tags: comsenddiffmailpasswordtempgmailsomething
1条回答
网友
1楼 · 发布于 2024-06-25 06:42:24

如果我正确理解了您的问题,您不需要立即发送电子邮件,而是希望观察3-4个测量值。根据这个测量,你需要做出决定

有很多方法可以实现。我提供了一个解决方案,您将监视theSampleCount个测量值,并获取样本的median。如果中值在范围内,则可以发送电子邮件

import statistics
while True:
    theSampleCount = 10 # you will monitor 10 samples
    samples = []
    while(theSampleCount>0):
        theSampleCount -= 1
        temp_diff_var = temp_diff()
        samples.append(temp_diff_var)
        print(aflaes_temp())
        print(temp_diff_var)
        time.sleep(2) # delay after which you want to measure
    # now you have 4 samples, you will take the median
    median_value = statistics.median(samples)
    # now apply your logic here on median_value. 
    # based on that you can determine whether to send an email or not
    if 0 < median_value < 4:
        send_mail("something@gmail.com", "password", "something@gmail.com", "Besked fra din vandmåler",
        "Afløbsrør: Temperaturforskellen er lige nu %d, og er højere end grænsen . Handling påkrævet!" % (
                median_value))
   else:
        send_mail(EMAIL_FROM, PASSWORD, EMAIL_TO, "Besked fra din vandmåler",
            "Afløbsrør: "
            "Temperaturforskellen "
            "er lige nu "
            "%d, og er på tæt på 0" % (median_value))

这是完整的代码

def aflaes_raa_data():
    f1 = open(fil1, "r")
    f2 = open(fil2, "r")
    linjer1 = f1.readlines()
    f1.close()
    linjer2 = f2.readlines()
    f2.close()
    return linjer1, linjer2


def udregn_temp(raw):
   equals_pos = raw[1].find("t=")
   if equals_pos != -1:
       temp_string = raw[1][equals_pos + 2:]
       temp_c = float(temp_string) / 1000.0
       return temp_c


def aflaes_temp():
    linjer1, linjer2 = aflaes_raa_data()
    while linjer1[0].strip()[-3:] != "YES":
        time.sleep(0.2)
    linjer1, linjer2 = aflaes_raa_data()
    temp1 = udregn_temp(linjer1)
    temp2 = udregn_temp(linjer2)
    return "Sensor 1: %d" % temp1 + " grader", "Sensor 2: %d" % temp2 + " grader"


def temp_diff():
    linjer1, linjer2 = aflaes_raa_data()
    temp1, temp2 = udregn_temp(linjer1), udregn_temp(linjer2)
    #print("Temperaturforskellen er: ")
    return abs(temp1-temp2)

import statistics
while True:
    theSampleCount = 10 # you will monitor 10 samples
    samples = []
    while(theSampleCount>0):
        theSampleCount -= 1
        temp_diff_var = temp_diff()
        samples.append(temp_diff_var)
        print(aflaes_temp())
        print(f"Temperaturforskellen er: {temp_diff_var}")
        time.sleep(2) # delay after which you want to measure
    # now you have 4 samples, you will take the median
    median_value = statistics.median(samples)
    # now apply your logic here on median_value. 
    # based on that you can determine whether to send an email or not
    if 0 < median_value < 4:
        send_mail("something@gmail.com", "password", "something@gmail.com", "Besked fra din vandmåler",
        "Afløbsrør: Temperaturforskellen er lige nu %d, og er højere end grænsen . Handling påkrævet!" % (
                median_value))
   else:
        send_mail(EMAIL_FROM, PASSWORD, EMAIL_TO, "Besked fra din vandmåler",
            "Afløbsrør: "
            "Temperaturforskellen "
            "er lige nu "
            "%d, og er på tæt på 0" % (median_value))

相关问题 更多 >