1

首先,这作业,所以我不期待任何直接的答案。我需要取两个由函数 ( semordnilap(str1, str2)) 定义的字符串,并且我需要查看它们是否在一个反转时相等。我想知道我是否可以通过我尝试了几种方法将它们单独从函数中调用出来,但semordnilap(str1[0:1) == semordnilap(str2[-1])我一定没有正确地考虑它,当然还有尝试递归地执行此操作的踢球者。任何建议或指导都会有所帮助。

def semordnilap(str1, str2):
    '''
    str1: a string
    str2: a string

    returns: True if str1 and str2 are semordnilap
    False otherwise.
    '''
    if len(str1) != len(str2):
        return False
    if len(str1) <= 1 or len(str2) <= 1:
        return False
    if semordnilap(str1[0]) != semordnilap(str2[-1]):
        return False
    else:
        return True

这就是我到目前为止所拥有的,得到错误TypeError: semordnilap() takes exactly 2 arguments (1 given)

4

2 回答 2

3

给定两个字符串str1str2,比较一个是否等于另一个字符串的最简单方法是使用切片:

str1 = 'racecar'
str2 = 'racecar'

str1 == str2[::-1]
Out[57]: True

这实际上只是检查是否str1是回文(即自身的反转)。

如果你真的想使用递归,你想使用切片:检查 if str1[0]== str2[-1],然后递归地调用你的函数str1[1:]and str2[:-1]

[::-1]语法是扩展切片语法,对字符串以及列表和其他序列都有效。

于 2013-11-02T20:31:29.007 回答
2

要反转字符串,请使用'this is a string'[::-1].

[::-1]是切片表示法,它表示包括从字符串开头到结尾的所有内容,但反过来做。 'abcdefghijk'[6:1:-2]输出'gec',因为它从第 6 个索引(从 0 开始)到但不包括第一个索引,以 2 的反向步骤。

阅读更多关于切片表示法:解释 Python 的切片表示法http ://docs.python.org/2.3/whatsnew/section-slices.html

def semordnilap(str1, str2):
    if str1 == str2[::-1]: return True
    else: return False

一种递归方式:

def semordnilap(str1, str2):
    if not (len(str1) or len(str2)): return True
    if not (len(str1) and len(str2)): return False
    if str1[0] != str2[-1]: return False
    return semordnilap(str1[1:], str2[:-1])

第一行检查两个字符串是否为空(0计算结果为False,任何其他数字为True)。len(str1)以整数形式返回长度。

然后它检查是否只有一个字符串为空,在这种情况下它们不相等。

然后它检查第一个字母是否与最后一个字母相同。

然后它对每个字符串重复该过程(减去 str1 的第一个字母并减去 str2 的最后一个字母)。它一直持续到达到基本案例之一。基本情况是返回的内容。所以它只会True在第一个字母等于每轮最后一个字母时返回,直到两个字符串同时用完字符。

于 2013-11-02T20:41:14.237 回答