繁体   English   中英

python列表理解无法正常工作

[英]python list comprehension does not work correctly

我想编写一个方法,它会根据传递的参数从文件中返回一个单词。 但是,如果没有符合论点的词,我不想返回任何内容。 所以在我的档案中,最高的词有 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('')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM