下面的代码应该用来测试r和b是否是交替的。因此,"rbrbrb“的测试将被接受,而"rbbrbbr”则不会被接受。
然而,我的问题是,只测试def manufactoria()下的前两个
def manufactoria():
test(alternating_colors, "")
test(alternating_colors, "r")
test(alternating_colors, "rb")
test(alternating_colors, "rbrbrbr")
test(alternating_colors, "b")
test(alternating_colors, "brbr")
test(alternating_colors, "brbrbrbr")
def alternating_colors(string):
length = len(string)
check = 0
if len(string) == 0 or len(string)==1:
return True
while check <= len(string)-1:
if string[check]+string[check+1] == "rr" or string[check]+string[check+1] == "bb":
return False
check +=1
def test(fn, string):
if fn(string):
result = "accepted"
else:
result = "not accepted"
print('The string "' + string + '" is ' + result)
manufactoria()发布于 2018-11-02 18:15:40
以下是修正后的版本:
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这基本上是使用了普鲁恩回答的大部分内容。
一个更好的解决方案是使用正则表达式。这将发现任何r或b的重复:
import re
def alternating_colors(s):
if re.search(r"r{2,}|b{2,}", s):
return False
return True发布于 2018-11-02 18:10:52
它不会检查所有的代码,因为“超出范围的索引”异常会杀死程序。
您的索引超出了范围,因为您试图访问长度为2的字符串的位置2:"rb"有索引0和1,但是您试图检查string[1] + string[1+1]。您需要更早地停止检查循环一个索引,正如一位评论已经提到的那样。
如果您学习使用这些Python语言特性,您可以使这个程序更短、更容易维护:
for语句(替换while和增量循环)in操作符(而不是检查各个位置)https://stackoverflow.com/questions/53123617
复制相似问题