Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Dúvida] if e random para escolher uma lista de palavras

Quis implementar o uso de parâmetros opcionais no jogo da forca. Criei um arquivo novo de palavras e tentei fazer com que o jogo gerasse um número aleatório entre a quantidade de arquivos e, de acordo com o número, lê-se um deles e a partir dele define-se a palavra secreta

def lista_palavras(nome_arquivo="palavras.txt"):
    with open(nome_arquivo) as forca_palavras:
        palavras = []
        for linha in forca_palavras:
            linha = linha.strip()
            palavras.append(linha)

    numero = random.randrange(0, len(palavras))
    palavra_secreta = palavras[numero].upper()
    return palavra_secreta
aleatorio = random(0, 2)

    if (aleatorio == 0):
        palavra_secreta = lista_palavras("linguagens.txt")
    else:
        palavra_secreta = lista_palavras()
    letras_acertadas = inicializa_letras_acertadas(palavra_secreta)

ele está me devolvendo este erro

Traceback (most recent call last):
  File "c:\Users\OLIWER\Documents\GitHub\estudo_python3\forca.py", line 166, in <module>
    jogar()
  File "c:\Users\OLIWER\Documents\GitHub\estudo_python3\forca.py", line 124, in jogar
    aleatorio = random(0, 2)
TypeError: 'module' object is not callable

O que eu posso fazer para que funcione da maneira que eu quero?

3 respostas
solução!
aleatorio = random.randrange(0, 2)

Bom dia Oliver,

Você só está fazendo a importação da biblioteca random e tentando utilizá-la como se ela fosse uma função.

Para resolver isso você pode fazer como o Luis comentou de importar a função randrange direto no local em que você pretende utilizá-lo, ou você pode mudar a maneira com que está importando a biblioteca random, para importar somente a função que você quer.

from random import randrange

Dessa maneira dá para adicionar valor a variável aleatorio da seguinte forma:

aleatorio = randrange(0, 2)

Considerações

Acredito que seja importante comentar a diferença entre as funções dessa biblioteca, porque dependendo da lógica que você esteja aplicando ao código uma função irá servir melhor do que outras.

  • random() Essa função não recebe valor e retorna um número entre 0 e 1, ou seja um float com várias casas decimais

      aleatorio = random()

    Exemplo de resultado: 0.46823980858317205

  • randint() Essa função recebe 2 valores, o primeiro sendo o menor número que poderá ser escolhido e o segundo sendo o maior, mas ambos serão considerados, então se você fizer isso:

      aleatorio = randint(0, 2)

    Os resultados poderão ser 0*, *1 ou 2

  • randrange() Essa função pode receber 3 valores, o primeiro sendo o menor número que poderá ser escolhido e o segundo sendo o maior (porém ele nunca será escolhido) e o terceiro sendo o intervalo entre eles (sendo que, o terceiro valor é opcional, não sendo necessário passá-lo para que o código funcione).

    Podendo ser aplicada de maneira semelhante ao comentado pelo Luis

      aleatorio = randrange(0, 2)

    Os resultados poderão ser 0** ou **1

    Mas pensando e outros exemplos, poderíamos gerar um número par aleatório entre 0 e 100:

      aleatorio = randrange(0, 100, 2)

    Neste caso o menor resultado poderá ser 0*, no entanto o maior poderá ser *98

Muito obrigado pela ajuda, meu erro foi por desatenção mesmo. Estava cansado, li várias vezes e não percebi que faltava o .randrange.