Forum
>>
Principianti
>>
For In
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da mhmbox |
2016-03-11 11:57:40 - For In
|
Salve a tutti non riesco a capire questo passaggio, ovvero l'utilizzo di if e in if. accade che la condizione è vera anche se ret = "" preso dal seguente codice:
8)]def enum(**enums): 8)]return type('Enum', (), enums)Status = enum(ERR=['ERROR', 'Fail'], OK=['OK', 'ready', 'no change', 'SEND OK'], BUSY='busy', LINK='Link')....while ser.inWaiting(): ret = ser.readline().strip("\r\n") print str(ret) if (ret in Status.LINK): has_link = True ipd_str = '+IPD,' if ipd_str in ret: cid = ret[ret.find(ipd_str) + len(ipd_str)8)] 8)]if8)] has_link: send_response(response, cid) Qualcuno ha idea del perchè? e di come funzioa il if-in?Grazie --- Ultima modifica di mhmbox in data 2016-03-11 11:58:10 --- --- Ultima modifica di mhmbox in data 2016-03-14 08:43:15 --- |
|
Scritto da Daniele aka Palmux |
2016-03-11 16:12:28 - Re: For In
|
Ciao a te e benvenuto.
NOTA: ricorda che per postare codice devi usare il bottone code, quello con questa icona , che trovi proprio subito prima della tavolozza dei colori quando compili un nuovo messaggio. L'indentazione è una parte fondamentale del linguaggio, non può essere omessa. Facciamo un esempio per capire l'in in un ciclo if, che è davvero molto semplice. Infatti in verifica se il valore è presente nell'oggetto che cerco di confrontare: >>> una_lista_a_caso = [1,2,3,6,7,8,9,10,18,88,99,1001,15215,1361568,161515658] >>> una_lista_di_controllo = [4,9,1361568,456987741] >>> [n for n in una_lista_di_controllo if n in una_lista_a_caso] [9, 1361568]Quindi leggiamo insieme la terza riga. Chiediamo a Python di restituirci per tutti i valori di n presenti in una_lista_di_controllo solo se questi sono presenti in una_lista_a_caso. Come vedi tutto estremamente semplice, ora non ti resta che applicarlo alle tue esigenze, non sapendo a priori che succede di preciso nel tuo script. Cya |
|
Scritto da mhmbox |
2016-03-14 09:03:14 - Re: For In
|
def enum(**enums): return type('Enum', (), enums)Status = enum(ERR=['ERROR', 'Fail'], OK=['OK', 'ready', 'no change','SEND OK'], BUSY='busy', LINK='Link') ... def process_request(response): has_link = False cid = '0' while( ser.inWaiting() ): ret = ser.readline().strip( "\r\n" ) # print ret if (ret in Status.LINK): has_link = True ipd_str = '+IPD,' if (ipd_str in ret): cid = ret[ret.find(ipd_str) + len(ipd_str)] if has_link: # process response send_response(response, cid) Ok grazie per la dritta credo di esserci finalmente riuscito.
Spiegazione chiarissima ed è anche intuitiva la risposta ma non capisco perchè la condizione risulta vera anche per ret="" in if (ret in Status.LINK): Il codice proviene da un progetto github per il famoso ESP8266 --- Ultima modifica di mhmbox in data 2016-03-14 09:44:57 --- --- Ultima modifica di mhmbox in data 2016-03-14 09:56:26 --- |
Pagina: 1
Esegui il login per scrivere una risposta.