2017-01-19 5 views
-3

Я пишу программу, которая будет сочетать в себе такие слова, как переставлять их, но я, когда я запускаю код, если отпечатки их так или иначеделая код Python, чтобы запустить упорядоченную

я хотел бы программу для запуска в упорядоченно, как после того, как запустив первый оператор печати, он будет перейти ко второму операторам печати вместо рассеяния его

здесь код

len_of_char = input('What is the lenght of the characters: ') 
if len_of_char == 1: 
    for a in ['a', 'b', 'c', 'd', 'e', 'f']: 
     print(str(a) + '\n') 
elif len_of_char == 2: 
    for a in ['a', 'b', 'c', 'd', 'e', 'f']: 
     for b in ['a', 'b', 'c', 'd', 'e', 'f']: 
      print(str(a) + '\n') 
      print(str(a + b) + '\n') 

elif len_of_char == 3: 
    for a in ['a', 'b', 'c', 'd', 'e', 'f']: 
     for b in ['a', 'b', 'c', 'd', 'e', 'f']: 
      for c in ['a', 'b', 'c', 'd', 'e', 'f']: 
       print(str(a) + '\n') 
       print(str(a + b) + '\n') 
       print(str(a + b + c) + '\n') 

elif len_of_char == 4: 
    for a in ['a', 'b', 'c', 'd', 'e', 'f']: 
     for b in ['a', 'b', 'c', 'd', 'e', 'f']: 
      for c in ['a', 'b', 'c', 'd', 'e', 'f']: 
       for d in ['a', 'b', 'c', 'd', 'e', 'f']: 
        print(str(a) + '\n') 
        print(str(a + b) + '\n') 
        print(str(a + b + c) + '\n') 
        print(str(a + b + c + d) + '\n') 

elif len_of_char == 5: 
    for a in ['a', 'b', 'c', 'd', 'e', 'f']: 
     for b in ['a', 'b', 'c', 'd', 'e', 'f']: 
      for c in ['a', 'b', 'c', 'd', 'e', 'f']: 
       for d in ['a', 'b', 'c', 'd', 'e', 'f']: 
        for e in ['a', 'b', 'c', 'd', 'e', 'f']: 
         print(str(a) + '\n') 
         print(str(a + b) + '\n') 
         print(str(a + b + c) + '\n') 
         print(str(a + b + c + d) + '\n') 
         print(str(a + b + c + d + e) + '\n') 
elif len_of_char == 6: 
    for a in ['a', 'b', 'c', 'd', 'e', 'f']: 
     for b in ['a', 'b', 'c', 'd', 'e', 'f']: 
      for c in ['a', 'b', 'c', 'd', 'e', 'f']: 
       for d in ['a', 'b', 'c', 'd', 'e', 'f']: 
        for e in ['a', 'b', 'c', 'd', 'e', 'f']: 
         for f in ['a', 'b', 'c', 'd', 'e', 'f']: 
          print(str(a) + '\n') 
          print(str(a + b) + '\n') 
          print(str(a + b + c) + '\n') 
          print(str(a + b + c + d) + '\n') 
          print(str(a + b + c + d + e) + '\n') 
          print(str(a + b + c + d +e +f) + '\n') 
+0

Можете ли вы представить пример желаемого результата? Я не уверен, что означает _разрушение. Кроме того, ваш код можно упростить. Простым примером может быть определение букв = ['a', 'b', 'c', 'd', 'e', ​​'f'] ', а затем замена всего этого списка переменной' letters'. –

+0

то, что я имею в виду рассеяния является то, что он делает печать аа ааа аа ааЪ аа ААС аа AAD вместо печати все a b c d х х аа абы ас объявления ае ..... –

+0

Обеспечивая пример того, что вы ищете ваш лучший выбор здесь. Пожалуйста, добавьте его в вопрос как отредактируйте, чтобы преподнести новые строки. –

ответ

0

Код не работает. Он работает именно так, как вы его запрограммировали. Взгляните на то, что я написал, посмотрим, как это работает, а затем посмотрите, как улучшить его. itertools был бы более эффективным, но у меня не было времени.

def permute(inputNum): 
    letters = ['a', 'b', 'c', 'd', 'e', 'f'] 

    for i in range(int(inputNum),0,-1): 
     if i >= 1: 
      for a in letters: 
       if i >= 2: 
        for b in letters: 
         if i >= 3: 
          for c in letters: 
           if i >= 4: 
            for d in letters: 
             if i >= 5: 
              for e in letters: 
               if i >= 6: 
                for f in letters: 
                 print(a+b+c+d+e+f,"\n") 

               else: 
                print(a+b+c+d+e,"\n") 
             else: 
              print(a+b+c+d,"\n") 
           else: 
            print(a+b+c,"\n") 
         else: 
          print(a+b,"\n") 
       else: 
        print(a,"\n") 

myNum = input("Enter a number from 1 to 6 ---> ") 

permute(myNum) 

Это должно дать вам результат, который, я считаю, вы ищете.

Я также не понимаю, почему у вас есть тег multi-threading по этому вопросу, так как он не имеет никакого отношения к многопоточности.

+0

Извините. Отредактировано для исправления грамматики. – Casey

+0

Не забудьте принять то, что вы считаете лучшим ответом. – Casey

+0

Я думал, что многопоточность поможет организовать его –

1
for prod in itertools.product(*[['a', 'b', 'c', 'd', 'e', 'f']]*len_of_char): 
    print prod 

... Я думаю

+0

Я попробовал это, он дал мне это сообщение об ошибке для prod в itertools.product (* [['a', 'b', 'c', 'd', 'e', ​​'f']] * len_of_char): NameError: name 'itertools' не определен –

+1

Я оставлю этот бит до excersize для читателя –

-1

У вас есть дополнительный цикл для случая длины 2.

elif len_of_char == 2: 
    for a in ['a', 'b', 'c', 'd', 'e', 'f']: 
     for b in ['a', 'b', 'c', 'd', 'e', 'f']: 
      for a in ['a', 'b', 'c', 'd', 'e', 'f']: # here is the extra for loop 
       print(str(a) + '\n') 
       print(str(a + b) + '\n') 

К сожалению, я не могу комментировать, так что я просто хотел указать на очевидные ошибки в коде, и думал, что будет легко заметить ошибку, как только я упомянул об этом. Я проверил ваши коды и не видел проблем, кроме случаев len_of_char == 2.

+0

Это не дает ответа на вопрос , Когда у вас будет достаточно [репутации] (http://stackoverflow.com/help/whats-reputation), вы сможете [прокомментировать любое сообщение] (http://stackoverflow.com/help/privileges/comment). – cpburnz

+0

ОК спасибо, исправлено –

1

В частности, я думаю, что вы хотите:

import itertools 
alf = 'abcdef' 
for n in range(1, len(alf)+1): 
    for w in map(lambda t: ''.join(t), itertools.combinations_with_replacement(alf, n)): 
     print w 

itertools стандартная библиотека Python полна многих очень удобных инструментов для переборе списков и других коллекций, отсюда и название.

Смежные вопросы