Это ошибка, которую я получаю, когда запускаю код: Traceback (последний вызов был последним): файл "C: /Users/Ian/.PyCharmCE2018.2/config/scratches/pyramid.py", строка 95, вelif random_roll == 2 и (pd [y] [x])! = 3 \ IndexError: список индекса выходит за пределы диапазона
Ошибка меняется каждый раз, когда я запускаю программу, потому что она идет по другому пути (или этодолжен)У меня есть четыре направления, которые я пытаюсь пройти вверх влево, вверх вправо, вниз влево, вниз от каждого узла в PD, если в рандомизированном направлении нет узла, я регистрирую его и пробую снова, пока не найду правильное направление дляидти.У меня есть проблемы при переходе DL от 2 до 6 вместо 5, а UR от 9 даст ошибку за пределами.Я провел несколько часов, играя с координатами, но безрезультатно.Кто-нибудь, пожалуйста, помогите мне, так как я не могу понять, почему это выходит за пределы.
import random
pd = [ #This is the visual of the pyramid
[ 1 ], #[0][0] row and total col# ex [2][1] = 5
[ 2, 3 ], #[1][1]
[ 4, 5, 6, ], #[2][2]
[ 7, 8, 9, 10, ], #[3][3]
[ 11, 12, 13, 14, 15, ], #[4][4]
[ 16, 17, 18, 19, 20, 21, ], #[5][5]
]
dots_list = [[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21]]
'''
dots_list[0].append('. . . .')
dots_list[6].append('*')
for i in range(len(dots_list)):
for j in range(len(dots_list[i])):
print(dots_list[i][j], end=' ')
print()
'''
x = 0 # represents left and right direction in pd -- adding goes right, subtracting goes left
y = 0 # represents up and down direction in pd -- adding goes down, subtracting goes up
lower_bound = 1 #used as lower bound in dice selection
upper_bound = 4 #used as upper bound in dice selection
move_counter = 0 #used to count the total number of moves made in game
#print("Starting position: ",pd[y][x]) # The starting position used for debugging
start_position = pd[y][x] # The starting point of the game [y][x] up/down y, left/right x
# ---- loop begin ----
print('begin loop')
print('------------------------------------------------------------------')
while any(len(m) < 2 for m in dots_list):
random_roll = random.randint(lower_bound, upper_bound) # Randomly selects a number from 1 to 4 to be used as fair die roll
if random_roll == 1:
print("Upper left Random Roll: " ,random_roll)
elif random_roll == 2:
print("Upper left Random Roll: ", random_roll)
elif random_roll == 3:
print("Upper left Random Roll: ", random_roll)
else:
print("Upper left Random Roll: ", random_roll)
#--------------------------------pd bounds checking-------------------------------------------
if random_roll == 1 and (pd[y][x]) != 2 \
and (pd[y][x]) != 4 and (pd[y][x]) != 11 and (pd[y][x]) != 16:
#--------------------------------pd bounds checking-------------------------------------------
print('upper left x: ', x, 'y:', y)
if pd[y][x] == 1 or pd[y][x] == 2 or pd[y][x] == 4 or pd[y][x] == 7 or pd[y][x] == 11 or pd[y][x] == 16:
print('Invalid Direction -- Move Count Increased')
print('------------------------------------------------------------------')
dots_list[pd[y][x]].append('.')
move_counter += 1
else:
new_pos = pd[y-1][x-1]
y-=1
x-=1
#print('x: ', x, 'y:', y)
print('upper left new pos: ' , new_pos)
print('------------------------------------------------------------------')
start_position = new_pos
# print('st pos', start_position)
dots_list[start_position].append('.')
move_counter += 1
#--------------------------------pd bounds checking-------------------------------------------
elif random_roll == 2 and (pd[y][x]) != 3 \
and (pd[y][x]) != 6 and (pd[y][x]) != 10 and (pd[y][x]) != 15 and (pd[y][x]) != 21:
# --------------------------------pd bounds checking-------------------------------------------
print('upper right x: ', x, 'y:', y)
print()
if pd[y][x] == 1:
print('Invalid Direction -- Move Count Increased')
print('------------------------------------------------------------------')
dots_list[0].append('.')
move_counter += 1
else:
new_pos = pd[y][x]
y-=1
x+=1
print('x: ', x, 'y:', y)
print('upper right new pos: ' , new_pos)
print('------------------------------------------------------------------')
start_position = new_pos
#print('st pos', start_position)
dots_list[start_position].append('.')
move_counter += 1
#--------------------------------pd bounds checking-------------------------------------------
elif random_roll == 3 and (pd[y][x]) != 16 and (pd[y][x]) != 17 \
and (pd[y][x]) != 18 and (pd[y][x]) != 19 and (pd[y][x]) != 20 and (pd[y][x]) != 21 \
and (pd[y][x]) != 6 and (pd[y][x]) != 10 and (pd[y][x]) !=15 :
# --------------------------------pd bounds checking-------------------------------------------
print('down left x: ', x, 'y:', y)
x+1
new_pos = pd[y+1][x]
x-=1
#y+=1
print('x: ', x, 'y:' , y)
print('down left new pos: ' , new_pos)
start_position = new_pos
#print('start_position: ', start_position)
print('------------------------------------------------------------------')
dots_list[start_position-1].append('.')
move_counter += 1
#--------------------------------pd bounds checking-------------------------------------------
elif random_roll == 4 and (pd[y][x]) != 16 and (pd[y][x]) != 17 \
and (pd[y][x]) != 18 and (pd[y][x]) != 19 and (pd[y][x]) != 20 and (pd[y][x]) != 21 :
# --------------------------------pd bounds checking-------------------------------------------
print('down right x: ', x, 'y:', y)
new_pos = pd[y+1][x+1]
x+=1
y+=1
print('x: ', x, 'y:', y)
print('down right new pos: ' , new_pos)
print('------------------------------------------------------------------')
start_position = new_pos
#print('st pos', start_position)
dots_list[start_position-1].append('.')
move_counter += 1
else:
#print('Invalid Direction -- Move Count Increased:: rr: ' , random_roll)
start_position = pd[y][x]
#print('st pos', start_position)
dots_list[start_position-1].append('.')
move_counter += 1
# ---- loop end ----
# ---- Results printing ----
print('Move_counter:' ,move_counter)
for i in range(len(dots_list)):
for j in range(len(dots_list[i])):
print(dots_list[i][j], end=' ')
print()