Yana Posted July 21, 2012 at 04:22 PM Report Share #469533 Posted July 21, 2012 at 04:22 PM (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 at 04:58 PM by djthyrax GeSHi Link to comment Share on other sites More sharing options...
pmg Posted July 21, 2012 at 04:56 PM Report Share #469540 Posted July 21, 2012 at 04:56 PM 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 at 05:05 PM Author Report Share #469542 Posted July 21, 2012 at 05:05 PM 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 at 08:50 PM Report Share #469579 Posted July 21, 2012 at 08:50 PM 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 at 10:09 PM Author Report Share #469596 Posted July 21, 2012 at 10:09 PM (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 at 10:10 PM by Yana Link to comment Share on other sites More sharing options...
djthyrax Posted July 22, 2012 at 07:51 PM Report Share #469670 Posted July 22, 2012 at 07:51 PM 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 at 09:35 PM Report Share #469826 Posted July 23, 2012 at 09:35 PM 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 at 09:47 PM Author Report Share #469831 Posted July 23, 2012 at 09:47 PM (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 at 10:14 PM by Yana Link to comment Share on other sites More sharing options...
djthyrax Posted July 23, 2012 at 09:56 PM Report Share #469834 Posted July 23, 2012 at 09:56 PM 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 at 09:59 PM Report Share #469837 Posted July 23, 2012 at 09:59 PM 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 at 01:35 PM Report Share #469989 Posted July 24, 2012 at 01:35 PM 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 at 02:23 PM Report Share #470016 Posted July 24, 2012 at 02:23 PM 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 at 01:27 PM Author Report Share #470245 Posted July 25, 2012 at 01:27 PM 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 at 02:06 AM Report Share #473465 Posted August 25, 2012 at 02:06 AM 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 at 08:13 PM Author Report Share #474269 Posted September 1, 2012 at 08:13 PM 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 at 10:12 PM Report Share #477091 Posted September 29, 2012 at 10:12 PM 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