我是 python 的 super 新手,正在尝试创建一个非常简单的函数以用于更大的 map 着色程序。
该函数的思想是将一组变量归因于不同区域 (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:]))
当我期望为真时,我总是得到假。谁能帮忙?非常感谢。
请您参考如下方法:
你在这方面有几个问题,但你的主要问题是你似乎不知道表达式中绑定(bind)的顺序。你写的是这样的更具可读性:
elif string2[0]+"r" and
((string2[1]+"r" in string1) or
string1[::-1]) :
换句话说,您已经将字符串用作 bool 值。您从中获得的值(value)不是您所期望的。我认为您要做的是查看构造的字符串(例如“Ar”)是否在字符串 1 中,无论是向前还是向后。
“in”只能连接一对字符串; “and”和“or”对“in”没有分配属性。
这是正确重写的第一部分:
elif (string2[0]+"r" in string1) and
(string2[1]+"r" in string1)
这会让你前进吗?
此外,坚持打印语句来跟踪您的执行并在此过程中打印出有用的值。
