格式化和理解“Unjumbler”的过程

时间:2017-11-04 01:20:58

标签: python python-3.x

基本上,代码应根据索引中一个字母的数量打印出它认为是无字母的字母。当我运行它时,它一直说没有定义stringlist。知道为什么吗?也可以使用一些格式化帮助。

def getMessages():
stringlist=[]
stringinput=""
while stringinput!="DONE":
    stringinput=input("Type each string. When you are finished, type DONE. ")
    if stringinput=="DONE":
        return stringlist
    else:
        stringlist.append(stringinput)

def countFrequencies(stringlist, indexval):
letterdict={"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 i in stringlist:
    counter=i[indexval]
    letterdict[counter]+=1
return letterdict

def mostCommonLetter(letterdict):
ungarble=""
highest=-1
for i in letterdict.keys():
    if letterdict[i]>highest:
        ungarble=i
        highest=letterdict[i]
return ungarble

getMessages()
countFrequencies(stringlist, indexval)
print("Recovered message: ", mostCommonLetter(letterdict)) 

1 个答案:

答案 0 :(得分:0)

您的缩进不正确。

您可以使用Counter来汇总每行中字母的频率。

from collections import Counter

def getMessages():
    stringlist=[]
    stringinput=""
    while stringinput!="DONE":
        stringinput=input("Type each string. When you are finished, type DONE. ")
        if stringinput=="DONE":
            return stringlist
        else:
            stringlist.append(stringinput)

def countFrequencies(stringlist):
    frequencies = Counter()
    for line in stringlist:
        frequencies.update(line)
    return frequencies

def mostCommonLetter(frequencies):
    return max(frequencies)

stringlist = getMessages()
frequencies = countFrequencies(stringlist)
print("Recovered message: ", mostCommonLetter(frequencies))