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;

Aggiungere alla funzione precedente un parametro opzionale, che per default vale False, che indica se la stampa deve essere eseguita usando solo lettere maiuscole. Quindi la chiamata espandi("Esame", 2), così come la chiamata espandi("Esame", 2, False), continua a produrre l'effetto mostrato in precedenza, mentre la chiamata espandi("Esame", 2, True) dovrebbe produrre la stampa

E  S  A  M  E;


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


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 stresso 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).