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

Python text file. Finding strings that contain only characters 'abcdef'

我需要编写一个代码来显示仅包含 '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()

示例:

字符串'faded''blink''bad''fair''dead' 该代码只会识别那些包含 'abcdef' 的代码,因此 'faded' 'bad' 和 'dead'。然后使用十六进制(a=10、b=11、c=12、d=13、e=14、f=15),代码会将这些单词的值相加。所以 'faded' 将是 (15+10+13+14+13 = 65)。 'bad' 将是 (11+10+13 = 34) 而 'dead' 将是 (13+14+10+13 = 50)。然后它将确定哪个具有最大值,在本例中它是 'faded',值为 65。因此输出将只是 'faded'.

好的开始,但让我们更改您的 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

这会遍历列表中的每个单词,检查其 letter 中的 all 是否是 in 可接受的 letters。如果是,它会将单词添加到结果列表中。关键区别在于,它不会像算法在有正确的 if 语句(如简单的 if letter in letters:)时所做的那样,每次找到匹配字符时都添加整个单词,它只会添加确保所有字符都正确匹配后的单词。

如果需要,我们可以在此函数中使用理解:

def findLetters(wordlist):
    return [word for word in wordlist if all(letter in 'abcdef' for letter in word)]

使用 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]

非常明确的代码,肯定可以改进,但我鼓励你学习它,因为你是初学者。特别注意列表理解的语法,这样你就不必多次编写循环。