2013-03-24 21 views
1

在Python 3.2我試圖用字典來分配字母表中的每個字母值。模式是'a'= 1,'b'= 2,'c'= 3 ...'z'= 26。我有一個名爲words.txt的文件,在這個文件中有一長串單詞。單詞以大寫字母開頭,但是,我的值僅用於小寫字母。 無論如何,對於每個單詞,我必須指定一個值,其值相應於其字母值 ,當單詞轉換爲小寫字母時。 我也知道我是如何找出列表中有多少單詞的總數是137的整數倍? 我也很困惑如何讓python引用.txt文件。蟒蛇3.2使用字典分配字母數字值的每個字母和基於它們的字母值找到.txt文件中的字的總和

歡迎任何幫助!謝謝!

這是我的代碼至今:

d = {'a':1,'b':2,'c':3,'d':4,'e':5,'f':6,'g':7,'h':8,'i':9,'j':10,'k':11,'l':12,'m':13,'n':14,'o':15,'p':16,'q':17,'r':18,'s':19,'t':20,'u':21,'v':21,'w':23,'x':24,'y':25,'z':26} 

find = open("words.txt") 
[x.lower() for x in ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]] 
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 


def num_multiple(): 

    for line in find: 
    if line.find("word % 137 == 0") == -1: 
    return line 
    else: 
     word = line.strip() 

print(num_multiple) 
print(len(num_multiple)) 
+0

快速的方法是'd = dict(zip(string.ascii_lowercase,range(1,27)))' – jamylak 2013-03-24 05:29:42

+0

@jamylak這樣可以節省很多時間!但是,Python告訴我「名稱字符串未定義」。我應該替換一些東西嗎?謝謝!!! – user2172079 2013-03-24 05:50:57

+0

@jamylak這樣可以節省很多時間!但是,Python告訴我「名稱字符串未定義」。我應該替換一些東西嗎?謝謝!!! – user2172079 2013-03-24 05:59:33

回答

1

嗯,我在這裏看到了一些問題。首先,您使用find來查找文字字符串"word % 137 == 0"的結果,而不是計算結果。

下面是一些東西,將簡化代碼:

values_of_words = [] # all the values for words 

with open('words.txt') as the_file: 
    for word in the_file: 
     word = word.strip() # removes \n from the word 
     values = [] # we will store letter values for each word 
     for letter in word: 
      # convert each letter to lowercase 
      letter_lower = letter.lower() 

      # find the score and add it to values 
      values.append(d[letter_lower]) 

     # For each word, add up the values for each letter 
     # and store them in the list 
     values_of_words.append(sum(values)) 

count = 0 
for value in values_of_words: 
    if value % 137 == 0: 
     count += 1 

print("Number of words with values that are multiple of 137: {}".format(count)) 
+0

非常感謝! Python知道使用我的「d」嗎?我複製了我在原來的註釋中發佈的列表,然後Python不斷返回 values.append(d [letter_lower]) 我做錯了什麼?應該放在其他地方嗎? – user2172079 2013-03-24 05:53:26

+0

我剛剛更新了代碼,但請記住,如果您的文件有空行,這將不起作用。爲此,您必須自己弄清楚:)對於您的'd',請參閱@ jamylak對如何有效生成它的評論。 'd'需要在使用之前定義,所以在'values_of_words = []'行附近的某處,添加設置'd'的邏輯。 – 2013-03-24 06:20:20

+0

再次感謝!幸運的是沒有空行,它運行平穩。但我認爲我在最初的帖子中錯誤地描述了這個問題。 我真正想知道的是: 列表中有多少個單詞的總值是137的整數倍數? 我們將不得不首先計算所有的值,然後通過for value循環運行它們以計算您在上面發佈的數量。 所以我的(最後一個)Q會是 - 我如何讓Python總結每個單詞的值,然後確定它是否是多重的。 現在它給出了一個234202的答案,這對於像137這樣的隨機#很有用。 – user2172079 2013-03-24 06:31:55

0

你有使用ord()和CHR()函數來獲取字母的ASCII值考慮?

with open('words.txt')as word_file: 
    high_score = 0 
    for word in word_file: 
     word = word.strip() 
    value = 0 
    for letter in word: 
     value += ord(letter) % 97 
    if value % 137 == 0: 
     high_score += 1 
    print('Number of words with values that are a multiple of 137 {}'.format(high_score)) 

我知道這並不做任何事情不同的到以前的答案,但它可能是一個小的內存更少昂貴的,如果你的字典是非常大的。而且,能夠將字符轉換爲ASCII值並返回,可以使您執行一些非常酷的事情,特別是在密碼學中。

相關問題