Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Dubbio else in CC

twgever (17470 points)
8 29 105
in Programmare in Python by (17.5k points)
recategorized by

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?

325 views
closed

2 Answers

Best answer
Romitoskj (8920 points)
5 8 40
by (8.9k points)
selected by
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 (17470 points)
8 29 105
by (17.5k points)

AH QUINDI ECCO DA DOVE VIENE, grazie laugh

C
ChristianSt (1790 points)
3 9 25
by (1.8k 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)
7 27 64
by (6.4k points)
Sopra:

Else = 0
C
ChristianSt (1790 points)
3 9 25
by (1.8k points)
hai qualche altra operazione booleana? and or? o anche un not
Romitoskj (8920 points)
5 8 40
by (8.9k points)
Il not vale 0
twgever (17470 points)
8 29 105
by (17.5k 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