for循环中的if语句打印两次

时间:2020-10-28 17:27:02

标签: python python-3.x

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函数中返回的语句不打印任何内容?

6 个答案:

答案 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”的两次重复是由于

  1. 方法内部的打印语句,位于if语句内部。

  2. 方法外部的print语句,即在其中打印返回值的print(toChars(“ Op2lk”))

答案 5 :(得分:0)

它打印了两次,因为您已经在函数中打印了字母,然后又返回了字母并再次在函数外部打印。