gpt4 book ai didi

python - IndexError 字符串索引超出范围

转载 作者:太空宇宙 更新时间:2023-11-04 10:45:39 26 4
gpt4 key购买 nike

s="(8+(2+4))"
def checker(n):
if len(n) == 0:
return True
if n[0].isdigit==True:
if n[1].isdigit==True:
return False
else:
checker(n[1:])
else:
checker(n[1:])

这就是我目前所拥有的。简单的代码,试图查看一个字符串是否满足以下条件。但是,当我执行检查器时,我得到:

True
IndexError: string index out of range

有什么帮助吗?提前致谢编辑:该函数的目的是在字符串仅包含单个数字时生成 true,如果字符串中存在 2 个或更多数字则生成 false。

最佳答案

n的长度为 0,n[0]部分将引发错误,因为字符串为空。您应该添加 return在那里声明而不是打印。

def checker(n):
if len(n) < 2:
return True
if n[0] in x:

注意条件必须是len(n) < 2否则你会在 n[1] 上得到一个错误当字符串长度为1时。

其次,您试图将字符与包含整数的列表进行匹配,因此 in 检查始终为 False .将列表项转换为字符串或更好地使用 str.isdigit .

>>> '1'.isdigit()
True
>>> ')'.isdigit()
False
>>> '12'.isdigit()
True

更新:

您可以使用 regexall为此:

>>> 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

关于python - IndexError 字符串索引超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17540103/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com