私は、甲殻類を甲殻類で使用しています。今は、私が見ているボックスをプログラムが簡単にチェックできるようにする方法を理解しようとすると、ちょっと困っています。私は異なる位置に5つのグリッドを持っています。ゲームは自動的に再生するものを選択します。それぞれのグリッドが異なる位置にあるので、私は自分のカメをどこに配置するか注意する必要があります。私は自分のカメカーソルに数字を描画させる場所を計算する16の関数を持っています。変数を関数名に実装する方法
#Below is a guide to where each box is relative to its position on the grid.
#To find center of the box, add 75 to x and 20 to y.
#Box(1,1) = x, y Box(1,2) = x+150, y Box(1,3) = x+300, y Box(1,4) = x+450, y
#Box(2,1) = x, y-150 Box(2,2) = x+150, y-150 Box(2,3) = x+300, y-150 Box(2,4) = x+450, y-150
#Box(3,1) = x, y-300 Box(3,2) = x+150, y-300 Box(3,3) = x+300, y-300 Box(3,4) = x+450, y-300
#Box(4,1) = x, y-450 Box(4,2) = x+150, y-450 Box(4,3) = x+300, y-450 Box(4,4) = x+450, y-450
def box1_1(x, y):
return(x+75, y+20)
def box1_2(x, y):
return(x+225, y+20)
def box1_3(x, y):
return(x+375, y+20)
def box1_4(x, y):
return(x+525, y+20)
def box2_1(x, y):
return(x+75, y-130)
def box2_2(x, y):
return(x+225, y-130)
def box2_3(x, y):
return(x+375, y-130)
def box2_4(x, y):
return(x+525, y-130)
def box3_1(x, y):
return(x+75, y-280)
def box3_2(x, y):
return(x+225, y-280)
def box3_3(x, y):
return(x+375, y-280)
def box3_4(x, y):
return(x+525, y-280)
def box4_1(x, y):
return(x+75, y-430)
def box4_2(x, y):
return(x+225, y-430)
def box4_3(x, y):
return(x+375, y-430)
def box4_4(x, y):
return((x+525, y-430))
私はボードを描いてもらいたいと思います。与えられた数字も正しく描画されます。私は、ユーザーがリアルタイム補正で遊ぶか、伝統的にすべての値を入力できる場所でプレイするかを選択し、解決策が正しいかどうかを確認します。私が取り組んでいる問題は、ユーザーが希望の番号をボックスに入力する部分の間です。今私が持っている:
def playSudoku():
playboard = []
board1 = [[0,0,0,3],[0,1,0,4],[4,2,0,1],[0,3,4,0]]
board2 = [[4,3,0,0],[1,0,3,0],[0,0,2,0],[2,1,0,0]]
board3 = [[0,4,0,1],[3,0,3,0],[1,0,0,4],[0,2,1,0]]
board4 = [[1,0,3,0],[0,4,2,1],[0,0,0,2],[0,0,4,0]]
board5 = [[0,4,3,2],[3,0,0,0],[4,0,0,0],[0,0,4,1]]
boardchoice = random.randint(1,5)
if boardchoice == 1:
drawBoard1()
playboard = board1
posx = -900
posy = 850
elif boardchoice == 2:
drawBoard2()
playboard = board2
posx = -200
posy = 850
elif boardchoice == 3:
drawBoard3()
playboard = board3
posx = 500
posy = 850
elif boardchoice == 4:
drawBoard4()
playboard = board4
posx = -500
posy = 100
else:
drawBoard5()
playboard = board5
posx = 200
posy = 100
rtc = turtle.textinput("Sudoku", "Do you want to play with real time correction?")
if rtc == 'y':
for i in range (0,3):
for j in range (0,3):
if playboard[i][j] != 0:
pass
num = turtle.numinput('Sudoku', 'Enter a number for box[' + str(i) + ',' + str(j) + ']?: ', minval=1, maxval=4)
turtle.goto(box[i]_[j](posx,posy))
turtle.write(str(num), move=True, align="center", font=("Times New Roman", 24))
は、私は、彼らが亀のグリッド上の異なるスポットに座っているので、各ボードは異なるPOSXとPOSYを持っている理由がある
turtle.goto(box[i]_[j](posx,posy))
特にこの行に注意を喚起したいです。上で見たように、名前が "box A _ B"の関数があります。ここで、AとBはボックスの位置番号です。私が書いたことはうまくいかないことを知っています(私もそれを試しました)が、達成しようとしていることを私にさせるPython関数があるかどうか疑問に思っていました。 私のループでは、iとjが何であれ、自分のプログラムがbox [i] _ [j]を使用したいと思います。 これはあまり言い表せない場合はお詫び申し上げます。より明確にする必要がある場合は、私は熱心にあなたに伝えます。私はちょうど誰かが私が探しているものを知っていることを望んでいた。
次のブログ投稿[** _変数名からデータを保持する_ **](https://nedbatchelder.com/blog/201112/keep_data_out_of_your_variable_names.html)のアドバイスは関係します。 – martineau
martineauが言ったこと。もしあなたがboard1..board5のような一連の番号付き変数を作成しているのであれば、あなたが間違っていることを示す記号であり、それらのボードはリスト内の項目、あるいはおそらくdictでなければなりません。 –
同様に、 "boxA_B"という名前の関数はおそらくもっと効率的に実行できます。理想的には、これらすべての機能を1つの機能にまとめることができます。しかし、できないなら、 'boxfunc [a] [b](posx、poy)'のように呼び出すことのできる2Dグリッド関数を作成する方法があります。 –