PDA

View Full Version : Controllare se valore inserito è intero - Python


gabmac2
16-08-2013, 22:21
Come si può chiedere ad un utente un valore e se esso non è un intero restituire un errore?
Grazie in anticipo

clockover
17-08-2013, 08:22
Questo potrebbe esserti d'aiuto http://stackoverflow.com/questions/3501382/checking-whether-a-variable-is-an-integer-or-not

gabmac2
17-08-2013, 21:07
però servirebbe che ad una richiesta di input se il valore non è un intero dia un errore e richieda

cj++
17-08-2013, 21:35
Secondo me dovresti prima porti una domanda: per te, 4.0 è un intero o un numero reale? Se lo consideri un reale, allora isinstance dovrebbe esser piu che sufficiente.
Se lo consideri intero, allora potresti usar qualcosa come int(x) == x. In questo caso, se la parte reale è nulla, la condizione è vera.

gabmac2
17-08-2013, 23:05
ad esempio inserendo un carattere restituisce un errore
ad esempio "print inserire 0 o 1"
l' utente digita f
richiede "print inserire 0 o 1"
l' utente digita 0
prosegue

clockover
18-08-2013, 08:35
però servirebbe che ad una richiesta di input se il valore non è un intero dia un errore e richieda

Non sono esperto di Python, ma in questo caso non penso ce ne sia bisogno...
Oltre alla lecita osservazione di cj++, hai letto il link che ho postato?

gabmac2
18-08-2013, 09:20
l' errore lo dà comunque

clockover
18-08-2013, 10:54
l' errore lo dà comunque

Ma che errore? Puoi postare il codice

WarDuck
18-08-2013, 11:07
ad esempio inserendo un carattere restituisce un errore
ad esempio "print inserire 0 o 1"
l' utente digita f
richiede "print inserire 0 o 1"
l' utente digita 0
prosegue

Una cosa del genere può essere fatta molto semplicemente così:


c = None

while c!='0' and c!='1':
print "Inserire 0 o 1: "
c = raw_input()


# dopo il ciclo while sei sicuro che c conterrà 0 o 1 e puoi trasformarlo in intero

i = int(c)

...

gabmac2
18-08-2013, 12:15
bene,quindi
c = None

while c!='0' and c!='1':
print "Inserire 0 o 1: "
c = raw_input()



print type(c)
c=int(c)
print type(c)

si converte 0 o 1 in intero. Però se ad esempio si vuole far inserire un valore <= a 180 che iteri la richiesta finchè non si dà un intero (come in questo caso non solo per 0 o 1),come si può fare?

kwb
18-08-2013, 22:25
Sono certo ci sia un modo migliore del mio, però per ora questo credo faccia al caso tuo:

while True:
try:
intero = int(float(raw_input("Numero: ")))
break
except ValueError:
print "Devi inserire un numero intero"
print intero

Se inserisci un numero, intero o decimale, ti restituisce la parte intera.
Se inserisci altro, ti costringe a reinserire il numero.
Se vuoi che il numero inserito sia anche minore di 180,basta inserire un if prima del break.

EDIT: È necessario passare da float e poi int perchè non si può convertire un float scritto come stringa in intero. Tipo '3.0' non può essere convertito in intero direttamente, ma devi prima convertirlo in 3.0.
'3.0'-> 3.0 -> 3

gabmac2
18-08-2013, 22:54
risolto poco fa proprio con il discorso eccezione
grazie comunque