Python文本文件。查找仅包含字符'abcdef'的字符串

时间:2015-07-04 07:11:08

标签: python text-files

我需要编写一个代码,显示只包含'abcdef'的所有字符串。然后我将每个单词中由这些字符表示的十六进制数加起来,并打印出具有最大值的单词。这就是我所拥有的。我是一个初学者,我只是尝试一些没有用的东西。

def text():
    words = open("words.txt",'r')
    wordstring = words.read()
    wordList = wordstring.split()
    return wordList
def findLetters(wordList):
    letterList = []
    letters = 'abcdef'
    for word in wordList:
        for letter in word:
            if letter in word not in letters:
                break
            else:
                letterList.append(word)
    return letterList


def final():
    book = text()
    fin = findLetters(book)
    print(fin) 
final()

示例:

字符串'褪色''眨眼''坏''公平''死' 代码只会识别包含'abcdef'的那些'褪色''坏'和'死'。然后使用十六进制(a = 10,b = 11,c = 12,d = 13,e = 14,f = 15),代码会将这些单词的值相加。所以'褪色'会是(15 + 10 + 13 + 14 + 13 = 65)。 '坏'将是(11 + 10 + 13 = 34)而'死'将是(13 + 14 + 10 + 13 = 50)。然后它将确定哪一个具有最大值,在这种情况下它的'褪色'值为65.因此输出将简单地“褪色”。

2 个答案:

答案 0 :(得分:1)

良好的开端,但让我们改变你的findLetters功能。

def findLetters(wordList):
    letterList = []
    letters = 'abcdef'
    for word in wordList: # good
        for letter in word: # good
            if letter in word not in letters: # nope, looks for True/False in letters
                break
            else:
                letterList.append(word) # nope, appends the word multiple times
    return letterList

所以让我们重新调整它如下。

def findLetters(wordlist):
    letterList = []
    letters = 'abcdef'
    for word in wordlist:
        if all(letter in letters for letter in word):
            letterList.append(word)
    return letterList

这会遍历列表中的每个字词,检查其all的{​​{1}}是letter是否为可接受的in。如果是,则将该单词添加到结果列表中。关键的区别在于,不是每次找到匹配的字符时都添加整个单词,因为如果算法具有正确的letters语句(如简单的if),它就会完成,它只会添加确保所有角色都是正确匹配后的单词。

如果我们想要,我们可以在这个函数中使用理解:

if letter in letters:

答案 1 :(得分:1)

使用re模块。

import re

def check_alpha(strr):

    try:
        r = re.compile("^[a-f]*$")
        return r.match(strr).group()
    except:
        pass

def get_hex_value(strr):

    hex_dict = {
            'a': 10,
            'b': 11,
            'c': 12,
            'd': 13,
            'e': 14,
            'f': 15
    }

    return sum([hex_dict[s] for s in strr])


blah = ['faded', 'blink', 'bad', 'fair', 'dead']

# Get all the matches.
matches = [x for x in map(check_alpha, blah) if x is not None]

# Get the maximum value.
max_value = max([get_hex_value(m) for m in matches])

# Get all the words whose hex value matches the max value,
# because you never know when you have more than one match.
max_value = [x for x in matches if get_hex_value(x) == max_value]

print max_value

结果:

['faded']
[Finished in 0.1s]

非常明确的代码,绝对可以改进,但我鼓励你研究它,因为你是一个初学者。要特别注意列表推导的语法,这样你就不必多次编写循环。