1

Python 3.2では、辞書を使用してアルファベットの各文字に値を割り当てようとしています。パターンは「a」=1、「b」=2、「c」=3…「z」=26 です。私はwords.txtというファイルを持っていて、このファイルには単語の長いリストがあります。単語は大文字で始まりますが、私の値は小文字に対してのみ定義されています。とにかく、各単語には、単語が小文字に変換されるときに、その文字の値の合計に対応する値を割り当てる必要があります。また、リスト内の合計値が 137 の整数倍である単語の数を調べる方法も知っていますか? また、python で .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))
4

2 に答える 2

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))
于 2013-03-24T05:34:02.457 に答える
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 値に変換したり、その逆に変換したりできるため、特に暗号化において、いくつかの非常に優れたことが可能になります。

于 2013-03-24T08:54:18.243 に答える