我正在创建一个程序,在python 3.3上创建othello或reversi的控制台版本。我正在创建电路板,要求用户输入4-16之间的偶数行号和4-16之间的偶数列号。如何创建一个函数或算法来确定用户定义网格上的四个正方形数字,这些正方形数字将最初的四个部分放在板的中间?谢谢!
答案 0 :(得分:0)
假设行数和列数是rows
和cols
的值,要使用的行号是rows/2-1
和rows/2
。 (例如,如果rows==12
值为5和6.)同样,要使用的列号为cols/2-1
和cols/2
。
注意,如果电路板表示为线性阵列,并且如果一行的单元格相邻存储,则可以说lr =(rows+1)*cols//2
,并初始化单元格'lr',lr-1
,{{1 }和lr-cols
作为中心单元格。这相当于上面的公式。例如:
lr-cols-1
产生
for rows in (4,6,8):
for cols in (4,6,8):
lr = (rows+1)*cols//2
r = rows//2
c = cols//2
print rows, cols, ':\t', r,c, '\t', lr-cols-1, '\t', lr-cols, '\t', lr-1, '\t', lr, '\t', r*cols+c
也就是说,(4,6)案例的下标是(8,9,14,15),而(6,4)案例的下标是(9,10,13,14)。
对于偶数整数,2是一个精确的除数,所以我认为/ 2的结果在Python 2(整数除法截断)和Python 3(它没有)中都是相同的。或者您可以使用4 4 : 2 2 5 6 9 10 10
4 6 : 2 3 8 9 14 15 15
4 8 : 2 4 11 12 19 20 20
6 4 : 3 2 9 10 13 14 14
6 6 : 3 3 14 15 20 21 21
6 8 : 3 4 19 20 27 28 28
8 4 : 4 2 13 14 17 18 18
8 6 : 4 3 20 21 26 27 27
8 8 : 4 4 27 28 35 36 36
运算符来确保截断除法。
注意,您可以测试//
和rows
甚至是cols
之类的表达式,如果其中任何一个是奇数,则为1,否则为0.