2015-02-02 8 views
9

quando provo questoCome digitare il numero negativo con .isdigit?

if question.isdigit() is True: 

posso digitare numeri bene, e questo sarebbe filtrare alfa/stringhe alfanumeriche

quando provo 'S1' e 's', per esempio, sarebbe andare a (altro).

Il problema è che quando inserisco un numero negativo come -1, '.isdigit' conta '-' firma come valore stringa e lo rifiuta. Come posso fare in modo che '.isdigit' permetta il simbolo negativo '-'?

Ecco il codice. Della cosa che ho provato

while a <=10 + Z: 
    question = input("What is " + str(n1) + str(op) + str(n2) + "?") 
    a = a+1 

    if question.lstrip("-").isdigit() is True: 
     ans = ops[op](n1, n2) 
     n1 = random.randint(1,9) 
     n2 = random.randint(1,9) 
     op = random.choice(list(ops)) 

     if int(question) is ans: 
      count = count + 1 
      Z = Z + 0 
      print ("Well done") 
     else: 
      count = count + 0 
      Z = Z + 0 
      print ("WRONG") 
    else: 
     count = count + 0 
     Z = Z + 1 
     print ("Please type in the number") 
+0

Fornire 1) ingresso di campionamento, 2) l'uscita per ciascun valore di ingresso. –

risposta

9

Utilizzare un try/tranne, se non siamo in grado di lanciare a un int sarà impostato is_dig-False:

try: 
    int(question) 
    is_dig = True 
except ValueError: 
    is_dig = False 
if is_dig: 
    ...... 

O fare una funzione:

def is_digit(n): 
    try: 
     int(n) 
     return True 
    except ValueError: 
     return False 

if is_digit(question): 
    .... 

Guardando la tua modifica cast int alla partenza, controllando se l'ingresso è una cifra e poi casting è inutile, lo fanno in un solo passaggio:

while a < 10: 
    try: 
     question = int(input("What is {} {} {} ?".format(n1,op,n2))) 
    except ValueError: 
     print("Invalid input") 
     continue # if we are here we ask user for input again 

    ans = ops[op](n1, n2) 
    n1 = random.randint(1,9) 
    n2 = random.randint(1,9) 
    op = random.choice(list(ops)) 

    if question == ans: 
     print ("Well done") 
    else: 
     print("Wrong answer") 
    a += 1 

Non so cosa Z sta facendo a tutti, ma Z = Z + 0 è lo stesso di non fare nulla per Z affatto 1 + 0 == 1

Utilizzando una funzione di prendere l'input possiamo semplicemente usare gamma:

def is_digit(n1,op,n2): 
    while True: 
     try: 
      n = int(input("What is {} {} {} ?".format(n1,op,n2))) 
      return n 
     except ValueError: 
      print("Invalid input") 


for _ in range(a): 
    question = is_digit(n1,op,n2) # will only return a value when we get legal input 
    ans = ops[op](n1, n2) 
    n1 = random.randint(1,9) 
    n2 = random.randint(1,9) 
    op = random.choice(list(ops)) 

    if question == ans: 
     print ("Well done") 
    else: 
     print("Wrong answer") 
11

Uso lstrip:

question.lstrip("-").isdigit() 

Esempio:

>>>'-6'.lstrip('-') 
'6' 
>>>'-6'.lstrip('-').isdigit() 
True 

Puoi lstrip('+-') se si vuole considerare +6 una cifra valida.

Ma io non userei isdigit, si può provare int(question), sarà un'eccezione se il valore non può essere rappresentato come int:

try: 
    int(question) 
except ValueError: 
    # not int 
+0

prova ... eccetto che impiega molto tempo –

+0

che cosa fa? – Wdoctor123

+1

@no_name non vale la pena di pensare a quest'ora .. – Maroun

1

Se non w ISH di andare per provare ... tranne, si potrebbe usare espressioni regolari

if re.match("[+-]?\d", question) is not None: 
    question = int(question) 
else: 
    print "Not a valid number" 

Con try ... except, è più semplice:

try: 
    question = int(question) 
except ValueError: 
    print "Not a valid number" 

Se isdigit è d'obbligo ed è necessario per preservare la valore originale, puoi usare lstrip come menzionato in una risposta data. Un'altra soluzione sarà:

if question[0]=="-": 
    if question[1:].isdigit(): 
     print "Number" 
else: 
    if question.isdigit(): 
     print "Number" 
Problemi correlati