Python 不';在修复字符串索引超出范围时,不要测试所有代码

Python 不';在修复字符串索引超出范围时,不要测试所有代码,python,Python,好的,下面的代码应该测试r和b是否交替。因此,“RBRB”测试将被接受,但“rbbrbbr”测试将不被接受 但是,我的问题是,在def Manufacturia()下只测试前两个 def-manufactoria(): 测试(交替_颜色,“”) 测试(交替_颜色,“r”) 测试(交替_颜色,“rb”) 测试(交替颜色,“RBR”) 测试(交替颜色,“b”) 测试(交替颜色,“brbr”) 测试(交替颜色,“BRBR”) def交替_颜色(字符串): 长度=长度(字符串) 检查=0 如果len(字

好的,下面的代码应该测试r和b是否交替。因此,“RBRB”测试将被接受,但“rbbrbbr”测试将不被接受

但是,我的问题是,在def Manufacturia()下只测试前两个

def-manufactoria():
测试(交替_颜色,“”)
测试(交替_颜色,“r”)
测试(交替_颜色,“rb”)
测试(交替颜色,“RBR”)
测试(交替颜色,“b”)
测试(交替颜色,“brbr”)
测试(交替颜色,“BRBR”)
def交替_颜色(字符串):
长度=长度(字符串)
检查=0
如果len(字符串)==0或len(字符串)==1:
返回真值

而check不会检查所有代码,因为“索引超出范围”异常会杀死程序

您的索引超出范围,因为您尝试访问长度为2的字符串的位置2:
“rb”
具有索引0和1,但您尝试检查
字符串[1]+字符串[1+1]
。正如一位评论者已经提到的那样,您需要提前一个索引停止检查循环

如果您学习使用以下Python语言功能,则可以使该程序更短、更易于维护:

  • <(少于操作员)
  • 用于
    语句(在
和 增量循环)
  • 字符串切片(而不是连接单个 (字符)
  • 操作员中的
    (而不是检查单个位置)

    • 以下是正确的版本:

      def alternating_colors(s):
          length=len(s)
          if length<2:
              return True
          for i in range(length-1):
              curr_slice = s[i:i+2]
              if curr_slice in ["rr", "bb"]:
                  return False
          return True
      

      不知道你想在这里做什么,但如果string(check)+string(check+1)=“rr”或string[check]+string[check+1]==“bb”看起来完全崩溃,你发布的代码不会运行:
      test
      未定义。我修正了你原来的缩进。请对您的更新执行同样的操作。如果
      check
      等于
      len(string)-1
      并且您使用索引
      string[check+1]
      ,您当然会超出范围,因为Python从0开始计数。而且字符串是不可调用的,因此
      string(check)
      将导致错误,所以我尝试将string(check)+string(check+1)等中的所有内容更改为string[check]+string[check+1],但仍然没有测试所有内容。只测试前两个。欢迎使用StackOverflow。请按照您创建此帐户时的建议,阅读并遵循帮助文档中的发布指南。适用于这里。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。但我认为您必须使用==或这些是您在提问之前尝试自己回答的问题,正如发布指南中所述。Python教程可以很容易地涵盖这些概念,大约占一半,但适合当前的编码级别。在
      中使用两个子句的
      ,将其简化为一行的
      return
      语句。但该代码不接受rr和bb吗?因此,就像在扩展的RBBR中一样,如果您插入
      “rr”
      “bb”
      这将返回
      False
      ;我理解正确吗?它应该返回False。但我只是尝试了一下,结果它被接受了。我只是重新启动了内核,在
      “rr”
      “bb”
      上尝试了这个函数,在这两种情况下它都返回
      False
      def alternating_colors(s):
          length=len(s)
          if length<2:
              return True
          for i in range(length-1):
              curr_slice = s[i:i+2]
              if curr_slice in ["rr", "bb"]:
                  return False
          return True
      
      import re
      def alternating_colors(s):
          if re.search(r"r{2,}|b{2,}", s):
              return False
          return True