我想要做的是循环遍历 board 中的元素,查找" P",然后检查是否有5" P"& #39;连续(向下,可以这么说)。请参阅代码中的注释以获得进一步说仍然,inRow给我输出15。
提示:五个" P"不应该是静止的,而是由玩家放置但是对于这个例子,我只是放置了静止的。
board = [['E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E'],
['E', 'E', 'P', 'E', 'E', 'E', 'E', 'E', 'E', 'E'],
['E', 'E', 'P', 'E', 'E', 'E', 'E', 'E', 'E', 'E'],
['E', 'E', 'P', 'E', 'E', 'E', 'E', 'E', 'E', 'E'],
['E', 'E', 'P', 'E', 'E', 'E', 'E', 'E', 'E', 'E'],
['E', 'E', 'P', 'E', 'E', 'E', 'E', 'E', 'E', 'E'],
['E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E'],
['E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E'],
['E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E'],
['E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E']]
# has 10 rows, with 10 elements in each
inRow=0
for y in range(10): # Loops over each row (y-index)
x=0 # x-index resets each new y-index loop (start on the first element (0) of each row)
for pos in board[y]: # pos loops over all elements in current row
if pos is "P": # checks if pos is "P"
for i in range(5): # loops over 0, 1, 2, 3, 4
if board[y+i][x] is "P": # when i=0, board[y+i][x] is ought to be where we find the first "P", then check if the following rows (we add +1 to y for each loop) is also "P"
inRow += 1 # Counter to see if we got 5 in a row
break
x+=1
print(inRow)
答案 0 :(得分:1)
即使连续没有inRow
“P”,也会添加到5
。想一想:
第一次在第二行中点击“P”时,您倒计时得到5
。下次在外for
循环中点击“P”时,您倒计时并获得4
。现在你已经计算了9
“P”了。继续这个,你会得到5 + 4 + 3 + 2 + 1 = 15
“P”。
解决方案是使用中间计数器,如果该计数器为inRow
,则仅将该中间计数添加到5
。
要正确计算,您可以在for pos in board[y]:
counter = 0
然后,您使用inRow += 1
而不是counter += 1
。
最后,在你的休息声明之前,做一个检查:
if counter == 5:
inRow += counter
答案 1 :(得分:0)
问题在于,当你休息时,你不会结束两个循环 - 只有第二个循环。
因此,当您的代码找到第一个P
时,它会递增inRow
,直到它等于5,然后中断。然后,您的代码将移至第二行,第二行P
,并递增inRow
,直到它等于9
- 5 + 4 = 9
。
虽然您可以重新构建代码以完全避免此问题,但您也可以将代码包装在函数中并简单地返回而不是破坏:
board = [['E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E'],
['E', 'E', 'P', 'E', 'E', 'E', 'E', 'E', 'E', 'E'],
['E', 'E', 'P', 'E', 'E', 'E', 'E', 'E', 'E', 'E'],
['E', 'E', 'P', 'E', 'E', 'E', 'E', 'E', 'E', 'E'],
['E', 'E', 'P', 'E', 'E', 'E', 'E', 'E', 'E', 'E'],
['E', 'E', 'P', 'E', 'E', 'E', 'E', 'E', 'E', 'E'],
['E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E'],
['E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E'],
['E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E'],
['E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E']]
def find(board):
inRow=0
for y in range(10):
x = 0
for pos in board[y]:
if pos == "P":
for i in range(5):
if board[y+i][x] == "P":
inRow += 1
return inRow
x += 1
return inRow
print(find(board))
答案 2 :(得分:0)
如果没有5' P'你必须设置标志。在行中然后检查标志是否为真然后增加inRow
inRow=0
for y in range(10):
x=0
for pos in board[y]:
if pos is "P":
flag=True
for i in range(5):
if not board[y+i][x] is "P":
flag=False
if flag:
inRow+=1
break
x+=1
print(inRow)