2013-03-24 20 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值并返回,可以使您执行一些非常酷的事情,特别是在密码学中。

相关问题