Dubbio else in CC

twgever (15190 points)
7 27 105
asked Nov 7, 2020 in Programmare in Python by twgever (15,190 points)
recategorized Nov 8, 2020 by andrea.sterbini

Salve a tutti, ho appena consegnato l'HW4, e mi è stata assegnata una CC di 8, che sono riuscito a diminuire a 7 spostando un else messo così:

for qualcosa in possibilità

    se succede un evento

        break

else: blabla

a così:

for qualcosa in possibilità:

    se succede qualcosa 

        break

    else: blabla

il programma mi fa le stesse cose, ma la CC mi è diminuita di 1, per questa funzione.

inoltre, contando la CC a mano, attenendomi alla tabella seguente:

esce fuori che la CC dovrebbe essere 6, cosa potrebbe contarmi? allego la struttura.

while

    while

        if

    for

        if        or

        else

ho provato a togliere l'else finale, a cambiare l'or in un if ecc, ma sempre 7 rimane. idee?

2 Answers

Best answer
Romitoskj (8920 points)
4 8 40
answered Nov 7, 2020 by Romitoskj (8,920 points)
selected Nov 7, 2020 by twgever
Il valore minimo di complessità ciclomatica di una funzione è uno, poi viene incrementato dai costrutti indicati. Questo perché un "ciclo" d'esecuzione lo fa anche se non ci sono costrutti che diramano l'algoritmo.

Quindi 1 +2 (2xWhile) +2 (2xIf) + 1 (for) + 1 (or) = 7
twgever (15190 points)
7 27 105
commented Nov 7, 2020 by twgever (15,190 points)

AH QUINDI ECCO DA DOVE VIENE, grazie laugh

C
ChristianSt (1790 points)
3 9 25
answered Nov 7, 2020 by ChristianSt (1,790 points)
while = 1

while = 1

if       = 1

for    = 1

if       = 1

or      = 1

else   = 1

Totale = 7

Spezzetta ulteriormente mettendo per esempio:

while:

       call_function()
O
Oakandrew (6400 points)
4 26 63
commented Nov 7, 2020 by Oakandrew (6,400 points)
Sopra:

Else = 0
C
ChristianSt (1790 points)
3 9 25
commented Nov 7, 2020 by ChristianSt (1,790 points)
hai qualche altra operazione booleana? and or? o anche un not
Romitoskj (8920 points)
4 8 40
commented Nov 7, 2020 by Romitoskj (8,920 points)
Il not vale 0
twgever (15190 points)
7 27 105
commented Nov 7, 2020 by twgever (15,190 points)
nope, ho solo quell'or dentro concatenato all'if, che posso traformare tranquillamente in un altro if allo stesso livello d'indentatura del prima, ma non mi cambierebbe niente