Topic: Problema ciclo while  (Letto 106 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Andrea_Parigi

  • python unicellularis
  • *
  • Post: 2
  • Punti reputazione: 0
    • Mostra profilo
Problema ciclo while
« il: Dicembre 29, 2020, 23:28 »
Ciao a tutti!
Tra qualche mese comincero' una fomazione per diventare programmatore e in attesa sto cercando di imparare da solo le basi di questo linguaggio!
Per esempio oggi mi sono bloccato su  un ciclo, lo posto qui in attesa di qualcuno di buon cuore.

def cerchio(r):
    ac=pow(r, 2) * 3.14
    return 'l\'area del cerchio è di: {}'.format(ac)

continuare_calcolo = True

k=1
n=1
a=1

while continuare_calcolo:
    try:
        r=float(input("Scrivi la lunghezza del raggio: "))
        print(cerchio(r))
    except ValueError:
        print("Non puoi immettere una lettera")
        continue
   
    while k==a:                                                       
            a=input("vuoi fare un nuovo calcolo? s(si) oppure n(no): ")
            if a=="s":
                continue
            elif a!="s" and a!=n:
                print("La risposta non è corretta")
                continue
            elif a=="n":
                   continuare_calcolo = False

1-Vorrei sapere perchè nel secondo ciclo while se digito "s" mi torna al primo ciclo(cosa che voglio) ma quando ha finito il primo ciclo non torna piu al secondo ma ricomincia di nuovo al primo.

2-Nel secondo ciclo, come devo identare  il secondo "continue" per poter ricominciare il secondo ciclo?

Vi ringrazio e buona serata

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 330
  • Punti reputazione: 0
    • Mostra profilo
Re:Problema ciclo while
« Risposta #1 il: Dicembre 30, 2020, 08:38 »
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 :)

Offline Andrea_Parigi

  • python unicellularis
  • *
  • Post: 2
  • Punti reputazione: 0
    • Mostra profilo
Re:Problema ciclo while
« Risposta #2 il: Dicembre 30, 2020, 10:21 »
Ciao @nuzzopippo!
Hai ragione, era la prima volta che scrivevo in un forum e mi sono sbagliato di sezione  ma e quando mi sono accorto l'ho ripostato di nuovo... Sorry  :)
Ti ringrazio molto per la tua risposta!
Metto subito in moto i neuroni per modifcare il codice!
 ;) :ok: