2
respostas

Fiz um programa de lista de filmes com o que aprendi no curso, por favor avaliem e me deem dicas.

Arquivo filmes.py



# Programa para gestao lista de filmes última alteração: 23/03/21
from funcoes import adicionar_filme, editar_filme, excluir_filme, escolher_filme_pra_editar


def iniciar_app():

    # Lista Inicial de Filmes
    filme = ["Titanic", "Avatar", "Vingadores Guerra Infinita", "Top Gun"]

    # Gera Opcao programa
    while True:

        print("-" * 10)
        print(f"Lista de Filmes -> {filme}")
        print("-" * 10)

        opcao = int(input("->>> Selecione uma Opção: \n (1) Adicionar (2) Editar Filme (3) Excluir\n"))

        if opcao == 1:
            novo_nome = adicionar_filme(filme)

        elif opcao == 2:
            indice_nome_editar = escolher_filme_pra_editar(filme)
            editar_filme(filme, indice_nome_editar)

        elif opcao == 3:
            excluir_filme(filme)
        else:
            print("Opção não aceita!")


# Inicia o App

if __name__ == "__main__":
    iniciar_app()

arquivo funcoes.py


def adicionar_filme(lista):
    novo_nome = input("Nome do novo filme:")
    lista = lista.append(novo_nome)

def excluir_filme(lista):
    contador = 0
    for x in lista:
        print(f"{contador} -> {x}")
        contador +=1
    excluir = int(input(("Digite o Número de qual você quer excluir:")))
    lista = lista.pop(excluir)

def escolher_filme_pra_editar(lista):
    contador = 0
    for x in lista:
        print(f"{contador} -> {x}")
        contador +=1
    indice_nome_editar = int(input("Escolha o número do filme para editar:"))
    return indice_nome_editar

def editar_filme(lista, indice_nome_editar):
    novo_nome_editar = input("Atualize o nome")
    lista[indice_nome_editar] = novo_nome_editar
2 respostas

Arquivo principal

# Programa para gestao lista de filmes última alteração: 29/03/21
#from funcoes import adicionar_filme, editar_filme, excluir_filme, escolher_filme_pra_editar
#como você já está importando todas as funções do arquivos funcoes.py, não há necessidade de especificar quais você irá importar.

import funcoes 

def iniciar_app():

    # Lista Inicial de Filmes   
    lista_filmes = [] 
    lista_filmes = funcoes.ler_arquivo_filmes()
    #Modifiquei o nome da váriavel de filmes para lista_filmes para ficar mais evidente que ela é a lista que contem todos os filmes registrados

    # Gera Opcao programa
    while True:

        print("-" * 10)
        print(f"Lista de Filmes -> {lista_filmes}")
        print("-" * 10)

        opcao = int(input("->>> Selecione uma Opção: \n (1) Adicionar (2) Editar Filme (3) Excluir (4) Sair\n"))

        if opcao == 1:
            novo_nome = funcoes.adicionar_filme(lista_filmes)

        elif opcao == 2:
            indice_nome_editar = funcoes.escolher_filme_pra_editar(lista_filmes)
            funcoes.editar_filme(lista_filmes, indice_nome_editar)

        elif opcao == 3:
            funcoes.excluir_filme(lista_filmes)

        elif opcao == 4:
            break
        else:
            print("Opção não aceita!")


# Inicia o App

if __name__ == "__main__":
    iniciar_app()

Arquivo de Funções

def adicionar_filme(lista):
    novo_nome = input("Nome do novo filme:")
    lista.append(novo_nome)    
    escrever_arquivo_filmes(lista)

def excluir_filme(lista):

    while(True):
        contador = 0
        for x in lista:
            print(f"{contador} -> {x}")
            contador +=1

        excluir = int(input(("Digite o Número de qual você quer excluir: ")))

        if(excluir > contador - 1 or excluir < 0):
           print("O valor inserido não corresponde a nenhum filme! \n Tente novamente...")
           continue
        else:
            lista.pop(excluir)
            escrever_arquivo_filmes(lista)
            break



def escolher_filme_pra_editar(lista):
    while(True):
        contador = 0
        for x in lista:
            print(f"{contador} -> {x}")
            contador +=1

        indice_nome_editar = int(input("Escolha o número do filme para editar: "))
        if(indice_nome_editar > contador - 1 or indice_nome_editar < 0):
            print("O valor inserido não corresponde a nenhum filme! \n Tente novamente...")
            continue
        else:
            return indice_nome_editar



def editar_filme(lista, indice_nome_editar):
    novo_nome_editar = input("Atualize o nome: ")
    lista[indice_nome_editar] = novo_nome_editar
    escrever_arquivo_filmes(lista)

def ler_arquivo_filmes():

    #nome do arquivo que irá conter os filmes
    nome_arquivo = "filmes.txt"
    filmes = []

    #Abre o arquivo e lê
    with open(nome_arquivo,"r") as arquivo:
       for linha in arquivo:
            linha = linha.strip()
            filmes.append(linha)

    return(filmes)

def escrever_arquivo_filmes(lista):

    #Nome do arquivo que irá conter os filmes
    nome_arquivo = "filmes.txt"

    #Limpa o arquivo
    arquivo = open(nome_arquivo, "w")
    arquivo.close()    

    #Escreve a lista modificada no arquivo somente se a lista não for vazia, para não haver erros.
    if(lista):
        with open(nome_arquivo, "w") as arquivos:
            for nome_filme in lista:
                arquivos.write(nome_filme + '\n')   

No comentário acima eu deixei o código modificado para você utilizar e analisar.

A modificação principal foi utilizar um arquivo .txt para guardar os filmes que você inseriu no programa, assim evitando que ao fechar ele você perca oque foi escrito.

Fiz algumas modificações, como por exemplo

def adicionar_filme(lista):
    novo_nome = input("Nome do novo filme:")
    lista = lista.append(novo_nome)

#Para 
def adicionar_filme(lista):
    novo_nome = input("Nome do novo filme:")
    lista.append(novo_nome)

O método append modifica a lista em que ele esta sendo aplicado, sendo assim não é necessário atribuir o valor da lista ao retorno do método append. O mesmo vale para o metodo .pop().

Dentro do for você poderia usar a função enumerate() para contabilizar as iterações, não achei necessário modificar pois estava funcionando bem utilizando uma váriavel para contar, mas caso você quisesse usar iria ficar da seguinte forma.

for index , x in enumerate(lista):
            print(f"{index} -> {x}")        

A estrutura fica da seguinte forma: for (variável que ira receber o retorno do método enumerate), (variável que ira receber a iteração sobre o objeto) in enumerate(objeto a ser iterado).

Também fiz outras modificações, mas deixarei você testar e observar o código funcionando se não o post ficará muito extenso.

Qualquer duvida só responder aqui mesmo.