2017-05-24 1 views
-1

これは、xダイスロールのすべての結果を生成する関数を作成しようとしたものです。メイン関数で生成される第1リストは[[1]、[2]、[3]、[4]、[5]、[6]]であり、 。最初の6番目に1を加え、2番目の6番目に2を加えれば、2つ(またはそれ以上)の転がりのすべての結果がリストに表示されます。任意の数のダイスロールのすべての値のpythonリストを生成しようとしています。返されるリスト内の複数のインデックスにそれぞれの値が追加されるのはなぜですか?

#Works for any number of sides on a dice 
#Meant to expand the list to include an extra dice. The items needed for 1 
#dice is 6, for 2 die is 36, etc. 
def replicate(x,y): 
    new_lst = [] 
    for i in range(y): 
     for k in x: 
      new_lst.append(k) 
    return new_lst 

#Specifically for 6 sided die 
def table_of_possibilities(x): 
    or_lst = [] 
    for l in range(6): 
     or_lst.append([l + 1]) 
    if x > 1: 
     for k in range(x-1): 
      lst = replicate(or_lst,6) 
      length = len(lst) 
      print(lst) 
      #This list appears fine, lists of [1],[2],[3],[4],[5],[6] repeated 6 times 
      for i in range(length): 
       if i < length/6: 
        lst[i].append(1) 
       elif i < length/3: 
        lst[i].append(2) 
       elif i < length/2: 
        lst[i].append(3) 
       elif i < length * 2/3: 
        lst[i].append(4) 
       elif i < length * 5/6: 
        lst[i].append(5) 
       else: 
        lst[i].append(6) 
    return lst 

print(table_of_possibilities(2)) 
#The final list is the earlier print with 1,2,3,4,5,6 in each list 
+4

私はあなたがやろうとしているものは100%わからないが、あなたは 'itertools'、' itertools.product(範囲(1、7を使用して、すべての死ぬのロールを生成することができます)、repeat = x) ' – AChampion

+0

これはあなたがやろうとしていることではありません、返されたリストの各インデックスにそれぞれの青を追加しますか?あなたが何を求めているのかは不明です。あなたは私たちにあなたの期待される出力と、あなたが得ている出力を教えてもらえますか?すなわちMCVE? – toonarmycaptain

+0

このコードは、[[1,1,1,2,3,4,5,6]、[2,1,2,3,4,5,6]、[1,3,1,2,3,4,5,6] 5,6]、[4,1,2,3,4,5,6]、[5,1,2,3,4,5,6]、[6,1,2,3,4,5,6] 6]、[1,1,2,3,4,5,6]、[2,2,1,3,4,5,6]、[3,1,2,3,4,5,6] 、[4,1,2,3,4,5,6]、[5,1,2,3,4,5,6]、[6,1,2,3,4,5,6]、繰り返し私はそれを[1,1]、[2,1]、[3,1]、[4,1]、[5,1]、[6,1]、[1、 2]、[2,2]などがあります。 –

答えて

0

あなたはタプルを扱うことができた場合は、リスト内で、多分itertools.productが、示唆されているように、十分である:

from itertools import product 

myList = list(product(range(1,7), repeat=2)) # the second argument can be however 
              # many die you want to roll. 
print myList 

のpython 2.7で(私が使っているものを)、これが返されます。 (1,1)、(1,2)、(1,3)、(1,4)、(1,5)、(1,6)、(2,2)、(2,3) (3,4)、(2,3)、(2,4)、(2,5)、(2,6)、(3,1)、(3,2)、(3,3) (4,5)、(3,6)、(4,1)、(4,2)、(4,3)、(4,4)、(4,5)、(4,6)、 (5,6)、(5,6)、(6,1)、(6,2)、(6,7)、(5,2)、(5,3) 3)、(6,4)、(6,5)、(6,6)]

以上がここで見つけることができます: 9.7 itertools

+0

ありがとう!私はまだ元のコードがうまくいかなかった理由を知りたいのですが、これが私の問題を解決しました。 –

関連する問題