Login function does not access the register, which has already been entered

Asked

Viewed 47 times

-4

Function: Log in and Register()

def Logar(pessoas):
    from Funções_pt.cores import vermelho
    usuário = str(input('Nome de usuário: ')).strip()
    senha = str(input('Digite sua senha: ')).strip()
    if usuário and senha in pessoas:
        print('Acesso Concedido!')
        pass
    else:
        while True:
            print(f'{vermelho("Acesso Negado!")}')
            usuário = str(input('Nome de usuário: ')).strip()
            senha = str(input('Digite sua senha: ')).strip()
            if usuário and senha in pessoas:
                print('Acesso Concedido!')
                break


def Cadastrar(grupo):
    from Funções_pt.cores import vermelho, amarelo
    nome = str(input('Nome: '))
    if nome.strip() == '':
        while True:
            print(f'{vermelho("ERRO! Por favor, digite sua nome corretamente")}')
            nome = str(input('Nome de usuário: '))
            if nome.strip() != '':
                break
    else:
        pass

    idade = str(input('Idade: '))
    if idade.isnumeric():
        int(idade)
    else:
        while True:
            print('\033[31mERRO! Por favor, digite sua idade corretamente!\033[m')
            idade = str(input('Idade: ')).strip()
            if idade.isnumeric():
                break

    Série = str(input('Série: '))
    if Série.isnumeric():
        int(Série)
    else:
        while True:
            print('\033[31mERRO! Por favor, digite sua série corretamente!\033[m')
            Série = input('Série: ').strip()
            if Série.isnumeric():
                break

    usuario = str(input('Usuário de acesso: ')).strip()
    print(f'{amarelo("ATENÇÃO! A SENHA SÓ PODERÁ SER COMPOSTA DE LETRAS E NÚMEROS, SEM SÍMBOLOS E ESPAÇOS.")}')
    senha = str(input('Senha: ')).strip()
    confirme = str(input('Confirme sua senha: ')).strip()
    while True:
        if senha != confirme:
            print('\033[31mErro de login:\033[m Senhas incorrespondentes!')
            confirme = input('Confirme sua senha: ')
            if confirme == senha:
                break
        else:
            break
    grupo.append((nome, idade, Série, usuario, senha, confirme))
    print('Usuário Cadastrado! Bem vindo ao serviços da School Calculator')

Then I put the program to work:

while True:
    grupos = list()
    sleep(2)
    Menu()
    opc = int(input('Qual sua opção: '))
    if opc == 1:
        Logar(grupos)
    elif opc == 2:
        Cadastrar(grupos)
    elif opc == 3:
        sair()
        break
    else:
        print('Opção inválida! Por favor escreva apenas as opções listadas')

But when I log in, even if I sign in, I can’t log in, I’ll be grateful if someone can help me

  • Hi, try to isolate the part of the code that checks if the user is registered, the error is there. Other than that, I suggest you improve the question in order to ask something very specific instead of asking someone to analyze your code and find the error.

  • Honestly, I won’t review all your code, but I recommend that you save the user data in dictionaries, to be accessible by keys. As soon as you register the user, write his data a file .json external. I recommend these studies: https://www.youtube.com/watch?v=p3cH8i0ON48 and https://www.youtube.com/watch?v=pHOoCzvfDHY&t=326s

  • If you don’t know what a dictionary is, read it this post and good studies!

  • @Pablo, thank you very much, I will review the code and organize it. And I’ll edit the question, sorry I’m new here at Stackoverflow, but I’ll put it clearly.

  • @Yoyo Thanks, I will put in dictionary, I still thought about deciding to put in lists, because...because I do not know, but I will readjust it and how much the question will make it clearer and objective. Thanks for the help and feedback

2 answers

1


I made some changes to the code proposed by @Lucasv75, I suggest you see the comments

from time import sleep

grupos = dict()
opções = ["1 - Logar","2 - Cadastrar","3 - Sair"]

def Logar(pessoas):
    usuário = input('Nome de usuário: ').strip()  #Retirei o str(input()) pois o input já é uma string por natureza """
    senha = input('Digite sua senha: ').strip()
    print("-=-"*14)

    if usuário not in pessoas:
        print("Usuário inválido")
        Logar(pessoas)
    
    elif senha != pessoas[usuário]["senha"]:
        print("Senha inválida!")
        Logar(pessoas)
    
    else:
        print('Acesso Concedido!')
    print("-=-"*14)

def Cadastrar(grupo):
    nome = input('Nome: ')
    #if nome.strip() == '':     # para que colocar um if se já temos essa condição dentro de um laço while? 
    while nome.strip() == '':              # aqui fica melhor que a condição esteja dentro do while para reduzir ifs 
        print(f'"ERRO! Por favor, digite sua nome corretamente")')
        nome = input('Nome de usuário: ')  # retirei mais um str(input()), como ja dito, é um exercício de futilidade 
    #if nome.strip() != '':
            #break
    #else:        # não há necessidade de colocar um else: pass, pois se acondição do if não é satisfeita ele naturalmente pula para a instrução seguinte
        #pass

    idade = input('Idade: ')
    if idade.isnumeric():
        int(idade)
    else:
        while True:
            print('\033[31mERRO! Por favor, digite sua idade corretamente!\033[m')
            idade = input('Idade: ').strip()
            if idade.isnumeric():
                int(idade) #esqueceu de adicionar esse passo
                break

    Série = input('Série: ')
    if Série.isnumeric():
        int(Série)
    else:
        while True:
            print('\033[31mERRO! Por favor, digite sua série corretamente!\033[m')
            Série = input('Série: ').strip()
            if Série.isnumeric():
                int(Série)  #esqueceu de adicionar esse passo de novo
                break

    usuario = input('Usuário de acesso: ').strip()
    print(f'("ATENÇÃO! A SENHA SÓ PODERÁ SER COMPOSTA DE LETRAS E NÚMEROS, SEM SÍMBOLOS E ESPAÇOS.")')
    senha = input('Senha: ').strip()
    confirme = input('Confirme sua senha: ').strip()
    while senha != confirme:
        #if senha != confirme:
        print('\033[31mErro de login:\033[m Suas senhas não correspondem!')
        confirme = input('Confirme sua senha: ')
