目前我已经做到了,所以程序可以计算给定消息中的字母频率,但是在" descending_order"函数它一直说LetterCountTuple没有被定义,所以它排序它,它不会打印出" new_letter_count"它不会反转" new_letter_count"并且它不会打印下降我认为我在函数中定义它并且在main中,我错过了什么?任何人都可以帮忙!我到目前为止的代码是:
def main():
message = input("please enter message")
letterCount = getLetterCount(message)
LetterCountTuple,new_letter_count,descending = descending_order(letterCount)
def getLetterCount(message):
letterCount = {'A': 0, 'B': 0, 'C': 0, 'D': 0, 'E': 0, 'F': 0, 'G': 0, 'H': 0, 'I': 0, 'J': 0, 'K': 0, 'L': 0, 'M': 0, 'N': 0, 'O': 0, 'P': 0, 'Q': 0, 'R': 0, 'S': 0, 'T': 0, 'U': 0, 'V': 0, 'W': 0, 'X': 0, 'Y': 0, 'Z': 0}
for letter in message.upper():
if letter in letterCount:
letterCount[letter] += 1
print(letterCount)
return letterCount
def descending_order(letterCount):
letterCountTuple = letterCount.items()
new_letter_Count = LetterCountTuple.sort
print(new_letter_Count)
descending = reversed(new_letter_Count)
print(descending)
return new_letter_Count, descending
main()
答案 0 :(得分:2)
你有多个问题,descending_order返回两个值,所以你不能解包三个,你也永远不会调用sort LetterCountTuple.sort
,你缺少parens LetterCountTuple.sort()
。
LetterCountTuple
在main descending_order
中定义,它应该是letterCountTuple。
您还需要new_letter_Count = sorted(letterCountTuple)
,目前您正在将new_letter_Count
分配给None
(如果您确实称之为),这是来自.sort
的返回值,因为它是一个现场操作:
def descending_order(letterCount):
letterCountTuple = letterCount.items()
# create actual list of sorted letterCountTuple
new_letter_Count = sorted(letterCountTuple)
# reverse the list
descending = new_letter_Count[::-1]
# return three elements to unpack in main
# LetterCountTuple,new_letter_count,descending = descending_order(letterCount)
return letterCountTuple ,new_letter_Count, descending
我使用new_letter_Count[::-1]
来反转列表,因为反向将返回一个listreverseiterator
对象,如果你想查看列表,你将不得不调用列表,因此它有点多余情况下。
在旁注中,您应该使用下划线和小写字母letter_count_tuple
,new_letter_count
等来命名变量。