2015-04-17 101 views
1

目前,我已经做到这一点,程序可以计算给定的消息中的字母频率,但在“降序”功能它一直说LetterCountTuple没有被定义,所以它排序,它不会打印出“new_letter_count”,它不会反转“new_letter_count”,它不会打印出降序我以为我定义它在函数中,并在主,上午我错过了什么?任何人都可以帮忙!我到目前为止的代码是这样的:我想做一个使用python的频谱分析程序,但我有问题

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

非常感谢球员命名变量! – eliot

回答

2

您有多个问题,所以你不会可以解压3 descending_order返回两个值,你也永远不会调用排序LetterCountTuple.sort,你缺少括号LetterCountTuple.sort()

LetterCountTuple定义主要不在descending_order,它应该是letterCountTuple。

您还需要new_letter_Count = sorted(letterCountTuple),您目前正在分配new_letter_CountNone(如果你真的把它),这是从.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等。

相关问题