Yana Posted July 21, 2012 Report Share Posted July 21, 2012 (edited) Boas, fiz mais um pequeno script em python, nomeadamente um gerador de senhas aleatórias, deixo aqui o código e gostava de opiniões sobre como melhora-lo. import random char = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" num_caract = int(input("Número de caracteres: ")) def password(): if (num_caract < 0): return "Erro: número negativo" elif (num_caract == 0): return "Erro: Tem que ter pelo menos 1 caracter." else: passwd = "" while len(passwd) != num_caract: passwd = passwd + random.choice(char) if len(passwd) == num_caract: return "Password: %s" % passwd print password() Edited July 21, 2012 by djthyrax GeSHi Link to comment Share on other sites More sharing options...
pmg Posted July 21, 2012 Report Share Posted July 21, 2012 O ultimo if é redundante: podes fazer o return logo a seguir ao while. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to comment Share on other sites More sharing options...
Yana Posted July 21, 2012 Author Report Share Posted July 21, 2012 O ultimo if é redundante: podes fazer o return logo a seguir ao while. Ok obrigado 🙂 Link to comment Share on other sites More sharing options...
thoga31 Posted July 21, 2012 Report Share Posted July 21, 2012 Outra ideia: passa por parâmetro o número de caracteres: def password(num_caract) Assim, sempre que precisares de chamar este método, fazes: password(int(input("Número de caracteres? "))) Quando um método depende de um valor deste género, deverá ser uma variável local (passada por parâmetro) e não uma global. Assim é utilizável em qualquer script. 😉 Knowledge is free! Link to comment Share on other sites More sharing options...
Yana Posted July 21, 2012 Author Report Share Posted July 21, 2012 (edited) Outra ideia: passa por parâmetro o número de caracteres: def password(num_caract) Assim, sempre que precisares de chamar este método, fazes: password(int(input("Número de caracteres? "))) Quando um método depende de um valor deste género, deverá ser uma variável local (passada por parâmetro) e não uma global. Assim é utilizável em qualquer script. 😉 Ok muito obrigado 👍 Edited July 21, 2012 by Yana Link to comment Share on other sites More sharing options...
djthyrax Posted July 22, 2012 Report Share Posted July 22, 2012 Usem raw_input e não input, podem ver na documentação o porquê. Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
thoga31 Posted July 23, 2012 Report Share Posted July 23, 2012 Usem raw_input e não input, podem ver na documentação o porquê. No Python 3 não consigo utilizar o raw_input porque, segundo o erro, não está declarado. Deve estar numa lib qualquer que eu não sei qual é. O mesmo acontece com o reduce que no Python 3 tem de ser importado da lib functools. Consegues-me indicar a que lib posso ir buscar o raw_input, ou os métodos de input da versão 3 mudaram? Knowledge is free! Link to comment Share on other sites More sharing options...
Yana Posted July 23, 2012 Author Report Share Posted July 23, 2012 (edited) No Python 3 não consigo utilizar o raw_input porque, segundo o erro, não está declarado. Deve estar numa lib qualquer que eu não sei qual é. O mesmo acontece com o reduce que no Python 3 tem de ser importado da lib functools. Consegues-me indicar a que lib posso ir buscar o raw_input, ou os métodos de input da versão 3 mudaram? Yah, mudou fica input(). Edited July 23, 2012 by Yana Link to comment Share on other sites More sharing options...
djthyrax Posted July 23, 2012 Report Share Posted July 23, 2012 Estava a pensar no Python 2.x, peço desculpa. O raw_input() mudou de nome para input() no Python 3.0. http://www.ibm.com/developerworks/linux/library/l-python3-1/ Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
thoga31 Posted July 23, 2012 Report Share Posted July 23, 2012 Pois, é que eu utilizo o Python 3, e o raw_input andava desaparecido xD Obrigado, @djthyrax. 😉 Knowledge is free! Link to comment Share on other sites More sharing options...
Dr_Lion Posted July 24, 2012 Report Share Posted July 24, 2012 Uma sugestão completares o dicionário, com caracteres especiais.. nem que sejam alguns já dá outra segurança á password, a não ser que seja um programa puramente académico. 1 Report Link to comment Share on other sites More sharing options...
thoga31 Posted July 24, 2012 Report Share Posted July 24, 2012 Apesar de ser de âmbito académico, ficaria muito bem uns caracteres especiais, tens razão, @Dr_Lion 😉 Knowledge is free! Link to comment Share on other sites More sharing options...
Yana Posted July 25, 2012 Author Report Share Posted July 25, 2012 Uma sugestão completares o dicionário, com caracteres especiais.. nem que sejam alguns já dá outra segurança á password, a não ser que seja um programa puramente académico. Roger that Link to comment Share on other sites More sharing options...
Gil Sousa Posted August 25, 2012 Report Share Posted August 25, 2012 while len(passwd) != num_caract: passwd = passwd + random.choice(char) Podes altear o código dentro do while para while len(str_pass) != num_caract: str_pass = str_pass + chr(random.randrange(48, 122)) desta form estas a poupar espaço na memoria que unica função é manter uma string com as letras que podem ser utilizadas para gerar a password. http://sousatg.github.io Link to comment Share on other sites More sharing options...
Yana Posted September 1, 2012 Author Report Share Posted September 1, 2012 Podes altear o código dentro do while para while len(str_pass) != num_caract: str_pass = str_pass + chr(random.randrange(48, 122)) desta form estas a poupar espaço na memoria que unica função é manter uma string com as letras que podem ser utilizadas para gerar a password. ok Obrigado 🙂 Link to comment Share on other sites More sharing options...
icemonster2 Posted September 29, 2012 Report Share Posted September 29, 2012 Podias dar a escolher o nivel de segurança que o utilizados pretendia. Por ex: 2 niveis de segurança, um deles com caracteres especiais, fazias o mesmo que fizes-te: char = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890' char_especial = "!#$%&/()=" option = raw_input('Nivel de seguranca(1 ou 2): ') #ou input('') no py3 if option == 'nivel 2' or option == 'lvl 2' or option == '2': char += char_especial depois começavas o loop for como fizes-te. simples Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now