1
resposta

Criação dinâmica de array

Resolvi ir um pouco além do que vimos até essa aula e fiz com que a palavra a ser acertada fosse obtida aleatoriamente e um chute baseado no tamanho dessa palavra fosse estipulado. Também criei uma lógica para o laço ser interrompido.

Entretanto, o vetor letras_acertadas iniciei vazio e, de acordo com a palavra sorteada, fossem inseridos os caracteres n "_" em tal vetor. Vi que isso pode ser feito através do método apende();

Gostaria de saber da forma como fiz seria uma boa prática. Em outras linguagens como Java, você indica o tamanho do vetor, e não é possível alterar o seu tamanho. Em Python, vi que isso é possível. Isso não gera um certo overhead na execução do código?

Segue o código:

import random as ran

def jogar():

    frutas = ["uva","caqui","jambolao"]
    indice = ran.randrange(len(frutas))

    palavra_secreta = frutas[indice]
    numero_chutes = len(palavra_secreta)

    print("você tem {} chutes".format(numero_chutes))

    letras_acertadas = []

    for letra in palavra_secreta:
        letras_acertadas.append("_")

    enforcou = False
    acertou = False

    while(not enforcou and not acertou):

        if(numero_chutes == 0):
            enforcou = True
            print("você se enforcou!")
        else:
            chute = input("Qual letra? ")
            chute = chute.strip()
            index = 0
            for letra in palavra_secreta:
                if(chute.upper() == letra.upper()):
                    letras_acertadas[index] = letra
                index = index + 1

            print(letras_acertadas)   

            palavra_chute = "" 

            for letra in letras_acertadas: 
                palavra_chute += letra 

            if(palavra_chute == palavra_secreta):
                acertou = True
                print("você acertou!")

            numero_chutes -= 1  

    print("Fim do jogo")

if(__name__ == "__main__"):
    jogar()

Obrigado.

Jhonatan

1 resposta

Olá Jhonatan, tudo bem com você?

Peço desculpas pela demora em lhe responder.

Por padrão, o Python internamente consegue fazer essa alocação dinâmica do lista (array) sem gerar uma sobrecarga na execução, isso é uma característica da linguagem.

Toda lista que definimos no Python é dinâmica, não é necessário indicar o seu tamanho. Por debaixo dos panos o Python utiliza algumas estratégias para que essa sobrecarga não aconteça, como pré-alocar a memória e também, utilizar o coletor de lixo (garbage collector) para retirar aquilo que não está sendo utilizado no código.

Talvez você se pergunte:

  • E quantos valores essa lista dinâmica consegue armazenar?

Bem, isso pode variar de sistema para sistema, pois depende da quantidade de memória que o seu computador suporta, mas uma forma de analisar quantos elementos uma lista pode ter, é utilizar a funçãosys.maxsize:

import sys
print(sys.maxsize)

Caso queira testar na prática quantos valores a lista consegue armazenar, basta fazer um loop infinito que adiciona um elemento qualquer a lista e quando o código quebrar é porque chegamos ao limite de armazenamento:

contador = 0
lista = []

while True:
    lista.append(0)
    contador += 1
    print(contador)

Caso queira saber mais sobre esse assunto, recomendo as seguintes leituras:

Caso tenha dificuldades com o idioma, recomendo o uso do tradutor do navegador.

Coloco-me à disposição em caso de dúvidas.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!