Presente?

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.