If else innestato in un ciclo for

di il
7 risposte

If else innestato in un ciclo for

Ciao a tutti, qualcuno mi può spiegare perchè quando entro nel else evidenziato il for finisce ( non ritorna ad eseguire i comandi sotto l'if per intenderci ) . in giro ho letto di usare continue ma non lo uso correttamente perchè non migliora la situa :(

``` python

R_min = 37
R_max = 42.5
for i in range(0,len(resultantList)-2,3):
   if resultantList[i][0] != resultantList[i+1][0] and resultantList[i+2][0] != resultantList[i+1][0]:
       if (resultantList[i+1][1] < resultantList[i][1]) and (resultantList[i+1][1] < resultantList[i+2][1]):
           m = (resultantList[i+1][1]-resultantList[i][1])/(resultantList[i+1][0]-resultantList[i][0])
           m_ = (resultantList[i+2][1]-resultantList[i+1][1])/(resultantList[i+2][0]-resultantList[i+1][0])
           g = math.atan(abs((m-m_)/(1+m*m_)))
           g_grad = g*180/math.pi 
           print(g_grad)
           if (g_grad > R_min) and (g_grad < R_max):
               cv.line(img,resultantList[i],resultantList[i+1],(0,255,0),5)
               cv.line(img,resultantList[i+1],resultantList[i+2],(0,255,0),5)  
           else:
               cv.line(img,resultantList[i],resultantList[i+1],(255,0,0),5)
               cv.line(img,resultantList[i+1],resultantList[i+2],(255,0,0),5)
   else:
       g = math.atan((resultantList[i+2][1]-resultantList[i+1][1])/(resultantList[i+2][0]-resultantList[i+1][0]))
       g_grad = g*180/math.pi 
       print(g_grad)
       if (g_grad > R_min) and (g_grad < R_max):
           cv.line(img,resultantList[i],resultantList[i+1],(0,255,0),5)
           cv.line(img,resultantList[i+1],resultantList[i+2],(0,255,0),5)  
       else:
           cv.line(img,resultantList[i],resultantList[i+1],(255,0,0),5)
           cv.line(img,resultantList[i+1],resultantList[i+2],(255,0,0),5)

plt.imshow(img, cmap = 'gray',vmin = 0,vmax = 255)
plt.show()

```

7 Risposte

  • Re: If else innestato in un ciclo for

    Usa la formattazione del codice quando lo posti sul forum

  • Re: If else innestato in un ciclo for

    Eh si è che non so come formattarlo se mi dite lo modifico subito :) 

    aggiungo queste info perchè mi sembra che la domanda non sia chiara

    Questa è la mia resultantList

    [[1, 491], [21, 426], [52, 503], [74, 508], [114, 425], [144, 507], [160, 513], [201, 425], [233, 502], [248, 510], [292, 424], [331, 533], [400, 528], [400, 435], [451, 473], [492, 433], [493, 509], [571, 527], [605, 422], [641, 504], [663, 501], [698, 421], [727, 500], [748, 509], [786, 420], [832, 506], [850, 496], [880, 421], [916, 526], [988, 525], [988, 432], [1038, 470], [1080, 430], [1081, 501], [1159, 522], [1194, 417], [1232, 501], [1250, 497], [1270, 451]]

    facendo io i calcoli a mano i valori che dovrei ottenere sono: 39,03/45,82/47,54/46,78/36,69/46,45/41,64/43,77/51,25/40,73/37,23/45,93/42,77

    calcola bene ma a schermo vedo solo i primi 5:

    39.03231671922772

    45.825936793436014

    47.54824868409066

    46.78266869187767

    36.68972283247581

    al primo valore calcolato secondo l'else (36,69) si ferma :( 

  • Re: If else innestato in un ciclo for

    Usa il tasto con i <> nell'editor …

    Come farlo lo dovresti aver letto nel Regolamento …

  • Re: If else innestato in un ciclo for

    Il problema succede perché, dopo il primo valore ELSE, diventa sempre vera la prima IF e falsa la seconda IF

    Controlla perché

    FOR
    VERA 1 IF
    VERA 2 IF
    39.03231671922772
    FOR
    VERA 1 IF
    VERA 2 IF
    45.825936793436014
    FOR
    VERA 1 IF
    VERA 2 IF
    47.54824868409066
    FOR
    VERA 1 IF
    VERA 2 IF
    46.78266869187767
    FOR
    VERA ELSE
    36.68972283247581
    FOR
    VERA 1 IF
    FOR
    VERA 1 IF
    FOR
    VERA 1 IF
    FOR
    VERA 1 IF
    FOR
    VERA 1 IF
    FOR
    VERA 1 IF
    FOR
    VERA 1 IF
    FOR
    VERA 1 IF

  • Re: If else innestato in un ciclo for

    Ok infatti se rimuovo il secondo if calcola tutti i 13 valori il problema è che quella è una condizione che deve essere verificata affinche calcoli i valori giusti e guardando i valori so che lo è, non capisco dunque come mai :(

    Quella condizione serve per dire se c'è un angolo ‘sotto’ due rette allora calcolalo (non riesco ad allegare l'immagine che lo renderebbe più chiaro), c'è un altro modo per dirlo al pc?

  • Re: If else innestato in un ciclo for

    Non ho capito il perché del secondo if.

    E se senza la seconda if i risultati sono corretti ccapisco ancora meno….

  • Re: If else innestato in un ciclo for

    https://imgur.com/a/D8eML3x

    da questa immagine ti dovrebbe essere chiaro. il secondo if (quello che da problemi cosi che ci intendiamo) serve per dire se trovi dei punti i cui segmenti che li congiungono formano un angolo diciamo verso il basso (nell'immagine evidenziato cosa intendo per angolo verso il basso) calcola angolo. Altrimenti non calcolare l'angolo

    Se non metto questa condizione mi calcola altri angoli tra i segmenti sbagliando. Calcola 13 valori come dovrebbero essere ma i valori non sono corretti. spero di essermi spiegato

Devi accedere o registrarti per scrivere nel forum
7 risposte