0

これは、より大きなプログラムの一部です。これが私がやろうとしていることです。

  1. scan メソッドに文を渡します。
  2. 文に数字を含めます。
  3. 文を別の用語に分割します。
  4. リストにタプルを追加します。タプルの最初の式は、単語または文の要素が適合するもののタイプであり、2 番目の式は単語または数字です。

ここに私がしようとしているものがあります:

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')

これはクラス内のメソッドで、print ステートメントは外部にあります。私が懸念し、問題を抱えている部分はこれです:

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

任意の自然数 [1、無限大) に対して機能するはずです。

編集:スキャンしようとすると問題が発生します('ASDFASDFASDF')

4

3 に答える 3

5

必要なのは正の整数だけなので、試してみてくださいelif word.isdigit():(これは「0」も受け入れることに注意してください)。

于 2013-05-20T17:52:58.303 に答える
1
if word.lstrip('0').isdigit(): 
    #append

を使用する.lstrip('0')と、先頭の 0 が削除され'0'、 やなどの文字列'000'がチェックに合格しなくなります。単に複数の sである他の文字列をif word.isdigit() and word !='0'除外することはできません。'00''0'

try/ except/を使用してelse、それが であるかどうかを確認し、それintに応じて応答することもできます。

try:
    int(s)
except ValueError:
    print s, 'is not an int'
else:
    print s, 'is an int'
于 2013-05-20T17:54:10.483 に答える
0

番号でない場合は、に適用intwordてキャッチできます。ValueError

于 2013-05-20T17:52:29.567 に答える