なんちゃってRullo(足し算)のコード

やったこと

Rullo(足し算モード)の問題作成部分を書いてみた。
Rulloを知らない人はググってください。

なぜやったのか

ゲームやっていてどうやって動いているのか疑問に思った。ついでにコード書く練習にも。

コード

クラス

class rullo:
    #x*xのgridを作成し、0で初期化
    def __init__(self,x):
        self.grid=[]
        self.grid=[[0]*x for i in range(x)]
        self.line=[] #各列の合計
        self.row=[] #各行の合計
    
    #ランダムで答えの位置を決め、その場所に数字を埋める  
    def random_choice(self):
        for i in range(len(self.grid)):
            for j in range(len(self.grid)):
                if random.randint(0,10)>5:
                    self.grid[i][j]=random.randint(0,20)
                    
        
        print(self.grid)
        
    #縦横の合計を求める    
    def answer(self):
        row=[]
        line=[]
        for i in self.grid: 
            row.append(sum(i))
        
        for i in range(len(self.grid)):
            line.append(sum([a[i] for a in self.grid]))
        self.row=row
        self.line=line
        
    #埋まっていない個所に数字を入れる
    def filler(self):
        for i in range(len(self.grid)):
            for j in range(len(self.grid)):
                if self.grid[i][j]==0:
                    self.grid[i][j]=random.randint(1,20)
        
    #表示用    
    def show_grid(self):
        print("-"*len(self.grid)*10)
        print("\t\t",end="")
        for i in self.line:
            print(i,"\t",end="")
        print("")
        print("-"*len(self.grid)*10)
        for i,r in zip(self.grid,self.row):
            print(r,"\t|\t",end="")
            for j in i:
                print(j,"\t",end="")
            print("")

問題を生成する

import random,copy
#正解の生成  
data=rullo(5)
data.random_choice()
data.answer()
#問題の生成
use_data=copy.deepcopy(data)
use_data.filler()
#問題、正解の表示
use_data.show_grid()
data.show_grid()

結果

[[8, 0, 7, 16, 5], [9, 0, 11, 0, 0], [7, 0, 11, 0, 0], [5, 2, 18, 12, 7], [0, 14, 0, 15, 1]]
--------------------------------------------------
        29  16  47  43  13  
--------------------------------------------------
36  |   8   2   7   16  5   
20  |   9   4   11  19  13  
18  |   7   6   11  2   4   
44  |   5   2   18  12  7   
30  |   16  14  14  15  1   
--------------------------------------------------
        29  16  47  43  13  
--------------------------------------------------
36  |   8   0   7   16  5   
20  |   9   0   11  0   0   
18  |   7   0   11  0   0   
44  |   5   2   18  12  7   
30  |   0   14  0   15  1   

メモ

random_choice、もうちょっとうまい書き方があると思うから、この書き方はやめておいたほうがいいかも。

感想

deepcopyとか使いそうなのにあまり使ってないことに気づいた。動きゃあいいんだよ精神でやってきたのがバレバレですね。