【问题标题】:Getting "string index out of range" error获取“字符串索引超出范围”错误
【发布时间】:2019-07-03 18:47:04
【问题描述】:

代码来自 CodingBat,问题是:如果字符串“cat”和“dog”在给定字符串中出现的次数相同,则返回 True。

我有解决方案,但它指出字符串索引超出范围。我真的不明白这意味着什么,因为我是 python 新手。

def cat_dog(str):
  dogCount = 0
  catCount = 0

  length = len(str)

  if length > 6:
    for i in range(length-1):
      if str[i]== 'd' and str[i+1]== 'o'  and str[i+2]== 'g':
        dogCount +=1
      elif str[i]== 'c' and str[i+1]== 'a' and str[i+2]== 't':
        catCount +=1
  else:
    return False

  if dogCount == catCount:
    return True
  else:
    return False 

根据函数结果预测真或假

【问题讨论】:

  • 你调用 str[i+2] 并且你的循环上升到 length-1 所以这就是你收到错误的原因
  • 不要使用str 作为变量。这是一个python关键字

标签: python python-3.x


【解决方案1】:

字符串索引超出范围错误意味着您正在尝试访问超出字符串长度的字母。这发生在您的 for 循环中,因为当i = length - 2str[i+2] 变为超出字符串长度的str[length] 时。此外,您应该将if length > 6 更改为if length >= 6。试试这个代码:

def cat_dog(string):
  dogCount = 0
  catCount = 0

  length = len(string)

  if length >= 6:
    for i in range(length-2):
      if string[i]== 'd' and string[i+1]== 'o' and string[i+2]== 'g':
        dogCount +=1
      elif string[i]== 'c' and string[i+1]== 'a' and string[i+2]== 't':
        catCount +=1
  else:
    return False

  if dogCount == catCount:
    return True
  else:
    return False 

【讨论】:

  • 您还应该对 JacobIRR 评论进行更改
【解决方案2】:

一种可能的解决方案是不断检查字符串以查看它是否包含替换第一次出现的单词,直到不再出现为止:

def cat_dog(string):
    dogCount = 0
    catCount = 0

    while "dog" in string:
        dogCount += 1
        string = string.replace("dog", "", 1)

    while "cat" in string:
        catCount += 1
        string = string.replace("cat", "", 1)

    if dogCount == catCount:
        return True
    else:
        return False 

【讨论】:

    猜你喜欢
    • 2013-09-25
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 2021-05-16
    相关资源
    最近更新 更多