使用for循环计算总字母数和特定字母数\

2024-04-18 04:40:03 发布

您现在位置:Python中文网/ 问答频道 /正文

对于一个学校项目,我必须写一个函数来计算一个字符串中的字母数,但也要计算一个特定字母的数目,然而它似乎只会增加指定字母的总字母数。我不明白为什么它没有注册ascii\u小写字母作为3.7中的小写字母,除非我完全误解了什么。你知道吗

def analyze_string(quote, search_letter):
    count_letters = 0
    count_occurance = 0
    phrase = quote.lower()
    letter = string.ascii_lowercase
    length = len(phrase)
    for i in phrase:
        if i == letter:
            count_letters = count_letters + 1
        elif i == search_letter:
            count_letters = count_letters + 1
            count_occurance = count_occurance + 1
        else:
            count_letters = count_letters + 0

    return count_letters, count_occurance

Tags: 项目函数字符串searchstringcount字母ascii
1条回答
网友
1楼 · 发布于 2024-04-18 04:40:03

这条线有问题:

if i == letter:

您已经通过string.ascii_lowercaseletter分配了一个包含所有小写字母的字符串。但是i只是一个字母。您可以改为使用:

if i in letter:
    # ...

检查字符串的成员身份需要O(n)时间。您可能希望使用set通过转换将此值提前减少到O(1):

letter = set(string.ascii_lowercase)

然后需要反转if语句的顺序,以便优先检查search_letter。否则,如果search_letter存在于letter,则第二个条件将永远不会满足。你知道吗

for i in phrase:
    if i == search_letter:
        count_letters = count_letters + 1
        count_occurance = count_occurance + 1
    elif i in letter:
        count_letters = count_letters + 1

注意以下行是多余的,您可以安全地删除它们:

else:
    count_letters = count_letters + 0

相关问题 更多 >