python - python列表理解不能正常工作
问题描述
我想编写一个方法,该方法将根据传递的参数从文件中返回一个单词。但是,如果没有符合论点的词,我什么都不返回。所以在我的档案中,最高的词有 97 分。但如果我通过了 98 分,则会显示有关索引的错误。我有这样的事情:
主文件
from option import Option
import argparse
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument( "--score", "-s", help="Find word for given score", type=int)
option = Option()
if args.score:
option.word_from_score(args.score)
选项.py
import random
class Option():
def __init__(self):
self.file = [line.rstrip('\n').upper() for line in open('dictionary.txt', "r")]
SCRABBLES_SCORES = [(1, "E A O I N R T L S U"), (2, "D G"), (3, "B C M P"),
(4, "F H V W Y"), (5, "K"), (8, "J X"), (10, "Q Z"), (11, "Ą Ć Ę Ł Ń Ó Ś Ź Ż")]
global LETTER_SCORES
LETTER_SCORES = {letter: score for score, letters in SCRABBLES_SCORES
for letter in letters.split()}
def word_from_score(self,score):
print(random.choices([word for word in self.file if sum([LETTER_SCORES[letter] for letter in word ]) == score]))
此方法返回单词,但不处理错误。所以我尝试了这个:
def word_from_score(self,score):
print(random.choices([(word if sum([LETTER_SCORES[letter] for letter in word ]) == score else "") for word in self.file]))
但在这种情况下,它会为我传递的每个参数返回 ""。这种方法的错误在哪里?
[编辑] 例如,我从命令行运行我的程序并且:
python main.py -f
返回 97,因为这是文件中某些单词的分数。因此,如果我运行其他方法:
pythom main.py -s 97
从文件中返回单词,它具有这个分数。它有效。但是如果我以 98 作为参数,它就不起作用,因为在文件中没有这个分数的词。现在我想处理这种情况,返回“”
解决方案
目前,您的列表压缩正在构建与分数匹配的单词列表,但其中还包括任何与分数不匹配的单词的空字符串。你想要这样的东西:
def word_from_score(self,score):
valid_words = [word for word in self.file if sum([LETTER_SCORES[letter] for letter in word ]) == score]
if len(valid_words) != 0:
print(random.choices(valid_words))
else:
print('')
推荐阅读
- node.js - Discord.js:为什么“awaitMessages”在事件中不起作用:“准备好”?
- r - 如何使用 ggpairs 获得 R^2?
- javascript - React 中三元运算符样式的 null 或 undefined
- c# - 随机 ConfigurationBuilder 行为
- apache-kafka - 运行多个 Kafka 控制台消费者的最佳方式?
- neovim - 如何将错误从 Neovim LSP 发送到 ALE
- mysql - MySQL从一个表中选择一个值,并根据第一个表中的值对另一个表的值求和
- angular - 如何避免多次 API 调用
- r - 在 R 中识别两个字符串中的模式
- java - 原子序列的监听器