请不要给我答案,只需指出正确的方向,谢谢。另外,我需要在没有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
答案 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你的回答正是我所寻找的