[Python] Classe inattesa.

2020-01-31 Per discussione Gabriele Battaglia

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.

2020-01-31 Per discussione Roberto Barison
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.

2020-01-31 Per discussione Giovanni Vittorio Spina
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.

2020-01-31 Per discussione Giovanni Vittorio Spina
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.

2020-01-31 Per discussione Gabriele Battaglia
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.

2020-01-31 Per discussione Lorenzo Buonanno
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.

2020-01-31 Per discussione Gabriele Battaglia


> 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