[英]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_lowercase
为letter
分配了一个包含所有小写字母的字符串。 但是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.