【问题标题】:How to check if a number is a number when it is a 'string'?当数字是“字符串”时,如何检查数字是否是数字?
【发布时间】:2013-05-20 17:49:16
【问题描述】:

这是一个更大计划的一部分。这就是我想要做的。

  1. 将一句话传递给scan方法。
  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')

这是一个类中的方法,print语句在外面。我关心并遇到麻烦的部分是:

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

它应该适用于任何自然数 [1,无穷大)

编辑: 我在尝试扫描时遇到问题('ASDFASDFASDF')

【问题讨论】:

标签: python types integer


【解决方案1】:

既然你只需要正整数,那么试试elif word.isdigit():(注意这也会接受“0”)。

【讨论】:

  • 您可以使用elif word.isdigit() and word != '0': 过滤掉零。
  • 可能:elif word.ltrim('0').isdigit()
  • elif word.isdigit() and int(word) > 0:
  • 我会在 'if' 测试期间坚持使用字符串样式的方法,例如 Jon Clements 对 lstrip 的建议,一旦我们知道,就尝试在 elif 正文中只进行一次 int() 转换我们希望这个值是一个正整数。
【解决方案2】:
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'

【讨论】:

  • s 是一个字符串,所以你的意思是“and s != '0'”。
  • @PaulMcGuire 实际上我的意思是int(s),但是是的,我错了,谢谢
【解决方案3】:

您可以将int 应用于word 并捕获ValueError(如果它不是数字)。

【讨论】:

  • 做一个except ValueError: 然后呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
  • 2014-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多