我正在尝试使用python制作频率分析程序,但我遇到了问题

时间:2015-04-17 10:52:34

标签: python frequency-analysis

目前我已经做到了,所以程序可以计算给定消息中的字母频率,但是在" 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()

1 个答案:

答案 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_tuplenew_letter_count等来命名变量。