【问题标题】:How To Fix String Index Out of Range in Python如何在 Python 中修复超出范围的字符串索引
【发布时间】:2020-12-01 18:26:41
【问题描述】:

我目前正在学习 python。书中有一个练习,概述了解码的代码。我跟着这段代码,但是我一直在程序中间收到一个错误。

这是导致问题的代码:

def decode(string_for_decoding):
    result = ""
    for i in range(0, len(string_for_decoding)):
        if string_for_decoding[i+1].isdigit():
            result += string_for_decoding[i] * int(string_for_decoding[i+1])
        elif string_for_decoding[i].isalpha():
            result += string_for_decoding[i]
    return result


string_for_decoding = input("Enter a string to decode: ")
print(decode(string_for_decoding))

【问题讨论】:

  • 请将代码发布为代码(代码块前后的```),而不是屏幕截图。这使得复制/粘贴以及谷歌成为可能。
  • 你的 range 函数的长度太大了,试着减去一个
  • 您使用的是[i+1],因此,在您单词的最后一个字母处,您的算法正在检查一个不存在的附加字母。因此它会引发此错误

标签: python index-error


【解决方案1】:

检查范围的索引是否大于字符串中的字符数。它可能看起来像这样:

def decode(string_for_decoding: str):
    result = ""
    for i in range(0, len(string_for_decoding)):
        if len(string_for_decoding) > i + 1 and string_for_decoding[i + 1].isdigit():
            result += string_for_decoding[i] * int(string_for_decoding[i + 1])
        elif string_for_decoding.isalpha():
            result += string_for_decoding[i]
    return result

print(decode(input("Enter a string to decode: ")))

【讨论】:

    【解决方案2】:

    您从0 to len(string) 出发,在for 循环内尝试访问索引:i+1 这是根本原因!要么:

    • 迭代直到少一个长度,例如直到len(string) - 1
    • 或使用索引 里面适当

    此外,强烈建议不要使用range(len(x))。您可以简单地将任何集合数据类型迭代为for i in x: 如果您也想要索引,请查看enumerate()。而且您可以完全忘记索引错误。

    【讨论】:

      【解决方案3】:

      您正在尝试获取不能等于或大于 len(string) 的索引 i+1

      【讨论】:

      • 但我必须检查索引 i + 1。我知道由于这种情况,我得到了那个错误,但我无法修复它......
      • @Burak 物理上不可能访问字符串末尾的字符。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 1970-01-01
      • 2019-08-17
      • 2016-02-10
      • 2019-12-24
      • 2016-08-11
      相关资源
      最近更新 更多