Fissa una o più liste di numeri e uno o più valori da cercare
LISTA1 = [1,8,0,1,1,9,2,8]
LISTA2 = ...
KEY1 = 9
KEY2 = ...
Il valore è presente o meno all’interno della lista?
Soluzione 1
La funzione restituisce risp
- Se k non è presente, risp=False
- Se k è presente, risp=True
def presente(lista, k):
n = len(lista)
risp = False
for i in range(n):
if(lista[i] == k):
risp = True
return risp
risposta = presente(LISTA1, KEY1)
def presente(lista, k):
n = len(lista)
i = 0
while(i < n):
if(lista[i] != k):
risp = True
i += 1
return risp
def presente(lista, k):
risp = False
for x in lista:
if(x == k):
risp = True
return risp
risposta = presente(LISTA1, KEY1)
Soluzione 2
Perché aspettare la fine del ciclo for per restituire la risposta affermativa?
def presente(lista, k):
n = len(lista)
risp = False
for i in range(n):
if(lista[i] == k):
risp = True
break
return risp
def presente(lista, k):
n = len(lista)
risp = False
i = 0
while(i < n):
if(lista[i] != k):
risp = True
break
i += 1
return risp
def presente(lista, k):
risp = False
for x in lista:
if(x == k):
risp = True
break
return False
L’istruzione break nelle iterazioni
- è una scorciatoia (?)
- semplifica il lavoro del programmatore (?)
- peggiora la leggibilità del codice!
Soluzione 3
Soluzione alternativa
def presente(lista, k):
n = len(lista)
for i in range(n):
if(lista[i] == k):
return True
return False
def presente(lista, k):
n = len(lista)
i = 0
while(i < n):
if(lista[i] != k):
return True
i += 1
return False
def presente(lista, k):
for x in lista:
if(x == k):
return True
return False
L’istruzione return nelle iterazioni
- è una scorciatoia (?)
- semplifica il lavoro del programmatore (?)
- peggiora la leggibilità del codice!
Soluzione 4
Non utilizzo break e/o return.
L’istruzione while si interrompe in modo naturale.
def presente(lista, k):
n = len(lista)
risp = False
i = 0
while(i < n) and (risp == False):
if(lista[i] != k):
risp = True
i += 1
return risp
Senza la variabile risp
def presente(lista, k):
n = len(lista)
i = 0
while(i < n) and (lista[i] != k):
i += 1
return (i < n) # (i != n)
Il risultato dipende dal valore di i dopo l’uscita dal while.
Se decido di non utilizzare le istruzioni break e return devo comunque imparare a scrivere espressioni logiche più complesse.