字符串索引超出范围错误?

2024-09-27 18:23:21 发布

您现在位置:Python中文网/ 问答频道 /正文

您好,我有点难以理解为什么字符串索引被列为“超出范围”。考虑一下我在这段代码中试图翻译的字符串:

a = str("g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.")
b = 0
while True:
    if a[b] == str("k"): 
        a.replace("k", "m")
        b = b + 1 #Methodically checks each string for a 'k' and replaces it with a 'm'
    elif a[b] == str("o"):
        a.replace("o", "q")
        b = b + 1#Checks for an 'o' and replaces with 'q'
    elif a[b] == str("e"):
        a.replace("e", "g")
        b = b + 1
    else:
        b = b + 1
        continue
        if b == 202:
            print(a)
            break

Tags: and字符串forifwithreplacereplaceselif
3条回答

您永远不会在循环结束时到达您的break语句,因为您首先命中continue,然后跳到下一个迭代。只要把continue拿出来,你就可以准备好了。在

else:
    b = b + 1
    if b == 202:
        print(a)
        break

我也建议不要使用像202这样的“神奇”数字。相反,使用len函数动态地确定您是否在字符串的末尾:

^{pr2}$

或者更好的是,利用Python中可以轻松迭代字符串的事实:

for ch in a:
    # Do stuff

正如其他人在评论中所说,你的逻辑也是有缺陷的(replace无论如何都会覆盖整个字符串!),而且你不需要所有这些str(...)调用。您的整个函数可以重写为:

newstring = ''
for ch in a:
    if ch == 'k':
        newstring += 'm'
    elif ch == 'o':
        newstring += 'q'
    elif ch == 'e':
        newstring += 'g'
    else:
        newstring += ch
print newstring

或者更好的方法是,只需按照其预期的方式使用replace函数:

print a.replace('k', 'm').replace('o', 'q').replace('e','g')

在打破“如果”比较之前有一个“继续”。所以它可能永远不会到达if,也永远不会破裂

String是python中的一个序列,可以对其进行迭代。在

其次,由于字符串是不可变的,因此str.replace不修改a,它只返回一个新的字符串。在

a = "g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj."

for char in a:      
    if char == "k":
        a = a.replace("k", "m")  #assign the new string back to `a`
    elif char == "o":
        a = a.replace("o", "q")
    elif char == "e":
        a = a.replace("e", "g")
print a

相关问题 更多 >

    热门问题