2012-02-17 21 views
0

私はこれに対する答えを見つけられませんでした。申し訳ありませんが一般的な場合。私はちょっと初心者です。私はこのようなループのために作成してい再帰的なfor動的ポインタ

は(辞書スクリプトを作成するには):

for i1 in range(len(n)): 
    for i2 in range(len(n)): 
     for i3 in range(len(n)): 
      for i4 in range(len(n)): 
       for i5 in range(len(n)): 
        for i6 in range(len(n)): 
         word = n[i1] + n[i2] + n[i3] + n[i4] + n[i5] + n[i6] 

そして私は、私はループの数を選択することができている再帰バージョンを作成したいと思います。だから、もし私がもっと大きな言葉を持っていれば、それは十分にループするでしょう。 そして、私は(その単語の作成のために)後でポインタ変数が必要になりますので、私は

n = len(string) 
def loop(n): #'n' is a string and the length would be the number of recursions 
    if n > 0: 
     var1 [defining my dynam. var] 
     for var1 in range(len(string)): 
      loop(n-1) 
    else:     
     return word() #I guess I know how to code this one 

[その可能な場合は、しかし、知ってはいけない]動的変数を使用して思った..だから私のような変数を持つようにしたいですvar1、var2、var3などを入れてください。 ヘルプ/指示は大歓迎です! ありがとうございます!

編集: ご迷惑をおかけして申し訳ありません。 これを行うべきかどうかわかりません(上記を消去する必要がありますか?)。私は自分が望むものの反復バージョンを作成することができました。文字列を入力し、それらの文字との可能なすべての組み合わせでリストを印刷する。

私が望む出力が得られましたが、6文字に制限されています。再帰的なバージョンでは、入力を取得して必要な数のループを作成することができると思います。 [ベターについて説明?]

を次のように私の実際のスクリプトは、(私は、フィルタ/チェックを行うためのより良い方法があることを知っています)です:

def rec(): 
    word = "" 
    txtfile = open(arq,'w') #arq is the string input + .txt 
    s=0 #Counts the number of words writen 
    t=0 #tests if the word exists 
    for i1 in range(len(n)): 
     for i2 in range(len(n)): 
      for i3 in range(len(n)): 
       for i4 in range(len(n)): 
        for i5 in range(len(n)): 
         for i6 in range(len(n)): 
          #This is a filter for not repeating the same character in a word 
          if not (i1 == i2 or i1 == i3 or i1 == i4 or i1 == i5 or i1 == i6 \ 
           or i2 == i3 or i2 ==i4 or i2 == i5 or i2 ==i6 \ 
           or i3 == i4 or i3 == i5 or i3 == i6 \ 
           or i4 == i5 or i4 == i6 \ 
           or i5 == i6): 
           word = n[i1] + n[i2] + n[i3] + n[i4] + n[i5] + n[i6] 
           txtfile.close() 
           data_file = open(arq) 
           #This one search for the word in the file, for not having duplicates 
           for line in data_file: 
            if line == word + "\n" : 
             t = 1 
            else: 
             pass 
           data_file.close() 
           if not t == 1: 
            s+=1 
            txtfile = open(arq,'a') 
            txtfile.writelines(word + "\n") 
           t=0 

    print ("Number of words writen:",s) 

「eeeeee」のための私の出力がちょうど1つです文字列、例として。 はまたバッジのための最初のものがある: バッジ badgse badegs badesg badsge badseg bagdes bagdse bageds bagesd bagsde がbagsed baedgs

おかげでフィードバックのために多くのことを!

+2

7074051/all-possible-all-possible-three-letters-keywords)ソリューションです。 – malloc47

+0

あなたがしようとしていることを理解することは難しいです。あなたは解決したい問題のより良い定義を与えることができますか? –

+0

再帰的なバージョンがほしいと思っていますが、代わりに 'itertools.combinations_wit_replacement'を使用します。標準よりはるかに簡単/高速:) –

答えて

0

のために、このマニュアルを見て処理するためのpythonでのより良い方法がありますクラス、それはあなたを助けることができます。

class Permutations : 
    def __init__(self , blist) : 
     self.alist=blist 
     self.permut_list = [] 
     self.permutation(len(self.alist)) 

    def swap(self , blist , i , j) : 
     blist[i], blist[j] = blist[j] ,blist[i] 

    def permutation(self, taille): 
     if taille == 1 : 
      self.tmp = self.alist[:] 
      self.permut_list.append(self.tmp) 
     else : 
      for i in range(taille) : 
       self.swap(self. alist , i , taille −1) 
       self.permutation(taille −1) 
       self.swap(self.alist , i , taille −1) 

    def __repr__(self): 
     repre = """""" 
     for i in self.permut_list: 
      repre += ''.join(i)+"\n" 
     return repre 

をこのコードはrecursivのように構成され、それがスワップで、最後にリストのi番目の文字を入れて、その後のLENながら残りをPERMUT restが1より大きい場合は、正しい位置の要素を置き換えて次の要素に移動します。

そして、あなたがこのクラスを呼び出すことができます。[この](http://stackoverflow.com/questions/あなたは、単にすべての可能な文字列を生成する必要がある場合は、これを達成するニシキヘビの方法は次のようになり

text = "abc" 
text_list = [] 
for i in range(len(text)): 
    text_list.append(text[i]) 
permu_text = Permutations(text_list) 
print permu_text 
+0

これはまさに私が欲しかったものでした!どうもありがとう! – ramtoo

0

ここで達成しようとしていることを100%確信しているわけではありません。あなたの現在のコードで何をしようとしていますか?

あなたは次のような結果になるだろう単語 "CAT" 持っていたもの、それが起こるでしょう。例えば

CCC、CCA、CCT、CAC、CAA、CAT、CTC、CTAを、CTT

ACC 、ACA、ACT、AAC、AAA、AAT、ATC、ATA、ATT

TCC、TCA、TCT、TAC、TAA、すべてのための単語の結果であろうTAT、TTC、TTA、TTT

繰り返し(それはすべての割り当ての後に印刷する場合に限り)であるが、言い換えれば、最終的にはTTTと同じであろう。

あなたは最終結果を望みどおりに広げてください。

はまた、我々は、リスト内のすべての順列を作成するスクリプトを作った文字列は、より多くの情報http://docs.python.org/library/stdtypes.html#sequence-types-str-unicode-list-tuple-bytearray-buffer-xrange

よろしく ジョー