在python中创建类似isdigit()的函数

时间:2015-11-01 22:23:10

标签: python

请不要给我答案,只需指出正确的方向,谢谢。另外,我需要在没有isdigit()的情况下执行此操作。

我正在尝试创建一个程序来检查字符串的所有字符,如果它们中的任何一个不是自然数,那么程序将返回False,否则它将返回True

这是我到目前为止所做的:

numbers = ["0123456789"]

if len(str) > 0:
    for i in str:
        if i not in numbers:
            return False
        else:
            return True

我有一些测试用例,而我遇到的问题是,当我返回时,整个程序就结束了。我需要找到一种方法来包含else: return True

2 个答案:

答案 0 :(得分:0)

当您将每个字符与所有数字(即"1" == "0123456789")进行比较时,您需要从列表中删除数字,还需要在返回True之前检查每个字符:

def is_dig(s):
    numbers = "0123456789"  # single iterable of the numbers
    for i in s:
        if i not in numbers:
            return False
    return bool(s) # return outside the loop also catching empty string

更有效的方法是使用ord和all

def is_dig(s):
    return len(s) > 0 and all(48 <= ord(ch) <= 57 for ch in s)

ord的{​​{1}}为48,而“9”的ord为57,所以如果char的ord落在该范围内,那么你有一个数字,如果不是"0"将短路并返回False。

使用没有all的ord并按照自己的逻辑看起来像:

all

答案 1 :(得分:0)

numbers =“0123456789”

if len(str) > 0:
    for i in str:
        if i not in numbers:
            return False
    return True

感谢Padraic和大家的意见。 @Till Hoffmann你的回答正是我所寻找的