Geração de combinações com letras específicas e posições

1,156 views
Skip to first unread message

Lucas de Biaggi Januário

unread,
Aug 14, 2013, 7:49:27 AM8/14/13
to python...@googlegroups.com
Olá, eu to com um dúvida de como fazer uma combinação de 7 letras de forma não aleatória somente mudando de upper pra lower,

por exemplo: ABCDEFG e sair combinando ex: AbcDFEG, ABcDFEG e assim vai... com todas as letras


Obrigado desde já

Élysson Mendes Rezende

unread,
Aug 14, 2013, 8:03:02 AM8/14/13
to python...@googlegroups.com
Bom dia Lucas, tudo blz?

Segue o algoritmo que você pode usar para resolver o seu problema:

Qualquer dúvida estou aqui para ajudar =)

Flw



2013/8/14 Lucas de Biaggi Januário <lbjan...@gmail.com>
Olá, eu to com um dúvida de como fazer uma combinação de 7 letras de forma não aleatória somente mudando de upper pra lower,

por exemplo: ABCDEFG e sair combinando ex: AbcDFEG, ABcDFEG e assim vai... com todas as letras


Obrigado desde já

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
 
---
Você está recebendo esta mensagem porque se inscreveu no grupo "python-brasil" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para python-brasi...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
 
 



--
Élysson MR
Talk/Email: elys...@gmail.com
Skype:       elyssonmr
Twitter:       @elyssonmr

Lucas de Biaggi Januário

unread,
Aug 14, 2013, 8:10:31 AM8/14/13
to python...@googlegroups.com
obrigado pela dica Élysson, eu tava pensando em fazer algo com itertools saca ?, utilizo ela bastante para gerar dicionários para bruteforce, vou tentar adaptar sua ideia, gostei bastante obrigado

Rodrigo Amaral

unread,
Aug 14, 2013, 10:18:45 AM8/14/13
to python...@googlegroups.com
Lucas,

Um dos possíveis caminhos para fazer isso com os recursos do itertools
é saber que temos como descobrir quais possíveis posições da string
terão o "case" trocado. Para isso, pode-se usar o segundo parâmetro da
função combinations para informar a quantidade de letras que serão
trocadas a cada iteração.

Algo mais ou menos assim:

>>> import itertools
>>> positions = range(len('ABCDEF'))
>>> combinations = []
>>> for n in positions:
... combinations.append(list(itertools.combinations(positions, n+1)))

>>> combinations
[[(0,), (1,), (2,), (3,), (4,), (5,)], [(0, 1), (0, 2), (0, 3), (0,
4), (0, 5), (1, 2), (1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5),
(3, 4), (3, 5), (4, 5)], [(0, 1, 2), (0, 1, 3), (0, 1, 4), (0, 1, 5),
(0, 2, 3), (0, 2, 4), (0, 2, 5), (0, 3, 4), (0, 3, 5), (0, 4, 5), (1,
2, 3), (1, 2, 4), (1, 2, 5), (1, 3, 4), (1, 3, 5), (1, 4, 5), (2, 3,
4), (2, 3, 5), (2, 4, 5), (3, 4, 5)], [(0, 1, 2, 3), (0, 1, 2, 4), (0,
1, 2, 5), (0, 1, 3, 4), (0, 1, 3, 5), (0, 1, 4, 5), (0, 2, 3, 4), (0,
2, 3, 5), (0, 2, 4, 5), (0, 3, 4, 5), (1, 2, 3, 4), (1, 2, 3, 5), (1,
2, 4, 5), (1, 3, 4, 5), (2, 3, 4, 5)], [(0, 1, 2, 3, 4), (0, 1, 2, 3,
5), (0, 1, 2, 4, 5), (0, 1, 3, 4, 5), (0, 2, 3, 4, 5), (1, 2, 3, 4,
5)], [(0, 1, 2, 3, 4, 5)]

A ideia é só demonstrar uma aplicação da função combinations. Alocar
essa lista previamente pode não ser a solução mais adequada, ok?

Abraço,

--
Rodrigo Amaral
http://rodrigoamaral.net


2013/8/14 Lucas de Biaggi Januário <lbjan...@gmail.com>:
Rodrigo Amaral
rodrig...@gmail.com

Pedro Werneck

unread,
Aug 14, 2013, 11:57:07 AM8/14/13
to python...@googlegroups.com
Como o que você quer é uma operação binária, gere um inteiro de 0 até
2 ** len(s) onde s é a string, e use cada bit do inteiro como flag
indicando se deve ser maiúscula ou não.

Se quiser em binário pode ser, ma um jeito simples é usando a própria
representação de binário em string:

Por exemplo, para gerar todas as combinações:

>>> s = 'abcdef'
>>> m = 2 ** len(s)
>>>
>>> for x in range(m):
... d = bin(x)[2:].rjust(len(s), '0')
... print ''.join([a.upper() if int(b) else a for (a, b) in zip(s, d)])
...
abcdef
abcdeF
abcdEf
abcdEF
abcDef
abcDeF
abcDEf
abcDEF
abCdef
abCdeF
...




2013/8/14 Rodrigo Amaral <rodrig...@gmail.com>:
---
Pedro Werneck

Mário Neto

unread,
Aug 14, 2013, 12:35:08 PM8/14/13
to python...@googlegroups.com
Arrasou Werneck! =)
Att. Mário Araújo Chaves Neto
Programmer, Designer and U.I. Engineer

MBA in Design Digital - 2008 - FIC
Analysis and Systems Development - 2011 - Estácio
Design and Implementation of Internet Environments - 2003 - FIC

Lucas de Biaggi Januário

unread,
Aug 14, 2013, 2:06:41 PM8/14/13
to python...@googlegroups.com
Obrigado Rodrigo e Pedro :P, ficou legal meu brinquedinho, se eu receber autorização eu posto para mostrar a criança

Pedro Werneck

unread,
Aug 14, 2013, 4:00:43 PM8/14/13
to python...@googlegroups.com
Nessas horas ter programado microcontrolador de 8 bits ajuda um pouco
a pensar fora da caixa. :)


2013/8/14 Mário Neto <macnd...@gmail.com>:

Lucas de Biaggi Januário

unread,
Aug 14, 2013, 4:09:21 PM8/14/13
to python...@googlegroups.com
eu to fazendo o caminho inverso de 32-bit fui para 16-bit e pretendo ir para 8-bit um dia :D, justamente para treinar minha skill,

mas muito obrigado
Reply all
Reply to author
Forward
0 new messages