我需要编写一个代码,显示只包含'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.因此输出将简单地“褪色”。
答案 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]
非常明确的代码,绝对可以改进,但我鼓励你研究它,因为你是一个初学者。要特别注意列表推导的语法,这样你就不必多次编写循环。