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

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

Verificare una condizione ad ogni cambiamento

P
Powner (5600 points)
36 68 85
in Programmare in Python by (5.6k points)
closed by

Qual è il metodo migliore per controllare se una condizione è ancora vera dopo ogni cambiamento? Vorrei evitare di mettere un if ogni volta, e il while non lo reputo adatto perché si tratta di una serie di istruzioni differenti (per esempio due funzioni diverse) che devono essere eseguite di seguito.

Per esempio, ho 3 funzioni da eseguire:

La condizione è verificata? Sì----> esegue funzione1()
La condizione è ancora verificata? Sì----> esegue funzione2()
La condizione continua ad essere vera? No ---- > procede con il resto del codice

Ovviamente la domanda dà per scontato che una soluzione ci sia perché con una serie di if funzionerebbe, ma sottende che possano non essercene di migliori.

908 views
closed with the note: Trovata una soluzione migliore alla serie di if

4 Answers

Best answer
Gianluigi (1420 points)
10 17 30
by (1.4k points)
selected by

Ciao,

penso che potresti raccogliere tutte le funzioni in una lista, e iterare sulle funzioni presenti nella lista con un for in cui metti la tua condizione.
Forse sto dicendo una boiata, ma visto che la condizione e' sempre la stessa sara' probabilmente un confronto con qualche elemento che viene modificato dalle funzioni. Sulla base di questa ipotesi ho fatto un test molto banale (forse troppo, ma non so cosa fanno le tue funzioni) e da' il risultato voluto: esegue le funzioni finche' e' verificata la condizione.

lista_funzioni = [funzione1, funzione2, funzione3, funzione4, funzione5]

for funzione in lista_funzioni:

    if condizione:

        fai qualcosa
P
Powner (5600 points)
36 68 85
by (5.6k points)
Idea molto carina, non è la prima volta che la vedo ma in effetti non ci avevo proprio pensato, ottima risposta!
LeonardoEmili (35740 points)
14 65 155
by (35.7k points)

Buonasera,

se ho ben capito una volta che la condizione è verificata vuoi eseguire la f1. E solo poi se questa è ancora verificata esegui la f2 finché la stessa rimane verificata. In questo caso non ti servono tanti if, te ne basta 1 soltanto all'inizio della verifica (quindi prima della f1) e in seguito un while per eseguire la f2. Questo perché se ho ben capito vuoi eseguire la f2 finché tale condizione verrà rispettata. Per quanto riguarda f3, f4, ... banalmente seguono al di fuori del ciclo while.

Ti auguro una buona serata

Leonardo Emili

P
Powner (5600 points)
36 68 85
by (5.6k points)
Eh no: io ho una serie di funzioni da eseguire che lavorano sulla variabile della condizione.

Le funzioni magari sono 3 e ognuna deve essere verificata 1 sola volta se la condizione è vera.
restante.giuseppe (2480 points)
7 32 49
by (2.5k points)

Buonasera,

Quello che farebbe al caso tuo sarebbe lo switch case, ma in python non esiste, quello che ti conviene fare è usare degli if, almeno secondo me!

P
Powner (5600 points)
36 68 85
by (5.6k points)
Va bene, grazie comunque :(
andrea.sterbini (207940 points)
756 1270 2377
by (208k points)
If elif elif else?
P
Powner (5600 points)
36 68 85
by (5.6k points)
No perché le funzioni che devo eseguire non sono disgiunte, ovvero se la condizione rimane vera devo eseguirle tutte, una struttura if-elif-else sarebbe esclusiva.
B
Boscheri (1700 points)
2 7 12
by (1.7k points)
Se ho ben compreso il problema

Potresti provare a usare una struttura del tipo

If condizione0 :
    ---
Elif condizione1:
    ---
Elif condizione2:
    ---

Se poi volessi considerare dei casi che non verificano le condizioni potresti aggiungere in coda un Else.

Spero di essere stato sufficientemente esaustivo :-)
P
Powner (5600 points)
36 68 85
by (5.6k points)
Non è quello che cercavo, grazie comunque