Можете ли вы+Как установить правило, которое выдает ошибку при отрицательной индексации? [дубликат]Python

Программы на Python
Ответить
Anonymous
 Можете ли вы+Как установить правило, которое выдает ошибку при отрицательной индексации? [дубликат]

Сообщение Anonymous »

Итак, я создаю программу тетрис в PyGame и начал программировать ротацию и удары по столам. Мой процесс основан на возникновении ошибки всякий раз, когда он пытается выполнить проверку за пределами массива (включая отрицательные числа индекса), но недавно я обнаружил, что отрицательные числа, используемые в качестве индекса, принимают значение в конце списка/массива, и я не Я не хочу, чтобы это произошло. Я знаю, что могу поставить проверку в начале каждой проверки размещения, но это будет очень длительный процесс и еще больше усложнит и без того сложный процесс.
Вот как запускается моя функция :
def rotate(direction):
global rotation_state, grid_active
active_row = []
active_col = []
active_cel = []
arc = 0
acc = 0
for row in range(GRID_HEIGHT):
for col in range(GRID_WIDTH):
if grid_active[row][col] > 0:
active_row.append(row)
active_col.append(col)
active_cel.append(grid_active[row][col])
if grid_center[row][col] > 0 : < b r / > a r c = r o w < b r / > a c c = c o l < b r / > < / к о д > < b r / > В о т о д н а п р о в е р к а р о т а ц и и ( о ч е н ь д л и н н а я ) : < / p > < b r / > < c o d e > i f a c t i v e _ p i e c e = = 2 : < b r / > < b r / > i f r o t a t i o n _ s t a t e = = 0 : < b r / > < b r / > i f d i r e c t i o n = = - 1 : < b r / > t r y : < b r / > i f g r i d _ p l a c e d [ a r c - 1 ] [ a c c ] = = 0 a n d g r i d _ p l a c e d [ a r c ] [ a c c ] = = 0 a n d g r i d _ p l a c e d [ a r c + 1 ] [ a c c ] = = 0 a n d g r i d _ p l a c e d [ a r c + 1 ] [ a c c - 1 ] = = 0 : < b r / > f o r i i n r a n g e ( l e n ( a c t i v e _ r o w ) ) : < b r / > g r i d _ a c t i v e [ a c t i v e _ r o w [ i ] ] [ a c t i v e _ c o l [ i ] ] = 0 < b r / > g r i d _ c e n t e r [ a c t i v e _ r o w [ i ] ] [ a c t i v e _ c o l [ i ] ] = 0 < b r / > < b r / > g r i d _ c e n t e r [ a r c ] [ a c c ] = 1 < b r / > g r i d _ a c t i v e [ a r c - 1 ] [ a c c ] = a c t i v e _ c e l [ 0 ] < b r / > g r i d _ a c t i v e [ a r c ] [ a c c ] = a c t i v e _ c e l [ 0 ] < b r / > g r i d _ a c t i v e [ a r c + 1 ] [ a c c ] = a c t i v e _ c e l [ 0 ] < b r / > g r i d _ a c t i v e [ a r c + 1 ] [ a c c - 1 ] = a c t i v e _ c e l [ 0 ] < b r / > r o t a t i o n _ s t a t e = - 1 < b r / > r e t u r n 1 < b r / > < b r / > e x c e p t : < b r / > f o r r o w i n r a n g e ( G R I D _ H E I G H T ) : < b r / > f o r c o l i n r a n g e ( G R I D _ W I D T H ) : < b r / > g r i d _ a c t i v e [ r o w ] [ c o l ] = 0 < b r / > g r i d _ c e n t e r [ r o w ] [ c o l ] = 0 < b r / > f o r i i n r a n g e ( l e n ( a c t i v e _ r o w ) ) : < b r / > g r i d _ a c t i v e [ a c t i v e _ r o w [ i ] ] [ a c t i v e _ c o l [ i ] ] = a c t i v e _ c e l [ i ] < b r / > g r i d _ c e n t e r [ a r c ] [ a c c ] = 1 < b r / > < b r / > t r y : < b r / > i f g r i d _ p l a c e d [ a r c - 1 ] [ a c c + 1 ] = = 0 a n d g r i d _ p l a c e d [ a r c ] [ a c c + 1 ] = = 0 a n d g r i d _ p l a c e d [ a r c + 1 ] [ a c c + 1 ] = = 0 a n d g r i d _ p l a c e d [ arc+1][acc-1+1]==0:
for i in range(len(active_row)):
grid_active[active_row][active_col] = 0
grid_center[active_row][active_col] = 0