#        if confirme == senha:
#            break
#       else:
#            break   
    grupo.update(
      {
      usuario:{
        "idade":idade,
        "Série":Série,
        "nome":nome,
        "senha":senha,
        }
      }
    )
    print('Usuário Cadastrado! Bem vindo aos serviços da School Calculator')
    print("-=-"*14)



def Menu(grupo):
    for opt in opções:
        print(opt)
    print("-=-"*14)
    opc = int(input('Qual sua opção: '))
    print("-=-"*14)
    if opc == 1:
        Logar(grupo)
    elif opc == 2:
        Cadastrar(grupo)
    elif opc == 3:
        return True
    else:
        print('Opção inválida! Por favor escreva apenas as opções listadas')
    Menu(grupo)
Menu(grupos)

Your code has several ifs unnecessary, requiring processing without it being necessary, I recommend to study better the links while because you don’t seem to know their potential well. I also leave the following recommendations:

  1. In the current program, if the user chooses the wrong option, such as 'register' when actually he wanted to 'log in', note that there is no way to return to the menu, it gets stuck until you register, add a return option
  2. When the user is setting their password, if the password confirmation is wrong, they are directed to change the variable confirme and not the variable senha. This is a problem because maybe he was wrong when filling the variable senha. In this case your program no longer allows it to change it. I suggest that when senha and confirme do not match, make the user fill both again
  3. Remember that a input() ALWAYS is saved as string, unless you instruct him to save as something else. What do you want say that by doing str(input()) you’re turning a string in a string, and that doesn’t make sense
  • 1

    Thank you for your patience and availability to reformat the code! I’m still learning to use if I don’t know 100%, I started programming to 5 months, it’s kind of new to me all this, but I want to get there and be a great programmer. I will review and study more deeply. Thank you very much for your support.

0

I corrected the error by replacing the list with a ICT, test there

from time import sleep

grupos = dict()
opções = ["1 - Logar","2 - Cadastrar","3 - Sair"]

def Logar(pessoas):
    usuário = str(input('Nome de usuário: ')).strip()
    senha = str(input('Digite sua senha: ')).strip()
    print("-=-"*14)

    if usuário not in pessoas:
        print("Usuário inválido")
        Logar(pessoas)
    
    elif senha != pessoas[usuário]["senha"]:
        print("Senha inválida!")
        Logar(pessoas)
    
    else:
        print('Acesso Concedido!')
    print("-=-"*14)

def Cadastrar(grupo):
    nome = str(input('Nome: '))
    if nome.strip() == '':
        while True:
            print(f'"ERRO! Por favor, digite sua nome corretamente")')
            nome = str(input('Nome de usuário: '))
            if nome.strip() != '':
                break
    else:
        pass

    idade = str(input('Idade: '))
    if idade.isnumeric():
        int(idade)
    else:
        while True:
            print('\033[31mERRO! Por favor, digite sua idade corretamente!\033[m')
            idade = str(input('Idade: ')).strip()
            if idade.isnumeric():
                break

    Série = str(input('Série: '))
    if Série.isnumeric():
        int(Série)
    else:
        while True:
            print('\033[31mERRO! Por favor, digite sua série corretamente!\033[m')
            Série = input('Série: ').strip()
            if Série.isnumeric():
                break

    usuario = str(input('Usuário de acesso: ')).strip()
    print(f'("ATENÇÃO! A SENHA SÓ PODERÁ SER COMPOSTA DE LETRAS E NÚMEROS, SEM SÍMBOLOS E ESPAÇOS.")')
    senha = str(input('Senha: ')).strip()
    confirme = str(input('Confirme sua senha: ')).strip()
    while True:
        if senha != confirme:
            print('\033[31mErro de login:\033[m Suas senhas não correspondem!')
            confirme = input('Confirme sua senha: ')
            if confirme == senha:
                break
        else:
            break
    grupo.update(
      {
      usuario:{
        "idade":idade,
        "Série":Série,
        "nome":nome,
        "senha":senha,
        }
      }
    )
    print('Usuário Cadastrado! Bem vindo aos serviços da School Calculator')
    print("-=-"*14)



def Menu(grupo):
    for opt in opções:
        print(opt)
    print("-=-"*14)
    opc = int(input('Qual sua opção: '))
    print("-=-"*14)
    if opc == 1:
        Logar(grupo)
    elif opc == 2:
        Cadastrar(grupo)
    elif opc == 3:
        return True
    else:
        print('Opção inválida! Por favor escreva apenas as opções listadas')
    Menu(grupo)
Menu(grupos)
  • Thank you very much Lucas. I’m learning yet and didn’t think Dict could have better result. Thanks for the help!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.