Python 创建一个函数来完成内置函数“的功能”;isdigit“;做

Python 创建一个函数来完成内置函数“的功能”;isdigit“;做,python,string,function,python-2.7,if-statement,Python,String,Function,Python 2.7,If Statement,我试图创建一个函数,该函数执行isdigit的操作,即如果字符串中的所有字符都是数字且至少有一个字符,则返回true,否则返回false。每次我尝试使用它,它告诉我“数字”没有定义。我对它要求我改变什么感到困惑。。。非常感谢您的帮助 函数查看每个字符,如果所有字符都是数字,则只返回True: def my_isdigit(str): if digit in str >0 and str is int: print "True" else: p

我试图创建一个函数,该函数执行
isdigit
的操作,即如果字符串中的所有字符都是数字且至少有一个字符,则返回true,否则返回false。每次我尝试使用它,它告诉我“数字”没有定义。我对它要求我改变什么感到困惑。。。非常感谢您的帮助

函数查看每个字符,如果所有字符都是数字,则只返回
True

def my_isdigit(str):
    if digit in str >0 and str is int:
        print "True"
    else:
        print "False"
或者使用字符串比较:

digits = '0123456789'

def isdigit(inputstring):
    if not inputstring: return False
    for char in inputstring:
        if char not in digits:
            return False
    return True
def isdigit(输入字符串):
如果不是inputstring:返回False
对于inputstring中的字符:

如果不是“0”,则可以使用正则表达式

def isdigit(inputstring):
    if not inputstring: return False
    for char in inputstring:
        if not '0' <= char <= '9':
            return False
    return True
因为有一些问题,这里有一些简单的测试:

def my_isdigit(str):
    return re.search("[^\d]", str) is None

@Martijn Pieters建议如何修复您的版本;为了完整起见,这里有一种更为“pythonic”(和高效)的方法来解决这个问题

print my_isdigit("02211")
> True
print my_isdigit("022x01")
> False
print my_isdigit("a02201")
> False
def my_isdigit(str):

返回所有('0'感觉有点像用加农炮射击苍蝇:)我认为不会捕获“至少有一个字符”条件。一个有效的正则表达式应该是
^\d+$
。这与文本的开头和结尾之间至少有一个数字字符相匹配。它需要更改为类似于返回bool(re.search(“^\d+$”,str))
的内容才能真正匹配内置的
isdigit
@SethMMorton无需执行bool(),但我同意使用“\d”而不是0-9会更好谢谢您的帮助!我需要定义数字吗?“int”不起作用吗?我正在尝试创建一个与现有函数isdigit完全相同的函数…@user2784808:
str is int
将检查
str
是否是对
int
类型的引用,这与它是否是只包含数字的字符串无关。@user2784808:而不是自己定义数字,您可以从
字符串
模块导入它们:
从字符串导入数字
如果您担心性能,在
集合
中测试成员身份可能会快一点(但可能不会快很多,因为只有10个值)。@Blckknght:这里故意不从
字符串
导入。我怀疑OP是否关心这里的速度。我会满足于先理解发生了什么。我认为您不需要
[]
中的
全部
。生成器表达式的工作原理与列表理解一样好,可能不会占用太多内存(在这种情况下可能不是问题,但总体上是个好主意)。@Blckknght:修复了,谢谢。pythonic解决方案是使用
.isdigit()
:-P我省略了这个版本,因为我认为OP无法学习生成器表达式的工作原理。
def my_isdigit(str):
    return all('0'<=c<='9' for c in str)