繁体   English   中英

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

[英]Using a for loop to count the number of total letters and the number of a specific letter\

对于学校项目,我必须编写一个函数,该函数可以计算字符串中字母的数量,但也可以计算特定字母的数量,但是,当它是指定字母时,似乎只会增加总字母数。 我不明白为什么它没有在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

这行是有问题的:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM