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