gpt4 book ai didi

python - 字符串索引超出范围 (Python3)

转载 作者:行者123 更新时间:2023-12-01 01:10:39 25 4
gpt4 key购买 nike

我在第 4 行不断发现字符串索引超出范围(如果 s[i] != s[end-i]:),但我不明白为什么。我在可视化工具上运行了我的代码,但这对我没有帮助。在输入字符串 s 后,代码应该给出最长的回文子串

这是我的代码:

def isSubPalindrome (s,start,end):
isPal = True
for i in range (start,end):
if s[i] != s[end-i]:
isPal = False
return isPal

def longestPalSubsB (s):

MaxLen = 0
for i in range (len(s)-1):
for j in range (i,len(s)-1):
st = ""
for k in range (i,j):
st = st + s[k]
if isSubPalindrome (st,i,j) == True and len(st)>MaxLen:
MaxLen = len (st)
start = i
end = j

return s[start,end]

s = input("Enter a string: ")

print (longestPalSubsB(s))
Enter a string: aceexcivicgrfdds
Traceback (most recent call last):

File "<ipython-input-6-64661b5bf324>", line 1, in <module>
runfile('/Users/Rayan/Desktop/AUB Spring 2019/EECE 230 /HW/Homework 4/Problem2b.py', wdir='/Users/Rayan/Desktop/AUB Spring 2019/EECE 230 /HW/Homework 4')

File "/anaconda3/lib/python3.7/site-packages/spyder_kernels/customize/spydercustomize.py", line 704, in runfile
execfile(filename, namespace)

File "/anaconda3/lib/python3.7/site-packages/spyder_kernels/customize/spydercustomize.py", line 108, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)

File "/Users/Rayan/Desktop/AUB Spring 2019/EECE 230 /HW/Homework 4/Problem2b.py", line 35, in <module>
print (longestPalSubsB(s))

File "/Users/Rayan/Desktop/AUB Spring 2019/EECE 230 /HW/Homework 4/Problem2b.py", line 24, in longestPalSubsB
if isSubPalindrome (st,i,j) == True and len(st)>MaxLen:

File "/Users/Rayan/Desktop/AUB Spring 2019/EECE 230 /HW/Homework 4/Problem2b.py", line 12, in isSubPalindrome
if s[i] != s[end+1-i]:

IndexError: string index out of range

最佳答案

Python range(start, end) 为您提供从 startend-1 (含)的数字序列。例如,range(10, 14) 是 10, 11, 12, 13。现在考虑这个循环:

for i in range (start,end):
if s[i] != s[end-i]:
isPal = False

如果使用我的 range(10, 14) 示例,则 if 部分正在比较 s[10] != s[14-10] 直到 s[13] != s[14-13]。显然不是您想要做的。

可能你的意思是这样的:

for i in range(end-start):
if s[start+i] != s[end-i]:
isPal = False

为了解决您的问题,有一个(长)一句话可以做到这一点:

print(max([s[i:j+1] for i in range(len(s)) for j in range(i+1, len(s)) if s[i:j+1] == "".join(reversed(s[i:j+1]))], key=lambda x: len(x)))

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

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