Ao criar aplicação de forma não estruturada em Python, funções não são executadas

Olá pessoal, estou fazendo uma aplicação de uma biblioteca e estou com problemas ao chamar as funções criadas nas classes Biblioteca e Usuario. As funções cadastrarUsuario e listarUsuarios da classe Biblioteca e listagemUsuarios da classe Usuario foram implementadas de forma correta, pois quando executo aplicacao2.py o código funciona, no entanto o problema é na aplicacao.py.

Caso forem executar a aplicacao2.py, basta digitar nome e senha, já na aplicacao.py, o primeiro passo é digitar a opção 10 e depois digitar nome e senha. Depois digitar a opção 12.

O código simplesmente não funciona na aplicacao.py, sendo que as funções citadas anteriormente funcionam na aplicação2.py

Vou deixar os códigos abaixo: (estou utilizando o Python 3.5.0)

biblioteca.py

from usuarios import Usuario

class Biblioteca:

    def __init__(self):
        self.nome = 'system'
        self.senha = 'admin'
        #self.login = login
        self.logado = False
        self.usuarios = []

    def cadastrarUsuario(self, usuario):
        self.usuarios.append(usuario)

    def listarUsuarios(self):
        for u in self.usuarios:
            u.listagemUsuarios()

usuarios.py

class Usuario:
    def __init__(self, nome, senha):
        self.nome = nome
        self.senha = senha

    def getNomeUsuario(self):
        return self.nome

    def getSenhaUsuario(self):
        return self.senha

    def listagemUsuarios(self):
        print('Nome: %s' %self.nome)

aplicacao2.py

from biblioteca import Biblioteca
from usuarios import Usuario

biblioteca = Biblioteca()
nome = input('\nDigite o nome: ')
senha = input('Digite a senha: ')
usuario = Usuario(nome, senha)
biblioteca.cadastrarUsuario(usuario)
biblioteca.listarUsuarios()

aplicacao.py

from biblioteca import Biblioteca
from usuarios import Usuario

def aplicacao():
    print('\n**********MENU DE OPÇÕES**********')
    print(' 0 - Sair do sistema')
    print(' 1 - Listagem de livros')
    print(' 2 - Listagem de autores')
    print(' 3 - Busca de livro por título')
    print(' 4 - Busca de livro por autor')
    print(' 5 - Login')
    print(' 6 - Logoff')
    print(' 7 - Informações do usuário (logado)')
    print(' 8 - Empréstimo')
    print(' 9 - Devolução')
    print('10 - Cadastro de usuário')
    print('11 - Cadastro de livro')
    print('12 - Listagem de usuários')
    print('13 - Listagem de empréstimos')
    print('**********************************')

while True:
    aplicacao()
    biblioteca = Biblioteca()
    opcao = int(input('\nDigite a opção: '))
    if opcao == 10:
        nome = input('\nDigite o nome do usuário: ')
        senha = input('Digite a senha: ')
        usuario = Usuario(nome, senha)
        biblioteca.cadastrarUsuario(usuario)
    if opcao == 12:
        print('\n********LISTAGEM DE USUÁRIOS********')
        biblioteca.listarUsuarios()

O problema é que você está criando um novo objeto biblioteca a cada iteração do loop while.
Uma solução seria mover a variável biblioteca para acima do loop while.

biblioteca = Biblioteca()
while True:
    aplicacao()
    opcao = int(input('\nDigite a opção: '))
    if opcao == 10:
        nome = input('\nDigite o nome do usuário: ')
        senha = input('Digite a senha: ')
        usuario = Usuario(nome, senha)
        biblioteca.cadastrarUsuario(usuario)
    if opcao == 12:
        print('\n********LISTAGEM DE USUÁRIOS********')
        biblioteca.listarUsuarios()
1 curtida