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]
非常明确的代码,肯定可以改进,但我鼓励你学习它,因为你是初学者。特别注意列表理解的语法,这样你就不必多次编写循环。
我需要编写一个代码来显示仅包含 '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]
非常明确的代码,肯定可以改进,但我鼓励你学习它,因为你是初学者。特别注意列表理解的语法,这样你就不必多次编写循环。