def toChars(s):
s = s.lower()
letters = ""
for c in s:
if c in 'abcdefghijklmnopqrstuvwxyz':
letters = letters + c
print(letters)
return letters
print(toChars("Op2lk"))
o
op
opl
oplk
oplk
此函数将所有字母转换为小写并删除所有非字母。我添加了打印功能,以查看此代码的工作原理。如您所见,它两次打印“ oplk”。为什么会这样?
问题的第二部分,请忽略第一部分。
def isPalindrome(s):
"""Assumes s is a str
Returns True if the letters in s form a palindrome;
False otherwise. Non-letters and capitalization are ignored."""
def toChars(s):
s = s.lower()
letters = ''
for c in s:
if c in 'abcdefghijklmnopqrstuvwxyz':
letters = letters + c
return letters
def isPal(s):
print (' isPal called with', s)
if len(s) <= 1:
print (' About to return True from base case')
return True
else:
answer = s[0] == s[-1] and isPal(s[1:-1])
print(' About to return', answer, 'for', s)
return answer
return isPal(toChars(s))
isPalindrome("Op2lk")
isPalindrome("Oppo")
输出
isPal called with oplk
About to return False for oplk
isPal called with oppo
isPal called with pp
isPal called with
About to return True from base case
About to return True for pp
About to return True for oppo
为什么在isPal函数中返回的语句不打印任何内容?
答案 0 :(得分:1)
您是否考虑过使用“ stringtes” .lower()?
此外,您已经打印了输出和结果,只需删除函数内部的打印即可:
def toChars(s):
s = s.lower()
letters = ""
for c in s:
if c in 'abcdefghijklmnopqrstuvwxyz':
letters = letters + c
return letters
print(toChars("Op2lk"))
答案 1 :(得分:1)
在您的代码中,您使用print(toChars("Op2lk"))
,第二个oplk
是该代码的输出
如果您需要一种解决方案,以防万一
def toChars(s):
return ''.join(list(filter(lambda x : ord(x) in range(ord('a'), ord('z')+1), s.lower())))
print(toChars("Op2lk"))
答案 2 :(得分:0)
因为您在print
之后使用return。
for
子句结束时,它返回letters
变量。因此它将两次返回已完成的语句。
答案 3 :(得分:0)
这是因为它在循环中正常打印,然后打印返回的字母。
答案 4 :(得分:0)
if
循环中的for
语句不会打印两次。 “ oplk”的两次重复是由于
方法内部的打印语句,位于if语句内部。
方法外部的print语句,即在其中打印返回值的print(toChars(“ Op2lk”))
答案 5 :(得分:0)
它打印了两次,因为您已经在函数中打印了字母,然后又返回了字母并再次在函数外部打印。