Python/Selezione

Wikibooks, manuali e libri di testo liberi.


Python ha solo un'istruzione per implementare la selezione:

if <condizione>:
    <istruzioni>
[elif <condizione>:
     <istruzioni>]*
[else:
     <istruzioni>

Implementazione[modifica]

Il costrutto fondamentale prevede una condizione da valutare e una serie di istruzioni da eseguire se essa risulta vera e un'altra serie di istruzioni da eseguire se invece risulta falsa. Ad esempio:

if eta>=18:
    print('sei maggiorenne')
else:
    print('sei minorenne')

È possibile l'uso del blocco elif (else if) che permette di valutare una seconda condizione nel caso quella iniziale risulti essere non vera. Ad esempio, possiamo aggiungere un ulteriore controllo nell'esempio precedente:

if eta>=18:
    print('sei maggiorenne')
elif eta<0:
    print('età non valida!')
else:
    print('sei minorenne')

Il numero di condizioni elif inseribili in un blocco for non è soggetto a limitazioni..

Esempi di uso[modifica]

Alcuni esempi possono chiarire i casi di uso più comuni.

Taglio di un valore all'interno di un intervallo[modifica]

def taglia(valore, minimo, massimo):
    """Restituisce valore se è compreso tra minimo e massimo
       se è minore di minimo restituisce minimo altrimenti massimo."""
    if valore<minimo:
        return minimo
    elif valore>massimo:
        return massimo
    else:
        return valore

n=int(raw_input('Scrivi un numero: '))
print('Il tuo numero tagliato tra 10 e 20 è: %s' % taglia(n, 10, 20))

Interprete di operazioni[modifica]

Programmino che interpreta una stringa contenente un'operazione da eseguire scritta in lettere, sia in forma prefissa sia in forma infissa.

def somma(a, b):
    return float(a)+float(b)

def sottrai(a, b):
    return float(a)-float(b)

def moltiplica(a, b):
    return float(a)*float(b)

def dividi(a, b):
    return float(a)/float(b)

def eseguioperazione(stringa):
    """Cerca di eseguire l'operazione contenuta in stringa."""
    s0, s1, s2 = stringa.split(' ')
    if s0=='somma':
        return somma(s1, s2)
    elif s0=='sottrai':
        return sottrai(s1, s2)
    elif s0=='moltiplica':
        return moltiplica(s1, s2)
    elif s0=='dividi':
        return dividi(s1, s2)
    elif s1=='piu':
        return somma(s0, s2)
    elif s1=='meno':
        return sottrai(s0, s2)
    elif s1=='per':
        return moltiplica(s0, s2)
    elif s1=='diviso':
        return dividi(s0, s2)
    else:
        return 'non so eseguire questa operazione'

operazione='somma 3 67'
print operazione, '==>', eseguioperazione(operazione)
operazione='dividi 45 9'
print operazione, '==>', eseguioperazione(operazione)
operazione='45 diviso 9'
print operazione, '==>', eseguioperazione(operazione)
operazione='3 per 8'
print operazione, '==>', eseguioperazione(operazione)
operazione='accalappia 3 8'
print operazione, '==>', eseguioperazione(operazione)


Altro interprete di operazioni[modifica]

Programmino che interpreta una stringa contenente un'operazione da eseguire scritta in lettere, sia in forma prefissa sia in forma infissa. Questa versione usa i dizionari che possono contenere, come valori, anche funzioni. Il risultato è più compatto, più flessibile, più efficiente, più... pythonico.

def somma(a, b):
    return float(a)+float(b)

def sottrai(a, b):
    return float(a)-float(b)

def moltiplica(a, b):
    return float(a)*float(b)

def dividi(a, b):
    return float(a)/float(b)

operazioni={'somma': somma, 'sottrai': sottrai,
            'moltiplica': moltiplica, 'dividi': dividi,
            'piu': somma, 'meno': sottrai,
            'per': moltiplica, 'diviso': dividi}

def eseguioperazione(stringa):
    s0, s1, s2 = stringa.split(' ')
    nomeoperazioni=operazioni.keys()
    if s0 in nomeoperazioni:
        return operazioni[s0](s1, s2)
    elif s1 in nomeoperazioni:
        return operazioni[s1](s0, s2)
    else:
        return 'non so eseguire questa operazione'
    
operazione='somma 3 67'
print operazione, '==>', eseguioperazione(operazione)
operazione='dividi 45 9'
print operazione, '==>', eseguioperazione(operazione)
operazione='45 diviso 9'
print operazione, '==>', eseguioperazione(operazione)
operazione='3 per 8'
print operazione, '==>', eseguioperazione(operazione)
operazione='accalappia 3 8'
print operazione, '==>', eseguioperazione(operazione)