Forum >> Principianti >> [Risolto] Esercizio su Cicli While e For

Pagina: 1

Salve a tutti,
sono un principiante (ma moooolto principiante) su Python, per imparare questo linguaggio mi sto basando momentaneamente sul libro in pdf "Python per tutti - Esplorare dati con Python 3" (di Charles R. Severance) e sono arrivato al Capitolo 5 sui Cicli.




Il mio problema nasce nell'Esercizio 1:


Scrivi un programma che legga ripetutamente i numeri fino a quando l’utente non digiti “finito”. Una volta che viene digitato “finito”, dovrà essere visualizzato il totale, il conteggio e la media dei numeri. Se l’utente dovesse digitare qualcosa di diverso da un numero, occorrerà rilevare l’errore usando try e except, visualizzare un messaggio di errore e passare al numero successivo.



Enter a number: 4

Enter a number: 5

Enter a number: bad data

Invalid input

Enter a number: 7

Enter a number: done

16 3 5.333333333333333




io ho compilato questa parte di programma per l'inserimento dei numeri:

while True:
number = input('Enter a number:')
mylist = []
try:
if number == float(number):
continue
except:
if number == str(number) != 'done': print('Invalid data')

if number == 'done':
break
siccome vorrei proseguire con il seguente listato:count = 0
for itervar in [3, 41, 12, 9, 74, 15]:
count = count + 1

total = 0
for itervar in [3, 41, 12, 9, 74, 15]:
total = total + itervar

print(count, total, total/count)come posso aggiungere sistematicamente i valori che inserisco in mylist = [] e sostituirli in [3, 41, 12, 9, 74, 15]?Ringrazio anticipatamente per il vostro splendido aiuto



--- Ultima modifica di kant80 in data 2022-02-13 18:25:06 ---
Ciao caro, benvenuto. :birrame:

Prima di risponderti sul tuo quesito, cominciamo col primo insegnamento.

In Python la sintassi non è opzionale, ma è parte integrante del linguaggio. Quindi sistema il tuo codice con la corretta indentazione (c'è il tasto code, prima della tavolozza dei colori). Se ti viene meglio puoi usare anche risorse come Pastebin ed affini, posta poi il link per farcelo analizzare.

A quel punto possiamo passare alle tue domande.

Cya
Ciao Daniele,
intanto ti ringrazio per la risposta e perdonami per il casino che ho combinato, ecco il codice "sistemato" (sperando nel modo giusto):




while True:
    number = input('Enter a number:')
    mylist = []
    try:
        if number == float(number):
            continue
    except:
        if number == str(number) != 'done': print('Invalid data')

        if number == 'done':
            break

count = 0
for itervar in mylist:
    count = count + 1

total = 0
for itervar in mylist:
    total = total + itervar

print(count, total, total/count)


Sicuramente ci saranno parecchi (se non troppi) errori, ma a me manca come memorizzare i valori che inserisco in 'mylist' per poi conteggiarli e sommarli.

Perdonatemi ancora per il mio errore da principiante e soprattutto perché continuerò ancora a farne, e vi pregherei di aiutarmi a migliorare.

Un abbraccio ed un ringraziamento a tutti, a presto (spero)
P.S.: per non sbagliare ho caricato anche il file.py :)







Allegati
intanto ti ringrazio per la risposta e perdonami per il casino che ho combinato, ecco il codice "sistemato" (sperando nel modo giusto):
Figurati, è un piacere.

Allora ci sono varie cose da sistemare (analizzo solo il tuo codice non come lo scriverei io):

A. mylist = [] ti viene azzerata ad ogni passaggio, mettila prima del while.

B. Accorpa un po', puoi ridurre i passaggi. Ad esempio:
mylist = [] 
while True:
    val = input("Inserisci un numero: ")
    try:
        int(val)
        mylist.append(int(val))
    except ValueError:
        try:
            float(val)
            mylist.append(float(val))
        except ValueError:
            print("Non hai inserito un numero valido")

C. Come hai visto non usare try... except in quel modo, ma in questo caso con un ValueError;

D. Sto all'incirca seguendo il tuo script, ma non l'avrei fatto così prolisso, ci sono modi per semplificarlo (non voglio spaventarti);

E. Per vedere il numero di record presenti nella tua lista, una len(mylist);

F. Cosa hai contro sum() per sommare i valori della lista?

Puoi mettere a posto il tuo script ora.

Cya

P.S. Non caricare file sul server, nel 2022 non serve farlo, esistono sistemi come quello che ti ho citato prima (Pastebin), che sono molto più comodi.

Ciao Daniele,
quando sono tornato a casa ho subito sistemato il codice seguendo i tuoi suggerimenti ed alla fine ho scritto questo:




mylist = []
while True:
    val = input("Inserisci un numero: ")
    try:
        int(val)
        mylist.append(int(val))
    except ValueError:
        try:
            float(val)
            mylist.append(float(val))
        except ValueError:
            if val == str(val) != 'fatto': print('Non hai inserito un numero valido')
            if val == 'fatto':
                break
                print('Fatto')

print(len(mylist), sum(mylist), sum(mylist)/len(mylist))





Il risultato è quello che desideravo, grazie mille (conoscevo la funzione sum() e mi ero scordato l'esistenza di len()); vorrei chiederti solo un'ultima cosa, hai accennato al fatto che tu lo avresti scritto in modo più sintetico, come?

Faccio questa domanda perché sono un principiante (mooooolto principiante ed autodidatta, come ti ho scritto sto seguendo quella guida di cui al primo post) quindi con le tue dritte sulle correzioni apportate al mio script e con i tuoi suggerimenti per scrivere in modo più stringato spero di imparare velocemente.

Grazie mille di tutto, scusa il disturbo e soprattutto buon fine settimana.
Il risultato è quello che desideravo, grazie mille (conoscevo la funzione sum() e mi ero scordato l'esistenza di len()); vorrei chiederti solo un'ultima cosa, hai accennato al fatto che tu lo avresti scritto in modo più sintetico, come?
Ciao caro, ascolta un fesso e fidati di me, ora non vuoi saperlo. ;)

Ti dico solo che si tratta in sostanza di usare costrutti che accorpano in una sola riga le varie istruzioni. Meglio che non precorriamo i tempi, devi prima arrivarci a studiare cose come le list comprehensions e funzioni anonime (lambda) ad esempio.




Grazie mille di tutto, scusa il disturbo e soprattutto buon fine settimana.
Nessun disturbo, questa risorsa è qui per questo.

Cya e buono studio.
Ok, allora mi tocca aspettare di imparare e di dovervi ancora disturbare. :) :)
A presto e buona domenica, ma soprattutto grazie di tutto :fingers-crossed: :fingers-crossed:


Pagina: 1



Esegui il login per scrivere una risposta.