[Python] Classe inattesa.
Ciao. Sono recentemente passato a Python 3.8.1 Ho un comportamento che non mi spiego. Assegno un valore numerico ad una variabile tramite una piccola funzione che si assicura che l'utente inserisca numeri e non lettere: def Numero(s): while True: try: n = int(input(s)) break except: print("Sono accettati esclusivamente valori numerici!") return (n) i1 = Numero("Da: ") Bene, fin qui dovrebbe essere elemntare. Poi ho bisogno di sottrare una unità ad i1: i1 -= 1 E ricevo un errore. L'interprete mi informa che l'operatore -= non può essere usato sulla classe None ma solo sugli interi. Ho inserito un print(type(i1)) prima dell'errore ed in effetti appartiene alla classe None. Ma com'è possibile? Gabry. -- Gabriele Battaglia, IZ4APU (Libero) Sent from TB on Windows 10, Genus Bononiae's computer. ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Classe inattesa.
Ciao Gabriele, mi sembra che tu abbia indentato troppo il return! def Numero(s): while True: try: n = int(input(s)) break except: print("Sono accettati esclusivamente valori numerici!") return (n) Per come ha scritto Numero, quando esci da while non esegue return Ciao Roberto Il 31/01/20 14:40, Gabriele Battaglia ha scritto: > Ciao. > Sono recentemente passato a Python 3.8.1 > Ho un comportamento che non mi spiego. > Assegno un valore numerico ad una variabile tramite una piccola > funzione che si assicura che l'utente inserisca numeri e non lettere: > > def Numero(s): > while True: > try: > n = int(input(s)) > break > except: > print("Sono accettati esclusivamente valori numerici!") > return (n) > > i1 = Numero("Da: ") > > Bene, fin qui dovrebbe essere elemntare. Poi ho bisogno di sottrare > una unità ad i1: > > i1 -= 1 > > E ricevo un errore. L'interprete mi informa che l'operatore -= non può > essere usato sulla classe None ma solo sugli interi. > Ho inserito un print(type(i1)) prima dell'errore ed in effetti > appartiene alla classe None. > Ma com'è possibile? > > Gabry. signature.asc Description: OpenPGP digital signature ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Classe inattesa.
A occhio il return mi sembra che sia dentro al ciclo while, in questo caso il break conclude il ciclo e poi manca il return e la funzione quindi ritorna True. Se invece l’inserimento fallisce, viene eseguita la print, ma n è fallita e anche qui il return n dovrebbe causare un errore. Io la funzione la scriverei più compatta come segue. def Numero(s): While True: try: return int(input(s)) except Exception as e: print(“error: ”+str(e)) Mi pare si legga meglio e sia meno soggetta ad errori > Il giorno 31 gen 2020, alle ore 14:41, Gabriele Battaglia > ha scritto: > > Ciao. > Sono recentemente passato a Python 3.8.1 > Ho un comportamento che non mi spiego. > Assegno un valore numerico ad una variabile tramite una piccola funzione che > si assicura che l'utente inserisca numeri e non lettere: > > def Numero(s): >while True: >try: >n = int(input(s)) >break >except: >print("Sono accettati esclusivamente valori numerici!") >return (n) > > i1 = Numero("Da: ") > > Bene, fin qui dovrebbe essere elemntare. Poi ho bisogno di sottrare una unità > ad i1: > > i1 -= 1 > > E ricevo un errore. L'interprete mi informa che l'operatore -= non può essere > usato sulla classe None ma solo sugli interi. > Ho inserito un print(type(i1)) prima dell'errore ed in effetti appartiene > alla classe None. > Ma com'è possibile? > > Gabry. > -- > Gabriele Battaglia, IZ4APU (Libero) > Sent from TB on Windows 10, Genus Bononiae's computer. > ___ > Python mailing list > Python@lists.python.it > https://lists.python.it/mailman/listinfo/python ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Classe inattesa.
Errata corrige: “ritorna None” al posto di “ritorna True” > Il giorno 31 gen 2020, alle ore 14:51, Giovanni Vittorio Spina > ha scritto: > > A occhio il return mi sembra che sia dentro al ciclo while, in questo caso > il break conclude il ciclo e poi manca il return e la funzione quindi ritorna > True. > Se invece l’inserimento fallisce, viene eseguita la print, ma n è fallita e > anche qui il return n dovrebbe causare un errore. > Io la funzione la scriverei più compatta come segue. > > def Numero(s): > While True: > try: return int(input(s)) > except Exception as e: print(“error: ”+str(e)) > > > Mi pare si legga meglio e sia meno soggetta ad errori > >> Il giorno 31 gen 2020, alle ore 14:41, Gabriele Battaglia >> ha scritto: >> >> Ciao. >> Sono recentemente passato a Python 3.8.1 >> Ho un comportamento che non mi spiego. >> Assegno un valore numerico ad una variabile tramite una piccola funzione che >> si assicura che l'utente inserisca numeri e non lettere: >> >> def Numero(s): >> while True: >> try: >> n = int(input(s)) >> break >> except: >> print("Sono accettati esclusivamente valori numerici!") >> return (n) >> >> i1 = Numero("Da: ") >> >> Bene, fin qui dovrebbe essere elemntare. Poi ho bisogno di sottrare una >> unità ad i1: >> >> i1 -= 1 >> >> E ricevo un errore. L'interprete mi informa che l'operatore -= non può >> essere usato sulla classe None ma solo sugli interi. >> Ho inserito un print(type(i1)) prima dell'errore ed in effetti appartiene >> alla classe None. >> Ma com'è possibile? >> >> Gabry. >> -- >> Gabriele Battaglia, IZ4APU (Libero) >> Sent from TB on Windows 10, Genus Bononiae's computer. >> ___ >> Python mailing list >> Python@lists.python.it >> https://lists.python.it/mailman/listinfo/python ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
[Python] Ordered dict.
Sera. Quello che in Python 2 si faceva per poter utilizzare i dizionari ordinati: from collections import OrderedDict Immagino sia cambiato, in Python 3. Ora come funziona? C’è un metodo da chiamare affinché gli elementi aggiunti restino nell’ordine d’entrata oppure si fa in qualche altro modo? Grazie. Gabry. — Namasté! Sent from Starship iMac27, Captain Battaglia I Z 4 A P U @ L I B E R O . I T -- ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Ordered dict.
Da python 3.6 i normali dict sono ordinati, ma puoi usare ancora gli OrderedDict per scrivere codice che funzioni sulle diverse versioni e espliciti il fatto che fai affidamento sul fatto che l'ordinamento sia mantenuto On Fri, Jan 31, 2020, 21:32 Gabriele Battaglia wrote: > Sera. > Quello che in Python 2 si faceva per poter utilizzare i dizionari ordinati: > > from collections import OrderedDict > Immagino sia cambiato, in Python 3. > Ora come funziona? C’è un metodo da chiamare affinché gli elementi > aggiunti restino nell’ordine d’entrata oppure si fa in qualche altro modo? > Grazie. > > Gabry. > — > Namasté! > Sent from Starship iMac27, Captain Battaglia > I Z 4 A P U @ L I B E R O . I T > -- > > ___ > Python mailing list > Python@lists.python.it > https://lists.python.it/mailman/listinfo/python > ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python
Re: [Python] Ordered dict.
> Il giorno 31 gen 2020, alle ore 21:49, Lorenzo Buonanno > ha scritto: > > Da python 3.6 i normali dict sono ordinati, ma puoi usare ancora gli > OrderedDict per scrivere codice che funzioni sulle diverse versioni e > espliciti il fatto che fai affidamento sul fatto che l'ordinamento sia > mantenuto Grazie Lorenzo. Allora provvedo alla rimozione degli ordered dict, in quanto non devo mantenere la retrocompatibilità. Buona serata. Gabry. ___ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python