2017-12-08 8 views
1

2〜4文字のアルファベットの組み合わせをすべて出力するプログラムを作成しようとしています。プログラムは今のところうまく動作しますが、実装は理想から遠いです。これは今のところです:ネストされたforループの反復変数を繰り返しごとに追加します。

# make a list that contains ascii characters A to z 
ascii = list(range(65, 123)) 
del ascii[91 - 65 : 97 - 65] # values 91-97 aren't letters 

for c1, c2 in product(ascii, repeat=2): 
    word = chr(c1) + chr(c2) 
    print(word) 

for c1, c2, c3 in product(ascii, repeat=3): 
    word = chr(c1) + chr(c2) + chr(c3) 
    print(word) 

for c1, c2, c3, c4 in product(ascii, repeat=4): 
    word = chr(c1) + chr(c2) + chr(c3) + chr(c4) 
    print(word) 

私は次の精神の中で、むしろ何かを持っています。次のコードが完全に間違っていることを私に許してください。私はより良い実装であると思ったものの精神を伝えようとしています。

iterationvars = [c1, c2, c3, c4] 

for i in range(2,5): 
    for iterationvars[0:i] in product(ascii, repeat=i): 
     word = ?? 
     print(word) 

だから私は2つの質問がある:
1)私は「母ループ」の反復ごとにループの入れ子になったの反復変数の数を変更することができますか?
2)どのようにしてという単語を実装しても、特定の反復に何個存在するにせよ、すべての反復変数を動的に追加するように実装することができます。

もちろん、私が示唆しているものとは非常に異なる実装も歓迎すべきものです。どうもありがとう!

答えて

0

反復変数の数を変更する必要はありません。すべてを1つのタプルにまとめておき、結合リストの理解を使用するだけです。このようなものが動作します:

for iter_tuple in product(ascii, repeat = i): 
    word = ''.join(chr(x) for x in iter_tuple) 
    print(word) 
+0

このようなエレガントな実装!どうもありがとう! –

関連する問題