当前位置: 首页 > 知识库问答 >
问题:

使用基本递归-尝试递归地查看两个字符的字符串

沈曜灿
2023-03-14

我是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:]))

当我期待着真的时候,我却一直在变假。有人能帮忙吗?谢谢。

共有2个答案

贺君浩
2023-03-14

如果我理解正确,你的问题可以这样解决:

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:])
欧阳楚
2023-03-14

在这方面有几个问题,但主要问题是您似乎不知道表达式中绑定的顺序。您所写的内容更具可读性,如下所示:

elif string2[0]+"r" and 
    ((string2[1]+"r" in string1) or
      string1[::-1])                 :

换句话说,您使用字符串作为布尔值。你从中得到的价值并不是你所期望的。我想你要做的是看看构造的字符串(比如“Ar”)是否在字符串1中,向前还是向后。

“in”只能连接一对字符串;不存在“and”和“and”或“over”的分配属性。

以下是正确改写的第一部分:

elif (string2[0]+"r" in string1) and 
     (string2[1]+"r" in string1)

这能让你走吗?

此外,坚持打印语句来跟踪您的执行,并在此过程中打印出有用的值。

 类似资料:
  • 问题内容: 我正在尝试查找字符串中字母的首次出现。例如,苹果中的p应该返回1。这是我拥有的: 它似乎似乎没有返回正确的值。 问题答案: 您的尝试很好,但是还不够。这是基于您的正确实现: 您的尝试存在两个问题: 在这一部分中,您已经找到了角色,因此正确的做法是停止递归,但您仍在继续。 在最后一个return语句中,您需要在递归调用中加1(如果最终找到了该字符),作为累加总索引号的一种方式。

  • 我试图使用这个递归函数来找到回文字符串,但是代码输出术语<code>alia

  • 我看到了这篇文章,它非常努力地解释了打印所有字符串的递归解决方案。 但当我们开始弹出堆栈时,我仍然无法得到部分。例如,递归一直进行到,在这里,基大小写遇到,它打印。但现在发生了什么?我们从函数调用堆栈弹出。我们用这个做什么等等? 谁能帮我解释一下吗? 另外,我需要一些关于时间复杂度的指示。不像完全的计算而是一些暗示。

  • 我应该编写一个简单的方法,返回给定数量的给定字符串,用逗号分隔(最后没有逗号),并使用递归。如果计数少于两个,则返回空字符串“”。 如果我把s=cat,count=5,我会得到所需的短一个。我不知道该怎么做,在这里得到适当数量的重复,而不在末尾加逗号。 编辑:显然我没有沟通,如果计数为2或更少,则该方法应该返回一个空字符串。抱歉这里不够清晰。

  • 问题内容: 如何递归地查找字符串中最长的单词? 编辑 说完了,谢谢大家。这是修改后的代码。 问题答案: 首先,让我们假设句子字符串参数没有任何前导或尾随空格。您可以通过调用trim()来处理递归情况。 然后,我们需要定义两种情况,即基本情况和递归情况。 基本情况是找不到空格,即传入的句子只是一个单词。在这种情况下,只需返回句子即可。 在递归的情况下,我们将得到第一个单词,其余的则与您一样。在句子的

  • 我需要使用递归方法找到两个字符串之间第一个不同字符的索引。 具有预期产出的示例: rFirstDistinctPlace(“小包裹”、“小椒盐卷饼”)->8 rFirstDistinctPlace(“Gold Shadow”,“Gold Shadow”)->0 rFirstDistinctPlace(“Gold”、“Golda”)->4 rFirstDistinctPlace(“Gold”,“Go