2017-11-04 10 views
0

基本上,代碼應該根據索引中的一個字母的數量打印出它認爲是不值得的字母。當我運行它時,它一直說stringlist沒有被定義。任何想法爲什麼?可以使用一些格式化的幫助。格式化和理解「Unjumbler」的過程

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)) 

回答

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)) 
+0

還沒有了解到這一點,超出了我的範圍。任何原因我得到一個錯誤? – Testarific

+0

'stringlist = getMessages()'是你得到一個錯誤的原因 –