首页 > 解决方案 > 使用 for 循环计算总字母数和特定字母数\

问题描述

对于一个学校项目,我必须编写一个函数来计算字符串中的字母数量,还要计算特定字母的数量,但是当它是指定的字母时,它似乎只会增加总字母数。我不明白为什么它没有在 3.7 中将 ascii_lowercase 注册为小写字母,除非我严重误解了某些东西。

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

标签: pythonstringpython-3.xcounter

解决方案


这条线是有问题的:

if i == letter:

您已通过 分配给letter包含所有小写字母的字符串string.ascii_lowercase。但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

推荐阅读