使用递归计算 python 中的大小写字母

count upper and lowercase letters in python using recursion

我需要有关此 python 功能的帮助。 一个递归函数 count_upper_lower() 以非空字符串作为参数,returns 是一个元组,其中包含字符串中大写字母的数量和小写字母的数量(按此顺序) . 例如

print (count_upper_lower(’Town Hall University’)) 

会return

(3, 15)

这是我目前所拥有的

def count_upper_lower(word):
    upper = 0
    lower = 0
    if word == "":
        upper = 0
        lower = 0
        return upper, lower
    elif word[0].isupper():
        upper = 1 + count_upper_lower(word[1:])
        return upper , lower


    elif word[0].islower():
        lower = 1 + count_upper_lower(word[1:])
        return upper , lower

    else:
        upper = 0 + count_upper_lower(word[1:])
        lower = 0 + count_upper_lower(word[1:])
        return upper, lower

我收到以下错误:

TypeError: unsupported operand type(s) for +: 'int' and 'tuple'

我会使用循环和 ascii。在 ascii 中 table 65 到 91 是大写,97 到 123 是小写。

def count_upper_lower(word):
    upper = 0
    lower = 0
    for letter in word: #runs through all the letter if empty nothing happens
       if 65 <= ord(letter) <= 90:
           upper += 1
       elif 97 <= ord(letter) <= 122:
           lower += 1
    return upper,lower

这个也是可以的

def count_upper_lower(word):
    upper = 0
    lower = 0
    for letter in word: #runs through all the letter if empty nothing happens
       if letter.isupper():
           upper += 1
       elif letter.islower():
           lower += 1
    return upper,lower

在您的 else 块中,您试图将 count_upper_lower() 的返回元组添加到一个数字。

class myCounter():
    def __init__(self):
        self.lower = 0
        self.upper = 0

    def count(self, s):
        if not s:
            return (self.upper, self.lower)

        firstCharacter = s[0]

        if firstCharacter.islower():
            self.lower += 1
        elif firstCharacter.isupper():
            self.upper += 1
        else:
            pass #do nothing !

        return self.count(s[1:])


c = myCounter()
print(c.count("Town Hall University"))
>>> (3, 15)

使用 tuple 时出现问题,因为它是一个不可变的数据结构。使用 list 代替。

def count_letters(phrase):
    if phrase:
        letter = phrase[0]
        result = count_letters(phrase[1:])
        if letter.isupper():
            result[0] += 1
        elif letter.islower():
            result[1] += 1
        return result
    else:
        return [0, 0]


>>> count_letters("LaLaa")
[2, 3]

如果你想用两行代码来完成:

lst = [1 if letter.islower() else 0 for letter in word if letter.islower() or letter.isupper()]
print (lst.count(0),lst.count(1))

如前所述,您正试图将整数添加到元组中,这就是您收到错误消息的原因。请考虑以下示例:

def count_upper_lower(word):
    if not word:
        return 0, 0
    else:
        upper, lower = count_upper_lower(word[1:])
        if word[0].isupper():
            return upper+1, lower
        elif word[0].islower():
            return upper, lower+1
        else:
            # make sure that this is what you want
            return upper, lower

这里,函数递归调用自身,直到字符串用完。 else case 捕获字符既不是大写字符也不是小写字符(例如数字)的情况,在这种情况下,计数器都不会增加。