我正试图编写一个代码来计算字符串中的字母,并将它们作为键值对存储在一个单独的字典中,其中key是字母,value是相应字母的总数。
def count_letters(text):
result = {}
counter = 0
# Go through each letter in the text
for letter in text:
if letter.islower() or letter.isupper():
# Check if the letter needs to be counted or not
if letter not in result:
counter = 0
# Add or increment the value in the dictionary
counter += 1
result[letter.lower()] = counter
return result
print(count_letters("This is a sentence."))
# Should be {'t': 2, 'h': 1, 'i': 2, 's': 3, 'a': 1, 'e': 3, 'n': 2, 'c': 1}
有人能帮我找出代码中出了什么问题吗?因为我无法调试它。
我得到的输出如下:
{'t': 2, 'h': 1, 'i': 2, 's': 2, 'a': 1, 'e': 2, 'n': 4, 'c': 1}
def count_letters(text):
result = {}
counter = 0
# Go through each letter in the text
for letter in text:
if letter.islower() or letter.isupper():
# Check if the letter needs to be counted or not
if letter not in result:
counter = 0
# Add or increment the value in the dictionary
counter += 1
result[letter.lower()] = counter
return result
print(count_letters("This is a sentence."))
在您的代码中,问题出在计数器变量上。如果新的字母出现在结果dict中,它将重置其值,并且不存储以前字母的计数。
代码中的计数器是这样工作的:
- 循环字母计数器
- 1吨1
- 2小时1
- 3 i 1
- 4秒1
- 5 i 2
- 6秒2
- 7 a 1
- 8 s 2-此处与6行保持相同
- 9 e 1
- 10 n 1
- 11吨2
- 12 e 3
- 13 n 4
- 14 c 1
- 15 e 2
上述问题可以通过直接在字典中进行更改而不是使用任何其他变量来解决
def count_letters(text):
result = {}
# Go through each letter in the text
for letter in text:
if letter.islower() or letter.isupper():
# Check if the letter needs to be counted or not
if letter not in result:
result[letter.lower()] = 0
# Add or increment the value in the dictionary
result[letter.lower()] += 1
return result
print(count_letters("This is a sentence."))
这里是输出:{不:2,'h':1,'i':2,'s':3,'a':1、'e':3、'n':2、'c':1}
我希望它能消除你的疑虑
我只是在代码中添加了第二个条件,它现在应该可以工作了。
def count_letters(text):
result = {}
counter = 0
# Go through each letter in the text
for letter in text:
if letter.islower() or letter.isupper():
# Check if the letter needs to be counted or not
if letter not in result:
counter = 0
else:
counter=result[letter.lower()]
# Add or increment the value in the dictionary
counter += 1
result[letter.lower()] = counter
return result
print(count_letters("This is a sentence."))
# Should be {'t': 2, 'h': 1, 'i': 2, 's': 3, 'a': 1, 'e': 3, 'n': 2, 'c': 1}
现在输出:
{'t': 2, 'h': 1, 'i': 2, 's': 3, 'a': 1, 'e': 3, 'n': 2, 'c': 1}
添加条件:
else:
counter=result[letter.lower()]
编辑:因为你们在做字典时只使用小写字母,所以你们可能想把大写字母算作句子中的小写字母。如果你想你需要编辑代码到
if letter.lower() not in result:
否则,句子中间的大写字母将不会被计算在内。
可能建议使用collections
:中的Counter
import string
from collections import Counter
custom_string = "This is a sentence."
storage = Counter(custom_string.lower().translate(str.maketrans('', '', string.punctuation)))
其中.translate(str.maketrans('', '', string.punctuation))
去除标点符号。storage
变量输出:
Counter({'s': 3, ' ': 3, 'e': 3, 't': 2, 'i': 2, 'n': 2, 'h': 1, 'a': 1, 'c': 1})