首先,这个 IS 作业,所以我不期待任何直接的答案。我需要取一个由函数(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)
答案 0 :(得分:3)
给定两个字符串str1
和str2
,比较一个是否等于另一个字符串的最简单方法是使用切片:
str1 = 'racecar'
str2 = 'racecar'
str1 == str2[::-1]
Out[57]: True
这实际上只是检查str1
是否是回文(即与其相反)。
如果确实想要使用递归,那么 也希望使用切片:检查str1[0]
是否= str2[-1]
,然后以str1[1:]
和str2[:-1]
递归调用您的函数。
[::-1]
语法为extended slicing语法,对字符串以及列表和其他序列有效。
答案 1 :(得分:2)
要反转字符串,请使用'this is a string'[::-1]
。
[::-1]
切片表示法是否包含从字符串的开头到结尾的所有内容,但反过来执行。
'abcdefghijk'[6:1:-2]
输出'gec'
,因为它从第6个索引(从0开始)到第1个索引,但不包括第一个索引,反向步长为2.
详细了解切片表示法:Explain Python's slice notation,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
,直到两个字符串同时用完字符为止。