Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    111

    problema con degli if in python

    salve a tutti, ho un problema che non riesco proprio a risolvere. in pratica uso python sul mio raspberry per fargli leggere i dati per il consumo di corrente tramite un sensore e finquà tutto ok.
    il problema è che ogni 5 minuti leggo il db (mysql, in locale) e devo tramite la variabile sempre aggiornata di aggiornare i valori minimi e massimi... ma non funziona mi fa solo massimi e tra l'altro la esegue anche se la condizione è falsa... sto impazzendo.. se qualcuno è in grado di aiutarmi... grazie
    Lo script
    codice:
    ...
    
                  if(t.minute == 1) or (t.minute == 5) or (t.minute == 10) or (t.minute == 15) or (t.minute == 20) or (t.minute == 25) or (t.minute == 30) or (t.minute == 35) or (t.minute == 40) or (t.minute == 45) or (t.minute == 50) or (t.minute == 55):
                      if id_media:
                         sqlb = "SELECT min,max FROM consumi WHERE id='%s'" % (id_media)
                         # Execute the SQL command
                         c.execute(sqlb)
                         # Fetch all the rows in a list of lists.
                         results = c.fetchall()
                         for rowb in results:
                               minpw = rowb[0]
                               maxpw = rowb[1]
                               minpw = int(minpw)
                               maxpw = int(maxpw)
                      if(z < minpw):
                                   print "z al momento e ",z," invece minpw e ",minpw
                                   querymin = ("""UPDATE consumi SET min=%s WHERE id=%s""", (z, id_media))
                                   c.execute(*querymin)
                                   # Commit your changes in the database
                                   conn.commit()
                      elif(z > maxpw):
                                   print "z al momento e ",z," invece maxpw e ",maxpw
                                   querymax = ("""UPDATE consumi SET max=%s WHERE id=%s""", (z, id_media))
                                   c.execute(*querymax)
                                   # Commit your changes in the database
                                   conn.commit()
                      else:
                                   print "Dati invariati!!!"
                  if id_media:
                        queryista = ("""UPDATE consumi SET istant=%s WHERE id=%s""", (z, id_media))
                        c.execute(*queryista)
                        # Commit your changes in the database
                        conn.commit()
                        print "potenza attuale e: ",z
       time.sleep(10)
    except KeyboardInterrupt:
       ser.close()
    L'ho dovuto tagliare per postarlo, ho tenuto solo la parte incriminata... ovviamente le variabili vengono rienpite... e con i print di prova è tutto ok ma non lo esegue come da programma...

  2. #2
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Ma quando lo esegui, mostra i print giusti per i vari casi?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    111
    Ciao, si i dati sono giusti, ma proprio ora ho risolto. Mi ero dimenticato che su python se non dichiari che è un intero tipo z = int(z) lui la vede come una stringa... anche se in realtà è un numero... infatti ora funziona perfettamente... stavo impazzendo. ora funziona alla grande. grazie comunque per aver risposto. comunque per non stravolgere la variabile z ne ho dichiarata un'altra... tipo mm = 0 per digli che mm ora vale 0 e quando serve mm = int(z) per dirgli che non è una stringa ma un intero... magari ho aiutato qualcun'altro! ciao ciao

  4. #4
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    ottimo
    fossi in te sistemerei l'if dei minuti: ti do un suggerimento, usa l'operatore "modulo" (%)

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    111
    scusami cioè? mi puoi fare un esempio?

  6. #6
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    se devi fare le verifiche ogni 5 minuti, invece che mettere tutti quelli "or" nel primo if puoi più facilmente verificare se t.minute è multiplo di cinque

    in codice
    codice:
    if t.minute % 5 == 0:
        # fai qualcosa
    else:
        # non è ancora il momento

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    111
    ok ho capito grazie mille ciao

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    111
    ciao scusa se ti disturbo, una curiosità visto che operatore "%" non l'ho mai usato, se volessi ridurre i controlli per essere più preciso a 2 minuti dovrei fare così giusto?
    codice:
    if t.minute %2==0:
        # fai qualcosa
    else:
        # non è ancora il momento
    grazie ciao

  9. #9
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    si, ma sarebbe cosa giusta documentarsi quando non si conosce qualcosa che viene suggerito

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    111
    lo farò sicuramente... grazie ancora ciao buona domenica.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.