Как выбрать случайное слово из списка в файле со специальной c длиной в python - PullRequest
0 голосов
/ 13 июля 2020

Я новичок в python, на самом деле, я даже не программист, я доктор :), и в качестве практики я решил написать свою версию палача. После некоторого исследования я не смог найти способ использовать модуль "random" для возврата слова с длиной especifi c. В качестве решения я написал процедуру, в которой он пробует случайное слово, пока не найдет нужную длину. Это сработало для игры, но я уверен, что это плохое решение и, конечно, влияет на производительность. Итак, может ли кто-нибудь дать мне лучшее решение? Спасибо.

Вот мой код:

import random

def get_palavra():
    palavras_testadas = 0
    num_letras = int(input("Choose the number of letters: "))
    while True:
        try:
            palavra = random.choice(open("wordlist.txt").read().split())
            escolhida = palavra
            teste = len(list(palavra))
            if teste == num_letras:
                return escolhida
            else:
                palavras_testadas += 1
            if palavras_testadas == 100:  # in large wordlists this number must be higher
                print("Unfortunatly theres is no words with {} letters...".format(num_letras))
                break
            else:
                continue
        except ValueError:
            pass

forca = get_palavra()
print(forca)

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Вот рабочий пример:

def random_word(num_letras):
    all_words = []
    with open('wordlist.txt') as file:
        lines = [ line for line in file.read().split('\n') if line ] 
        for line in lines:
            all_words += [word for word in line.split() if word]
    words = [ word for word in all_words if len(word) == num_letras ]
    if words:
        return random.choice(words)
0 голосов
/ 13 июля 2020

Вы можете

  1. прочитать файл один раз и сохранить содержимое
  2. удалить новую строку \n символ из каждой строки, потому что он считается символом
  3. чтобы избежать создания choice в строках с неподходящей длиной, сначала отфильтруйте, чтобы сохранить возможные
  4. , если в списке good_len_lines нет элемента, который вы знаете, что можете остановить, не нужно делать сотня кирок
  5. иначе подберите слово из числа good_length
def get_palavra():
    with open("wordlist.txt") as fic:                                      # 1.
        lines = [line.rstrip() for line in fic.readlines()]                # 2.
    num_letras = int(input("Choose the number of letters: "))
    good_len_lines = [line for line in lines if len(line) == num_letras]   # 3.
    if not good_len_lines:                                                 # 4.
        print("Unfortunatly theres is no words with {} letters...".format(num_letras))
        return None
    return random.choice(good_len_lines)                                   # 5.
...