Ciao @Andrea
In primo luogo, per i futuri post, evita il cross-posting, genera confusione : saluti nei saluti, problema una sola volta nella sezione giusta.
Per altro, inserisci il codice utilizzando il pulsante "pythoncode" nell'editor del post, sarà più chiaro e leggibile.
Stavo per risponderti direttamente, ma poi ho deciso di farTi un esempio basato sul Tuo codice per fornirTi materiale da vedere/pensare, intanto le domande :
domanda 1 : guardati i "tipi di variabile", anche se python non è un linguaggio fortemente tipizzato una stringa non è mai uguale ad un numero. Oltre questo, quando nel secondo ciclo hai definito "a" come stringa (s/n) essa rimarrà tale con il valore assunto dall'input, il secondo ciclo diventa sempre falso e non sarà più eseguito. Devi modificare le regole di avvio del secondo ciclo while
domanda 2 : il continue non serve a niente, nel caso in specie, per le esigenze in gioco la definizione di avvio del secondo ciclo è meglio avvenga all'esterno del ciclo, ti faccio esempio :
>>> def area_cerchio(r):
area = r**2 * 3.14
return "l'area del cerchio è di: {}".format(area)
>>> def main():
continua_calcolo = True
while continua_calcolo:
try:
r = float(input('Inserisci lunghezza raggio: '))
print(area_cerchio(r))
except ValueError:
print('Immissione errata')
a = ''
while a.lower() not in ['s', 'n']:
a = input('Fare un nuovo calcolo (s/n)? : ')
if a.lower() == 'n':
continua_calcolo = False
elif a.lower() != 's':
print('risposta non corretta!')
>>> main()
Inserisci lunghezza raggio: 1
l'area del cerchio è di: 3.14
Fare un nuovo calcolo (s/n)? : s
Inserisci lunghezza raggio: 2
l'area del cerchio è di: 12.56
Fare un nuovo calcolo (s/n)? : b
risposta non corretta!
Fare un nuovo calcolo (s/n)? : s
Inserisci lunghezza raggio: 3
l'area del cerchio è di: 28.26
Fare un nuovo calcolo (s/n)? : n
>>>
come vedi, per il secondo ciclo, definisco la variabile di controllo, immediatamente prima del suo avvio, in modo tale che NON ricada nella lista dei valori ammessi, condizione per cui il secondo ciclo si avvia o si interrompe.
Comprendi il perché delle piccole differenze, leggi la documentazione e cerca di capire perché ho utilizzato lower(), sarà utile esercizio.
Ciao