grid_center[arc][acc+1] = 1
grid_active[arc-1][acc+1] = active_cel[0]
grid_active[arc][acc+1] = active_cel[0]
grid_active[arc+1][acc+1] = active_cel[0]
grid_active[arc+1][acc-1+1] = active_cel[0]
rotation_state = -1
return 1

except:
for row in range(GRID_HEIGHT):
for col in range(GRID_WIDTH):
grid_active[row][col] = 0
grid_center[row][col] = 0
for i in range(len(active_row)):
grid_active[active_row][active_col] = active_cel
grid_center[arc][acc] = 1

try:
if grid_placed[arc-1-1][acc+1]==0 and grid_placed[arc-1][acc+1]==0 and grid_placed[arc+1-1][acc+1]==0 and grid_placed[arc+1-1][acc-1+1]==0:
for i in range(len(active_row)):
grid_active[active_row][active_col] = 0
grid_center[active_row][active_col[i]] = 0

grid_center[arc-1][acc+1] = 1
grid_active[arc-1-1][acc+1] = active_cel[0]
grid_active[arc-1][acc+1] = active_cel[0]
grid_active[arc+1-1][acc+1] = active_cel[0]
grid_active[arc+1-1][acc-1+1] = active_cel[0]
rotation_state = -1
return 1

except:
for row in range(GRID_HEIGHT):
for col in range(GRID_WIDTH):
grid_active[row][col] = 0
grid_center[row][col] = 0
for i in range(len(active_row)):
grid_active[active_row[i]][active_col[i]] = active_cel[i]
grid_center[arc][acc] = 1

try:
if grid_placed[arc+2][acc]==0 and grid_placed[arc+2][acc]==0 and grid_placed[arc+1+2][acc]==0 and grid_placed[arc+1+2][acc-1]==0:
for i in range(len(active_row)):
grid_active[active_row[i]][active_col[i]] = 0
grid_center[active_row[i]][active_col[i]] = 0

grid_center[arc+2][acc] = 1
grid_active[arc-1+2][acc] = active_cel[0]
grid_active[arc+2][acc] = active_cel[0]
grid_active[arc+1+2][acc] = active_cel[0]
grid_active[arc+1+2][acc-1] = active_cel[0]
rotation_state = -1
return 1

except:
for row in range(GRID_HEIGHT):
for col in range(GRID_WIDTH):
grid_active[row][col] = 0
grid_center[row][col] = 0
for i in range(len(active_row)):
grid_active[active_row[i]][active_col[i]] = active_cel[i]
grid_center[arc][acc] = 1

try:
if grid_placed[arc-1+2][acc+1]==0 and grid_placed[arc+2][acc+1]==0 and grid_placed[arc+1+1][acc+1]==0 and grid_placed[arc+1+2][acc-1+1]==0:
for i in range(len(active_row)):
grid_active[active_row[i]][active_col[i]] = 0
grid_center[active_row[i]][active_col[i]] = 0

grid_center[arc+2][acc+1] = 1
grid_active[arc-1+2][acc+1] = active_cel[0]
grid_active[arc+2][acc+1] = active_cel[0]
grid_active[arc+1+2][acc+1] = active_cel[0]
grid_active[arc+1+2][acc-1+1] = active_cel[0]
rotation_state = -1
return 1

except:
for row in range(GRID_HEIGHT):
for col in range(GRID_WIDTH):
grid_active[row][col] = 0
grid_center[row][col] = 0
for i in range(len(active_row)):
grid_active[active_row[i]][active_col[i]] = active_cel[i]
grid_center[arc][acc] = 1

return 2


Подробнее здесь: https://stackoverflow.com/questions/793 ... e-indexing
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»