我是python的新手,并尝试创建一个非常简单的函数,用于更大的地图着色程序。
该函数的想法是将一组变量归属于不同的区域(string1),并为其分配颜色(r,g,b),然后测试这些区域是否通过递归方式触摸相同颜色的另一个区域查看一组区域边框(string2)以查找匹配的变量+颜色。
输入格式如下所示: (“Ar,Bg,Cb”,“AB,CB,CA”) 将返回True,意味着没有两个相同颜色的区域触摸。
到目前为止,这是我的代码段:
def finding_double_char_function(string1, string2):
if string2=="":
return True
elif string2[0]+"r" and string2[1]+"r" in string1 or string1[::-1]:
return False
elif string2[0]+"g" and string2[1]+"g" in string1 or string1[::-1]:
return False
elif string2[0]+"b" and string2[1]+"b" in string1 or string1[::-1]:
return False
else:
return finding_double_char_function(string1, (string2[3:]))
当我期待True时,我一直都是假的。有人可以帮忙吗?非常感谢。
答案 0 :(得分:1)
你有几个问题,但你的主要问题是你似乎不知道表达式中绑定的顺序。你写的内容有点像这样:
elif string2[0]+"r" and
((string2[1]+"r" in string1) or
string1[::-1]) :
换句话说,您已将字符串用作布尔值。你从中获得的价值不是你所期望的。我认为你要做的是看看构造的字符串(例如“Ar”)是否在字符串1中,无论是向前还是向后。
“in”只能加入一对字符串; “and”和“or”在“in”中没有分配属性。
这是第一部分正确改写:
elif (string2[0]+"r" in string1) and
(string2[1]+"r" in string1)
这会让你前进吗?
此外,坚持使用print语句来跟踪执行情况并在此过程中打印出有用的值。
答案 1 :(得分:0)
如果我不正确,你的问题可以解决这个问题:
def intersect(str1, str2):
if (not str2):
return True
if (str1[str1.find(str2[0]) + 1] == str1[str1.find(str2[1]) + 1]):
return False
else:
return intersect(str1, str2[3:])