【问题标题】:Using a for loop to count the number of total letters and the number of a specific letter\使用 for 循环计算总字母数和特定字母数\
【发布时间】:2018-11-02 19:19:28
【问题描述】:

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

【问题讨论】:

  • 为什么是count_letters = count_letters + 0?任何东西 + 0 = 任何东西。
  • 使用 REPL 或 print 语句查看 string.ascii_lowercase 包含的内容可能有助于回答为什么 i == letter 条件不起作用 ;) 再深入一点,你就会明白了:)

标签: python string python-3.x counter


【解决方案1】:

这行有问题:

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

【讨论】:

  • if 语句的顺序也存在问题。第一次检查i in letter 可能会捕获您要计数的特定字母。
猜你喜欢
  • 2013-03-10
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
  • 1970-01-01
  • 2016-12-20
  • 2021-03-21
相关资源
最近更新 更多