当 的长度n
为 0 时,该n[0]
部分将引发错误,因为字符串为空。您应该在return
那里添加一个语句而不是打印。
def checker(n):
if len(n) < 2:
return True
if n[0] in x:
请注意,条件必须是,否则当字符串长度为 1 时len(n) < 2
会出错。n[1]
其次,您尝试将字符与包含整数的列表匹配,因此in检查始终为False
. 将列表项转换为字符串或更好地使用str.isdigit
.
>>> '1'.isdigit()
True
>>> ')'.isdigit()
False
>>> '12'.isdigit()
True
更新:
您可以为此使用regex
和:all
>>> import re
def check(strs):
nums = re.findall(r'\d+',strs)
return all(len(c) == 1 for c in nums)
...
>>> s="(8+(2+4))"
>>> check(s)
True
>>> check("(8+(2+42))")
False
您的代码的工作版本:
s="(8+(2+4))"
def checker(n):
if not n: #better than len(n) == 0, empty string returns False in python
return True
if n[0].isdigit(): #str.digit is a method and it already returns a boolean value
if n[1].isdigit():
return False
else:
return checker(n[1:]) # use return statement for recursive calls
# otherwise the recursive calls may return None
else:
return checker(n[1:])
print checker("(8+(2+4))")
print checker("(8+(2+42))")
输出:
True
False