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.

continuare le istruzioni di una funzione se e solo se risultano vere tutte le condizioni precedenti

s
stefan9 (400 points)
3 7 11
in Programmare in Python by (400 points)
In pratica: Definita una funzione, voglio che prima di continuare con le istruzioni, controlli che tutte le operazioni/istruzioni precedenti siano Vere e se lo sono tutte di continuare con le istruzioni successive.

Ho due liste di numeri. Gli elementi della seconda lista devono essere contenuti tutti nella seconda lista. E se risulta vera questa condizione allora prosegui con le istruzioni successive

Grazie
768 views
closed

5 Answers

Best answer
LeonardoEmili (35740 points)
14 65 155
by (35.7k points)
selected by

Ciao!

Allora per rispondere alla tua domanda sono diversi gli approcci che puoi scegliere di adottare!

Il primo, sconsigliato, che ti permette di eseguire una serie di istruzioni se e solo se tutte le condizioni precedenti risultano corrette è quello di scrivere degli if annidati, ovvero la classica cascata di if/elif/elif ... else. Questo metodo risulta sconsigliato perché complichi non poco la leggibilità del codice!

Altrimenti per verificare se più condizioni sono corrette puoi costruire un solo if e verificare che se e e solo se tutte le condizioni risultano corrette procedere con le istruzioni. Per fare ciò puoi aiutarti con l'operatore and tra le varie condizioni. Ciò ti permette di visualizzare molto meglio il problema e semplifichi anche il codice! Peraltro puoi mettere tra le condizioni da verificare anche gli output di funzioni!

Ti ho descritto le casistiche principali, ma nel tuo caso credo sia migliore procedere strutturando un ciclo iterativo con il  for in , se l'elemento è presente nella lista (if x in lista: ) procedere con le altre istruzioni!

Spero di aver chiarito totalmente i tuoi dubbi, se vuoi maggiori delucidazioni non esitare a chiedere!

Buon coding!

Leonardo Emili 

francesco.dev (33560 points)
23 51 129
by (33.6k points)
Quoto Leonardo!
s
stefan9 (400 points)
3 7 11
by (400 points)
Chiarito il dubbio ma non riesco a metterlo in pratica. Voglio esattamente fare con l'operatore 'and' però non so come metterlo nell ciclo 'if'

lst=['pomodoro']
lsc1=['po','mo','ro']
lsc2=['po','zu',pa']
lsc3=['zu','pp','a']

1 def fanfuc(lst,lsc1):
2 ...:    for i in range(len(lsc1)):
3 ...:        if lsc1[i] in lst:    <------------------- io vorrei che prima di continuare con le istruzioni successive tutte le stringhe in lsc siano vere
4 ...:            #continuo della funzione#

Continuando a usare gli operatore booleani, e magari si può fare nello stesso ciclo if. il controllo in lsc1 tutte le stringhe di controllo devono essere  nella stringa nella lista principare ('pomodoro'), in lsc2 il controllo deve dare vero se almeno una stringa è contenuta sempre nella parola, e nell'ultima lista lsc3, deve tornare vero se nessuna stringa nella lista è contenuta nella parola. Io tutti questi controlli volendo li posso dare in un solo ciclo if ? o devo fare piu cicli ?  se si può fare non sono dove inserirli questi controlli.

Spero di essermi spiegato. A livello di logica ho capito che si può fare, ma non riesco a farlo

Grazie mille per l'aiuto

Stefano
andrea.sterbini (208020 points)
756 1270 2377
by (208k points)
Se vuoi fare qualcosa solo se sono tutte vere una serie di condizioni devi usare l'operatore and.
Può aiutare usare una variabile che contiene inizialmente il valore True e che aggiornerai mano a mano che verifichi se tutte le condizioni sono vere.

Altrimenti puoi controllare tutte le condizioni ed uscire dal ciclo con una istruzione break se una delle condizioni è falsa. In questo caso puoi sfruttare la clausola else dei cicli, che viene eseguita solo se il ciclo è finito naturalmente senza break, e quindi se tutte le condizioni erano vere
Stefaniscion (1370 points)
6 15 32
by (1.4k points)

Il metodo più veloce e sensato è quello di utilizzare l'operatore "and", quindi

if condizione1 and condizione2
    blocco della condizione

split (8700 points)
21 59 79
by (8.7k points)
dai tuoi commenti sotto la risposta di leonardo emili ho capito cosa intendi, non lo risolvi con and, a meno di non sapere tutti gli elementi della lista prima e elencarli con mille and in mezzo

per quello che vuoi fare tu potresti mettere le liste in due variabili di tipo "set" con la funzione set, quindi costruire due insiemi, e poi per vedere se tutti gli elementi di uno sono nell'altro puoi confrontarli con if insieme_A<=insieme_B: blablabla

<= guarda che tutti gli elementi di A siano in B, poi si prosegue solo se vero
P
Pic1 (1030 points)
9 24 31
by (1.0k points)
Ciao!!

Ci sei molto vicino, secondo me.

Senza modificare molto quanto hai già scritto,

1) dichiari una variabile (chiamiamola x) prima del for e la setti su TRUE

2) aggiungi un else dopo l’if, per cui se lsc[i] non è in lst, x lo setti su False

3) a quel punto, fuori dal ciclo aggiungi un if che controlli se x è vero, e dentro gli metti tutte le istruzioni che vuoi

Spero di essere stato chiaro

Ferdinando