2017-03-03 2 views
-2

저는 첫 번째 파이썬 프로젝트에서 일하고 있습니다. 그것의 (또 다른) 암호 사전 생성기는 목표 (이 경우에는 사회 공학)에 대한 유익한 암호 정보를 입력하는 것을 기반으로합니다.Python 2.7. 목록에서 단어를 섞어서 해결하는 데 도움이 필요합니다. (첫 번째 python 프로젝트)

잘 작동하는 메뉴 기반 부분이있어 사용자가 선택한 단어를 추가하고 출력 파일 이름에 대한 옵션을 선택하고 숫자를 추가하고 특수 문자를 추가 할 수 있습니다. 내가 할 필요 무엇

은 다음과 같습니다 - 성공적으로이 비트를 완료 목록에

1) 입력 단어 (예 : kidsname, birthmonth, starsign). 그 안에 [listA]

2) 각 단어의 첫 글자를 대문자로 만드십시오. (예 : kidsname -> Kidsname)이 비트를 성공적으로 완료했습니다. 그런 다음 [listB]에 저장됩니다.

3) [listA]와 [listB]의 단어를 가져 와서 가능한 모든 조합 (예 : kidsname, kidsnamebirthmonth, Starsignkidsname, BirthmonthstarsignKidsname 등)에 넣으십시오.이 부분이 현재 내가 당황한 부분입니다. 와. 내가없는 기쁨으로 itertools.permutations을 시도했습니다. 결국

..... 4) 시작과 끝에 숫자 시퀀스를 추가 (예. 123kidsnameBirthmonth, starsignKidsname666 등)

5) 특수 문자 추가 (예 : Starsignbirthmonth123 -> St @ rsignbirthm0nth123)

아이디어가 없습니다. 도움말 감사. 지금 막 3 단계에서 조언을 원합니다. 내가 그들에게 도착하면 나는 4 단계와 5 단계를 건너 뛸 것이다! 감사합니다. 감사합니다. G.R. 3 단계

+2

당신이 가진 것을 보여주십시오. – Alfe

+1

코드를 작성하는 것이 좋을 것 같습니다. 대부분의 사용자는 곤경에 처한 코더 코드를 기꺼이 만들지 만 일반적으로 포스터가 이미 문제를 해결하려고 시도했을 때만 도움이됩니다. 이러한 노력을 입증하는 좋은 방법은 지금까지 작성한 코드, 예제 입력 (있는 경우), 예상 출력 및 실제로 얻은 출력 (콘솔 출력, 역 추적 등)을 포함시키는 것입니다.더 자세하게 제공할수록 더 많은 답변을받을 수 있습니다. [FAQ]와 [ask]를 확인하십시오. L 범위 (0, len (tempmixlist) +1)의 L에 대한 –

+0

: itertools.permutations (tempmixlist, L)의 L에 대한 : 인쇄 (tempmixlist) –

답변

1

:에 대해 어떻게 :

oneblue 
blueone 
onegreen 
greenone 
onered 
redone 
twoblue 
bluetwo 
twogreen 
greentwo 
twored 
redtwo 
threeblue 
bluethree 
threegreen 
greenthree 
threered 
redthree 

더 일반적인 방법은 다음과 같이 itertools를 사용할 수있다 :

for product in itertools.product(
    ['one', 'two', 'three'], 
    ['blue', 'green', 'red'], 
    ['cancer', 'leo', 'virgo']): 
    for combination in itertools.permutations(product): 
    print ''.join(combination) 

def eachCombination(listA, listB): 
    for a in listA: 
    for b in listB: 
     yield a + b 
     yield b + a 

for combination in eachCombination(
    ['one', 'two', 'three'], 
    ['blue', 'green', 'red']): 
    print combination 

이이 목록을 인쇄한다 사용해보기 ;-)

각 요소에 대한 총액 변화와 함께이 결합 할 경우

,이 시도 : 여기 강조 할

for product in itertools.product(
    ['one', 'two', 'three'], 
    ['blue', 'green', 'red'], 
    ['cancer', 'leo', 'virgo']): 
    for combination in itertools.permutations(product): 
    originalAndCapitalized = [ (original, original.capitalize()) 
     for original in combination ] 
    for words in itertools.product(*originalAndCapitalized): 
     print ''.join(words) 

한 가지는 당신이 목록을 작성하지해야한다는 것입니다. 이러한 상황에서 목록을 사용하면 짧은 시간 안에 메모리를 채울 수 있습니다. 약간의 변형으로 생성 된 조합의 수는 엄청나게 커질 수 있습니다. 에만을 생성하고 반복하면됩니다.

이 문맥에서 yield 키워드에 대해 알고 계시다.

+0

당신이 옳습니다. 나는 목록 이해력을 먼저 가지고 마지막 단계에서 그것을 바 꾸었습니다. 나는 전체 코드를 명확히 할 것이다. 완료 (지금 쓸모없는 경우에 대비하여 의견을 자유롭게 삭제하십시오). – Alfe

+0

답장을 보내 주셔서 감사합니다. Alfe, 당신은 거의 내가 가지고있는 것과 함께 있지만, 내가 원하는 것은 약간 다릅니다. 그래서 ... ListC = listA + listB, 나는 listC에 대한 조합을 원합니다. 예를 들어 listA = [ 'word1', 'word2', 'word3'] listB는 (대문자 일 것입니다) [ 'Word1', 'Word2 ','Word3 '] listC = ['word1 ','word2 ','word3 ','Word1 ','Word2 ','Word3 ']이 목록에서 조합을 만들고 싶습니다. 당연히 '단어 1'과 '단어 1'을 조합으로 사용하지 않으므로 피하고 싶습니다. 그러나 2와 3 단어의 다른 모든 조합은 내가 무엇을했는지입니다. 감사!!! –

+0

균열을 일으킬 수있는 암호를 생성하는 것은 순수 예술이 아니라 직설적 인 과학입니다. 나는 당신의 구체적인 생각과 소망이 무엇인지 모른다. 그래서 나는 그에 맞게 코드를 조정할 수 없다. 그것들을 정확하게 공식화한다면, 코드를 정확하게 작성한 것일 수도 있습니다. – Alfe