import random
def gerador_senha_aleatoria (limite):
"""
Função responsável pela distribuição do limite de caracteres máximos em quatro (4) categorias e a concepção da senha aleatória
input: limite de caracteres máximos que a senha deve ter
output: senha aleatória para o usuário
"""
distribuicao = limite / 4
resto = limite % 4
numero_maiusculas = int (distribuicao)
numero_minusculas = int (distribuicao)
numero_numerais = int (distribuicao)
numero_caracteres_especiais = int (distribuicao)
if resto != 0:
lista_elementos = [numero_maiusculas, numero_minusculas, numero_numerais, numero_caracteres_especiais]
contador = 0
while resto != 0:
lista_elementos[contador] += 1
resto -= 1
contador = (contador + 1) % 4
senha = sorteador_elementos (lista_elementos[0], lista_elementos[1], lista_elementos[2], lista_elementos[3])
return senha
def sorteador_elementos (numero_maiusculas, numero_minusculas, numero_numerais, numero_caracteres_especiais):
"""
Essa função tem por objetivo sortear, entre os caracteres definidos pelo desenvolvedor, os elementos que irão compor a senha aleatória do usuário.
input: recebe o número de elementos que precisa ter de cada categoria. Exemplo: quatro (4) numerais, três (3) letras maiusculas, etc.output: retorna a senha aleatória"""
senha = [] # Fazer a senha virar uma lista para que o .shuffle funcione
banco_dados_letras_maiusculas = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
banco_dados_letras_minusculas = banco_dados_letras_maiusculas.lower()
banco_dados_numerais = "0123456789"
banco_dados_caracteres_especiais = "!@#$%¨&*()[]?ºª°/~^`+-""'.|"
# Dica do gabarito = No import do Random existe o método .choice() que escolhe, dentre o iterável passado de argumento, um elemento.
while numero_maiusculas != 0 or numero_minusculas != 0 or numero_numerais != 0 or numero_caracteres_especiais != 0:
if numero_maiusculas != 0:
letra = random.choice (banco_dados_letras_maiusculas)
senha.append (letra)
numero_maiusculas -= 1
if numero_minusculas != 0:
letra = random.choice (banco_dados_letras_minusculas)
senha.append (letra)
numero_minusculas -= 1
if numero_numerais != 0:
numero = random.choice (banco_dados_numerais)
senha.append (numero)
numero_numerais -= 1
if numero_caracteres_especiais != 0:
caracter = random.choice (banco_dados_caracteres_especiais)
senha.append (caracter)
numero_caracteres_especiais -= 1
random.shuffle (senha)
senha = ''.join (senha) # Usar o método .join() para quebrar a lista em uma string
return senha
def main ():
usuario_nome = input ("Digite seu nome: ").strip()
caracteres_limites = 14
usuario_senha = gerador_senha_aleatoria (caracteres_limites)
print ("\nUsuário: ", usuario_nome)
print ("Senha: ", usuario_senha)
main()
Nota de tristeza: eu demorei 2 horas nesse exercício por conta que o operador lógico para não sair do while enquanto gerava a senha era OR e não AND, e eu tinha colocado o segundo.... Isso que o Copilot checou e não avisou. Tive que ficar 30 minutos no debuger (aqeule insetinho do VS Code) do Python para ver esse problema... Tá resolvido, mas ainda assim foi tenso (´。_。`), pelo menos agora tá funcionando kkkkk, mas que foi cansativo, foi...