2015-10-22 15 views
8

Sto provando a scrivere un codice per modificare un elenco e renderlo un palindromo.Errore di input Python semplice

Tutto funziona, tranne il mio input mi dà ancora un errore. Quando inserisco un non-int in get_number_2, si arresta in modo anomalo.

def get_number(): 
    num = raw_input("Please enter number between 100,000 and 1,000,0000: ") 
    if not num.isdigit(): 
     print "---------------------------" 
     print "Invalid input: numbers only" 
     print "---------------------------" 
     my_main() 
    else: 
     return num 

def get_number_2(n): 
    num = input("Please confirm the number you have entered: ") 
    if num != int(n): 
     print "--------------------" 
     print "Entries do not match" 
     print "--------------------" 
     my_main() 
    else: 
     return num 

utilizzando l'ingresso da get_number_2 per il resto del codice come get_number non funziona quando controllo se le sue tra due numeri.

Esiste un modo per convalidare se l'input è un numero intero in get_number_2 in modo che sia possibile eliminare get_number?

risposta

3

È inoltre consigliabile utilizzare raw_input e int(num):

def get_number_2(n): 
    num = raw_input("Please confirm the number you have entered: ") 
    if not num.isdigit() or int(num) != n: 
     print "--------------------" 
     print "Entries do not match" 
     print "--------------------" 
     my_main() 
    else: 
     return int(num) 

Note:

  • Si considera che il parametro di n è un int, o per controllare questo si potrebbe cambiare il caso di: if not num.isdigit() or not n.isdigit() or int(num) != int(n).
  • Utilizzando isdigit controlliamo se si tratta di un numero intero prima di convertirlo realmente in int.
+0

Questo ancora non funzionerà perché 'int (num)' genererà un errore se 'num' non è un numero intero. –

+0

Non più, perché faccio il controllo prima. – agold

+0

Tutto quello che dovevo fare era restituire num come int. Grazie uomo. –

3

Non è possibile eseguire num != int(n) perché tenterà di chiamare int(n) che non è valido se n non è in realtà un numero intero.

Il modo corretto per farlo è quello di utilizzare try e except

try: 
    n = int(n) 
except ValueError: 
    print 'Entry is not an integer.' 
    #handle this in some way 

Edit: anche in Python 2.x usa raw_input() invece di input(). input() dà risultati molto strani se non sai cosa sta facendo.

+1

prega di non utilizzare a nudo, tranne dichiarazioni. Dovrebbe essere "tranne ValueError'. –

+0

Ya ma se potessi verificare se get_number_2 è un int potrei scartare get_number ed eliminare la necessità di abbinarli? –

+0

@S_Sull yes, puoi semplicemente fare 'try: n = int (raw_input ('Enter numero:')) ad eccezione di: ValueError: print 'Please enter ate' che cattura l'input e lo trasforma in un intero, rilevando se non è uno. –

6

Scrittura programma che gestisce l'eccezione. Se l'utente immette intero non valida, viene generata un'eccezione ValueError:

try: 
    a = int(b) 
except ValueError: 
    print "Unable to interpret your input as a number" 

è necessario aggiornare la tua domanda in questo modo:

def get_number_2(n): 
    num = input("Please confirm the number you have entered: ") 
    try: 
     if num != int(n): 
      print "--------------------" 
      print "Entries do not match" 
      print "--------------------" 
      my_main() 
     else: 
      return num 
    except ValueError: 
     print "Unable to interpret your input as a number" 
-1
from operator import attrgetter 
num0 = input() 
if not attrgetter('isdigit')(num0)(): 
    print("that's not a number") 
+0

corretto il rientro !!! –

+2

Per favore aggiungi qualche spiegazione. Solo uno snippet di codice non è una vera risposta. – cezar

+0

è ovvio che attragger ('isdigit') (num0)() restituisce Trus se la stringa data alla variabile "num0" è una cifra e False se non quindi se la stringa data è una cifra, il programma verrà eseguito normalmente se non stamperà non è un numero e se lo desideri puoi interrompere l'esecuzione o richiedere l'input agin –

Problemi correlati