2013-05-20 2 views
0

Это часть более крупной программы. Вот что я пытаюсь сделать.Как проверить, является ли число числом, когда оно является «строкой»?

  1. Передайте предложение методу сканирования.
  2. Есть предложение содержать номера.
  3. Разделите предложение на разные термины.
  4. добавить в список кортеж, первое выражение в кортеже является типом вещи, в которое входит слово или предложение, второе - это слово или число.

Вот что я пытаюсь:

def scan(self, sentence): 
    self.term = [] 

    for word in sentence.split(): 
     if word in direction: 
      self.term.append(('direction', word)) 
     elif word in verbs: 
      self.term.append(('verb', word)) 
     elif word in stop: 
      self.term.append(('stop', word)) 
     elif word in nouns: 
      self.term.append(('noun', word)) 
     elif type(int(word)) == 'int': 
      self.term.append(('number', int(word))) 
     else: 
      self.term.append(('error', word)) 

    return self.term 



print lexicon.scan('12 1234') 

Это метод в классе, оператор печати снаружи. Часть меня беспокоит и возникли проблемы с это:

elif type(int(word)) == int: 
    self.term.append(('number', int(word))) 

Он должен работать для любого натурального числа [1, бесконечность)

Edit: я бегу в проблему, когда я пытаюсь сканировать ('ASDFASDFASDF')

+1

, что вы точно? type (int (word)) == int ??? вы конвертируете его в int, а затем проверяете, является ли он int? –

+1

Дубликат http://stackoverflow.com/questions/5424716/python-how-to-check-if-input-is-a-number-given-that-input-always-returns-stri http: // stackoverflow .com/вопросы/16488278/how-to-check-if-a-variable-is-a-integer-or-a-string из http://stackoverflow.com/questions/354038/how-do-i-check -if-a-string-is-a-number-in-python из ... –

ответ

5

Поскольку вам нужны только целые положительные числа, попробуйте elif word.isdigit(): (обратите внимание, что это также примет «0»).

+1

Вы можете сделать 'elif word.isdigit() и word! = '0':' для фильтрации нуля. – SethMMorton

+0

Удивительно, у меня сейчас есть рабочая программа. –

+2

Возможно: 'elif word.ltrim ('0'). Isdigit()' –

0

Вы можете применить int к word и поймать ValueError, если это не номер.

+0

Сделайте 'except ValueError:' то что? –

1
if word.lstrip('0').isdigit(): 
    #append 

Использование .lstrip('0') удалит ведущих 0 и вызвать такие строки, как '0' и '000' не пройти проверку. Просто делать if word.isdigit() and word !='0' не исключает '00' или любую другую строку, которая является только многократный '0' s

Вы можете также использовать try/except/else, чтобы увидеть, если это int и реагировать соответствующим образом

try: 
    int(s) 
except ValueError: 
    print s, 'is not an int' 
else: 
    print s, 'is an int' 
+0

'' 'строка, поэтому вы имеете в виду" и s! = '0' ". – PaulMcG

+0

@PaulMcGuire Я имел в виду 'int (s)' на самом деле, но да, моя ошибка, спасибо –

Смежные вопросы