Esercitazione su stringhe di caratteri, cicli, etc.


Espansione di stringhe

Scrivere una funzione espandi che, data una stringa di caratteri s e un intero k, stampa la stringa s in modo che tra ciascuna coppia di caratteri vengano stampati k spazi, più un ";" al termine. Ad esempio, la chiamata
espandi("Esame", 2) dovrebbe produrre la stampa

E  s  a  m  e;
mentre la chiamata espandi("Esame", 3) dovrebbe produrre la stampa
E   s   a   m   e;

Rendere opzionale il secondo parametro, che per default dovrà valere 1. Quindi la chiamata espandi("Esame", 2), in modo che sia possibile chiamare espandi("Esame") ottenendo lo stesso effetto di espandi("Esame", 1)

Un esempio di soluzione è in espandi.py


Stampa di stringhe

Scrivere una funzione che, date due stringhe della stessa lunghezza, le stampa in verticale una affianco all'altra separate da due spazi. Se la funzione viene chiamata con argomenti "pippo" e "pluto" deve essere prodotta la stampa

p  p
i  l
p  u
p  t
o  o

Modificare la funzione precedente in modo che si comporti correttamente anche in presenza di stringhe di lunghezza diversa. Se la funzione viene chiamata con argomenti "topolino" e "pippo" deve essere prodotta la stampa

t  p
o  i
p  p
o  p
l  o
i
n
o
Mentre se la funzione viene chiamata con argomenti "pippo" e "topolino" deve essere prodotta la stampa
p  t
i  o
p  p
p  o
o  l
   i
   n
   o

Un esempio di soluzione è in stampaVerticale.py

Una soluzione più elegante è in stampaVerticaleMigliorato.py


Fattoriale

Scrivere una funzione che restituisce il fattoriale di un numero naturale. Se la funzione viene chiamata con un argomento negativo deve essere sollevata una eccezione. Lo stesso dovrebbe accadere se l'argomento non è intero. Una eccezione è una anomalia durante l'esecuzione che, nel caso più semplice, blocca l'esecuzione di un programma, mostrando a video il tipo di errore. Ad esempio, si può includere nella funzione una istruzione del tipo

if CONDIZIONE:
    raise ValueError
Verificare il buon funzionamento della funzione realizzata eseguendo il seguente programma di prova:
print(fattoriale(5))    # deve stampare 120
print(fattoriale(1))    # deve stampare 1
print(fattoriale(20))   # deve stampare 2432902008176640000
print(fattoriale(0))    # deve stampare 1
print(fattoriale(-5))   # deve mostrare un errore di tipo ValueError
print(fattoriale(4.56)) # anche questo deve mostrare un errore di tipo ValueError


Approssimazione del fattoriale

Stampare, per valori di n che vanno da 10 a 30, la differenza tra il valore di n! e l'approssimazione di Stirling del fattoriale. Il valore di pi greco è disponibile come math.pi, e il valore della costante e è disponibile come math.e. È preferibile stampare tutti i valori come float.
Mostrare che all'aumentare di n il rapporto tra n! e l'approssimazione di Stirling si avvicina a 1.

Mostrare l'andamento del rapporto per valori di n che vanno da 10 a 50, con passo 5 (quindi per i valori 10, 15, 20, 25, ..., 50).

Un esempio di soluzione è in fattorialeStirling.py