IndexError: line *** list index out of range
IndexError: line *** list index out of range
IndexError: list index out of range.
我正在使用 raspberry pi 3,编程语言是 Python 我正在使用 Pygame 零和 Thonny 与 Python [=18 相同=].
为什么会出现我的错误?
import time, random, math
WIDTH = 800 #window size
HEIGHT = 800
PLAYER_NAME = "me"
FRIEND1_NAME = "him1"
FRIEND2_NAME = "him2"
#PLAYER variables
current_room = 31 # start room = 31
top_left_x = 100
top_left_y = 150
DEMO_OBJECTS = [images.floor, images.pillar, images.superpellot, images.pellot, images.pac, images.goee]
TILE_SIZE = 50
player_y, player_x = 2, 5
game_over = False
PLAYER = {
"left": [images.spacesuit_left, images.spacesuit_left_1,
images.spacesuit_left_2, images.spacesuit_left_3,
images.spacesuit_left_4
],
"right": [images.spacesuit_right, images.spacesuit_right_1,
images.spacesuit_right_2, images.spacesuit_right_3,
images.spacesuit_right_4
],
"up": [images.spacesuit_back, images.spacesuit_back_1,
images.spacesuit_back_2, images.spacesuit_back_3,
images.spacesuit_back_4
],
"down": [images.spacesuit_front, images.spacesuit_front_1,
images.spacesuit_front_2, images.spacesuit_front_3,
images.spacesuit_front_4
]
}
player_direction = "down"
player_frame = 0
player_image = PLAYER[player_direction][player_frame]
player_offset_x, player_offset_y = 0, 0
PLAYER_SHADOW = {
"left": [images.spacesuit_left_shadow, images.spacesuit_left_1_shadow,
images.spacesuit_left_2_shadow, images.spacesuit_left_3_shadow,
images.spacesuit_left_3_shadow
],
"right": [images.spacesuit_right_shadow, images.spacesuit_right_1_shadow,
images.spacesuit_right_2_shadow,
images.spacesuit_right_3_shadow, images.spacesuit_right_3_shadow
],
"up": [images.spacesuit_back_shadow, images.spacesuit_back_1_shadow,
images.spacesuit_back_2_shadow, images.spacesuit_back_3_shadow,
images.spacesuit_back_3_shadow
],
"down": [images.spacesuit_front_shadow, images.spacesuit_front_1_shadow,
images.spacesuit_front_2_shadow, images.spacesuit_front_3_shadow,
images.spacesuit_front_3_shadow
]
}
player_image_shadow = PLAYER_SHADOW["down"][0]
PILLARS = [
images.pillar, images.pillar_95, images.pillar_80,
images.pillar_60, images.pillar_50
]
wall_transparency_frame = 0
BLACK = (0, 0, 0)
BLUE = (0, 155, 255)
YELLOW = (255, 255, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (128, 0, 0)
air, energy = 100, 100
suit_stitched, air_fixed = False, False
launch_frame = 0
MAP_WIDTH = 5
MAP_HEIGHT = 10
MAP_SIZE = MAP_WIDTH * MAP_HEIGHT
GAME_MAP = [ ["Room 0 - where unused objects are kept", 0, 0, False, False] ]
outdoor_rooms = range(1, 26)
for planetsectors in range(1, 26): #rooms 1 to 25 are generated here
GAME_MAP.append( ["The dusty planet surface", 13, 13, True, True] )
GAME_MAP += [
#["Room name", height, width, Top exit?, Right exit?]
["The airlock", 10, 5, False, False], # room 26
["The engineering lab", 13, 13, False, False], # room 27
["Poodle Mission Control", 9, 13, False, True], # room 28
["The viewing gallery", 9, 15, False, False], # room 29
["The crew's bathroom", 5, 5, False, False], # room 30
["The airlock entry bay", 7, 11, True, True], # room 31
["Left elbow room", 9, 7, True, False], # room 32
["Right elbow room", 7, 13, True, True], # room 33
["The science lab", 13, 13, False, True], # room 34
["The greenhouse", 13, 13, True, False], # room 35
[PLAYER_NAME + "'s sleeping quarters", 9, 11, False, False], # room 36
["West corridor", 15, 5, True, True], # room 37
["The briefing room", 7, 13, False, True], # room 38
["The crew's community room", 11, 13, True, False], # room 39
["Main Mission Control", 14, 14, False, False], # room 40
["The sick bay", 12, 7, True, False], # room 41
["West corridor", 9, 7, True, False], # room 42
["Utilities control room", 9, 9, False, True], # room 43
["Systems engineering bay", 9, 11, False, False], # room 44
["Security portal to Mission Control", 7, 7, True, False], # room 45
[FRIEND1_NAME + "'s sleeping quarters", 9, 11, True, True], # room 46
[FRIEND2_NAME + "'s sleeping quarters", 9, 11, True, True], # room 47
["The pipeworks", 13, 11, True, False], # room 48
["The chief scientist's office", 9, 7, True, True], # room 49
["The robot workshop", 9, 11, True, False] # room 50
]
#simple sanity check on map above to check data entry
assert len(GAME_MAP)-1 == MAP_SIZE, "Map size and GAME_MAP don't match"
objects = {
0: [images.floor, None, "The floor is shiny and clean"],
1: [images.pillar, images.full_shadow, "The wall is smooth and cold"],
}
items_player_may_carry = list(range(53, 82))
# Numbers below are for floor, pressure pad, soil, toxic floor.
items_player_may_stand_on = items_player_may_carry + [0, 39, 2, 48]
scenery = {
26: [[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 0], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 0, 0], [1, 0, 1], [1, 0, 0], [1, 0, 0], [0, 0, 0], [1,1, 1], [1, 1, 1], [1, 1, 1], [1, 1]],
27: [[33,5,5], [33,1,1], [33,1,8], [47,5,2],
[47,3,10], [47,9,8], [42,1,6]],
28: [[27,0,3], [41,4,3], [41,4,7]],
29: [[7,2,6], [6,2,8], [12,1,13], [44,0,1],
[36,4,10], [10,1,1], [19,4,2], [17,4,4]],
30: [[34,1,1], [35,1,3]],
31: [[11,1,1], [19,1,8], [46,1,3]],
32: [[48,2,2], [48,2,3], [48,2,4], [48,3,2], [48,3,3],
[48,3,4], [48,4,2], [48,4,3], [48,4,4]],
33: [[13,1,1], [13,1,3], [13,1,8], [13,1,10], [48,2,1],
[48,2,7], [48,3,6], [48,3,3]],
34: [[37,2,2], [32,6,7], [37,10,4], [28,5,3]],
35: [[16,2,9], [16,2,2], [16,3,3], [16,3,8], [16,8,9], [16,8,2], [16,1,8],
[16,1,3], [12,8,6], [12,9,4], [12,9,8],
[15,4,6], [12,7,1], [12,7,11]],
36: [[4,3,1], [9,1,7], [8,1,8], [8,1,9],
[5,5,4], [6,5,7], [10,1,1], [12,1,2]],
37: [[48,3,1], [48,3,2], [48,7,1], [48,5,2], [48,5,3],
[48,7,2], [48,9,2], [48,9,3], [48,11,1], [48,11,2]],
38: [[43,0,2], [6,2,2], [6,3,5], [6,4,7], [6,2,9], [45,1,10]],
39: [[38,1,1], [7,3,4], [7,6,4], [5,3,6], [5,6,6],
[6,3,9], [6,6,9], [45,1,11], [12,1,8], [12,1,4]],
40: [[41,5,3], [41,5,7], [41,9,3], [41,9,7],
[13,1,1], [13,1,3], [42,1,12]],
41: [[4,3,1], [10,3,5], [4,5,1], [10,5,5], [4,7,1],
[10,7,5], [12,1,1], [12,1,5]],
44: [[46,4,3], [46,4,5], [18,1,1], [19,1,3],
[19,1,5], [52,4,7], [14,1,8]],
45: [[48,2,1], [48,2,2], [48,3,3], [48,3,4], [48,1,4], [48,1,1]],
46: [[10,1,1], [4,1,2], [8,1,7], [9,1,8], [8,1,9], [5,4,3], [7,3,2]],
47: [[9,1,1], [9,1,2], [10,1,3], [12,1,7], [5,4,4], [6,4,7], [4,1,8]],
48: [[17,4,1], [17,4,2], [17,4,3], [17,4,4], [17,4,5], [17,4,6], [17,4,7],
[17,8,1], [17,8,2], [17,8,3], [17,8,4],
[17,8,5], [17,8,6], [17,8,7], [14,1,1]],
49: [[14,2,2], [14,2,4], [7,5,1], [5,5,3], [48,3,3], [48,3,4]],
50: [[45,4,8], [11,1,1], [13,1,8], [33,2,1], [46,4,6]]
}
checksum = 0
check_counter = 0
for key, room_scenery_list in scenery.items():
for scenery_item_list in room_scenery_list:
checksum += (scenery_item_list[0] * key
+ scenery_item_list[1] * (key + 1)
+ scenery_item_list[2] * (key + 2))
check_counter += 1
计算校验和时,您使用scenery_item_list[2] * (key + 2)
。如果 scenery_item_list
的元素少于 3 个,并且其中一项只是 [1, 1]
.
,则会出现错误
如果某些项目可以包含更少的元素是正确的,那么您不应该 hard-code 该计算中的索引。将其更改为遍历列表。
for key, room_scenery_list in scenery.items():
for scenery_item_list in room_scenery_list:
checksum += sum(scenery_item_list[i] * (key + i) for i in range(len(scenery_item_list)))
check_counter += 1
IndexError: list index out of range.
我正在使用 raspberry pi 3,编程语言是 Python 我正在使用 Pygame 零和 Thonny 与 Python [=18 相同=]. 为什么会出现我的错误?
import time, random, math
WIDTH = 800 #window size
HEIGHT = 800
PLAYER_NAME = "me"
FRIEND1_NAME = "him1"
FRIEND2_NAME = "him2"
#PLAYER variables
current_room = 31 # start room = 31
top_left_x = 100
top_left_y = 150
DEMO_OBJECTS = [images.floor, images.pillar, images.superpellot, images.pellot, images.pac, images.goee]
TILE_SIZE = 50
player_y, player_x = 2, 5
game_over = False
PLAYER = {
"left": [images.spacesuit_left, images.spacesuit_left_1,
images.spacesuit_left_2, images.spacesuit_left_3,
images.spacesuit_left_4
],
"right": [images.spacesuit_right, images.spacesuit_right_1,
images.spacesuit_right_2, images.spacesuit_right_3,
images.spacesuit_right_4
],
"up": [images.spacesuit_back, images.spacesuit_back_1,
images.spacesuit_back_2, images.spacesuit_back_3,
images.spacesuit_back_4
],
"down": [images.spacesuit_front, images.spacesuit_front_1,
images.spacesuit_front_2, images.spacesuit_front_3,
images.spacesuit_front_4
]
}
player_direction = "down"
player_frame = 0
player_image = PLAYER[player_direction][player_frame]
player_offset_x, player_offset_y = 0, 0
PLAYER_SHADOW = {
"left": [images.spacesuit_left_shadow, images.spacesuit_left_1_shadow,
images.spacesuit_left_2_shadow, images.spacesuit_left_3_shadow,
images.spacesuit_left_3_shadow
],
"right": [images.spacesuit_right_shadow, images.spacesuit_right_1_shadow,
images.spacesuit_right_2_shadow,
images.spacesuit_right_3_shadow, images.spacesuit_right_3_shadow
],
"up": [images.spacesuit_back_shadow, images.spacesuit_back_1_shadow,
images.spacesuit_back_2_shadow, images.spacesuit_back_3_shadow,
images.spacesuit_back_3_shadow
],
"down": [images.spacesuit_front_shadow, images.spacesuit_front_1_shadow,
images.spacesuit_front_2_shadow, images.spacesuit_front_3_shadow,
images.spacesuit_front_3_shadow
]
}
player_image_shadow = PLAYER_SHADOW["down"][0]
PILLARS = [
images.pillar, images.pillar_95, images.pillar_80,
images.pillar_60, images.pillar_50
]
wall_transparency_frame = 0
BLACK = (0, 0, 0)
BLUE = (0, 155, 255)
YELLOW = (255, 255, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (128, 0, 0)
air, energy = 100, 100
suit_stitched, air_fixed = False, False
launch_frame = 0
MAP_WIDTH = 5
MAP_HEIGHT = 10
MAP_SIZE = MAP_WIDTH * MAP_HEIGHT
GAME_MAP = [ ["Room 0 - where unused objects are kept", 0, 0, False, False] ]
outdoor_rooms = range(1, 26)
for planetsectors in range(1, 26): #rooms 1 to 25 are generated here
GAME_MAP.append( ["The dusty planet surface", 13, 13, True, True] )
GAME_MAP += [
#["Room name", height, width, Top exit?, Right exit?]
["The airlock", 10, 5, False, False], # room 26
["The engineering lab", 13, 13, False, False], # room 27
["Poodle Mission Control", 9, 13, False, True], # room 28
["The viewing gallery", 9, 15, False, False], # room 29
["The crew's bathroom", 5, 5, False, False], # room 30
["The airlock entry bay", 7, 11, True, True], # room 31
["Left elbow room", 9, 7, True, False], # room 32
["Right elbow room", 7, 13, True, True], # room 33
["The science lab", 13, 13, False, True], # room 34
["The greenhouse", 13, 13, True, False], # room 35
[PLAYER_NAME + "'s sleeping quarters", 9, 11, False, False], # room 36
["West corridor", 15, 5, True, True], # room 37
["The briefing room", 7, 13, False, True], # room 38
["The crew's community room", 11, 13, True, False], # room 39
["Main Mission Control", 14, 14, False, False], # room 40
["The sick bay", 12, 7, True, False], # room 41
["West corridor", 9, 7, True, False], # room 42
["Utilities control room", 9, 9, False, True], # room 43
["Systems engineering bay", 9, 11, False, False], # room 44
["Security portal to Mission Control", 7, 7, True, False], # room 45
[FRIEND1_NAME + "'s sleeping quarters", 9, 11, True, True], # room 46
[FRIEND2_NAME + "'s sleeping quarters", 9, 11, True, True], # room 47
["The pipeworks", 13, 11, True, False], # room 48
["The chief scientist's office", 9, 7, True, True], # room 49
["The robot workshop", 9, 11, True, False] # room 50
]
#simple sanity check on map above to check data entry
assert len(GAME_MAP)-1 == MAP_SIZE, "Map size and GAME_MAP don't match"
objects = {
0: [images.floor, None, "The floor is shiny and clean"],
1: [images.pillar, images.full_shadow, "The wall is smooth and cold"],
}
items_player_may_carry = list(range(53, 82))
# Numbers below are for floor, pressure pad, soil, toxic floor.
items_player_may_stand_on = items_player_may_carry + [0, 39, 2, 48]
scenery = {
26: [[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 0], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 0, 0], [1, 0, 1], [1, 0, 0], [1, 0, 0], [0, 0, 0], [1,1, 1], [1, 1, 1], [1, 1, 1], [1, 1]],
27: [[33,5,5], [33,1,1], [33,1,8], [47,5,2],
[47,3,10], [47,9,8], [42,1,6]],
28: [[27,0,3], [41,4,3], [41,4,7]],
29: [[7,2,6], [6,2,8], [12,1,13], [44,0,1],
[36,4,10], [10,1,1], [19,4,2], [17,4,4]],
30: [[34,1,1], [35,1,3]],
31: [[11,1,1], [19,1,8], [46,1,3]],
32: [[48,2,2], [48,2,3], [48,2,4], [48,3,2], [48,3,3],
[48,3,4], [48,4,2], [48,4,3], [48,4,4]],
33: [[13,1,1], [13,1,3], [13,1,8], [13,1,10], [48,2,1],
[48,2,7], [48,3,6], [48,3,3]],
34: [[37,2,2], [32,6,7], [37,10,4], [28,5,3]],
35: [[16,2,9], [16,2,2], [16,3,3], [16,3,8], [16,8,9], [16,8,2], [16,1,8],
[16,1,3], [12,8,6], [12,9,4], [12,9,8],
[15,4,6], [12,7,1], [12,7,11]],
36: [[4,3,1], [9,1,7], [8,1,8], [8,1,9],
[5,5,4], [6,5,7], [10,1,1], [12,1,2]],
37: [[48,3,1], [48,3,2], [48,7,1], [48,5,2], [48,5,3],
[48,7,2], [48,9,2], [48,9,3], [48,11,1], [48,11,2]],
38: [[43,0,2], [6,2,2], [6,3,5], [6,4,7], [6,2,9], [45,1,10]],
39: [[38,1,1], [7,3,4], [7,6,4], [5,3,6], [5,6,6],
[6,3,9], [6,6,9], [45,1,11], [12,1,8], [12,1,4]],
40: [[41,5,3], [41,5,7], [41,9,3], [41,9,7],
[13,1,1], [13,1,3], [42,1,12]],
41: [[4,3,1], [10,3,5], [4,5,1], [10,5,5], [4,7,1],
[10,7,5], [12,1,1], [12,1,5]],
44: [[46,4,3], [46,4,5], [18,1,1], [19,1,3],
[19,1,5], [52,4,7], [14,1,8]],
45: [[48,2,1], [48,2,2], [48,3,3], [48,3,4], [48,1,4], [48,1,1]],
46: [[10,1,1], [4,1,2], [8,1,7], [9,1,8], [8,1,9], [5,4,3], [7,3,2]],
47: [[9,1,1], [9,1,2], [10,1,3], [12,1,7], [5,4,4], [6,4,7], [4,1,8]],
48: [[17,4,1], [17,4,2], [17,4,3], [17,4,4], [17,4,5], [17,4,6], [17,4,7],
[17,8,1], [17,8,2], [17,8,3], [17,8,4],
[17,8,5], [17,8,6], [17,8,7], [14,1,1]],
49: [[14,2,2], [14,2,4], [7,5,1], [5,5,3], [48,3,3], [48,3,4]],
50: [[45,4,8], [11,1,1], [13,1,8], [33,2,1], [46,4,6]]
}
checksum = 0
check_counter = 0
for key, room_scenery_list in scenery.items():
for scenery_item_list in room_scenery_list:
checksum += (scenery_item_list[0] * key
+ scenery_item_list[1] * (key + 1)
+ scenery_item_list[2] * (key + 2))
check_counter += 1
计算校验和时,您使用scenery_item_list[2] * (key + 2)
。如果 scenery_item_list
的元素少于 3 个,并且其中一项只是 [1, 1]
.
如果某些项目可以包含更少的元素是正确的,那么您不应该 hard-code 该计算中的索引。将其更改为遍历列表。
for key, room_scenery_list in scenery.items():
for scenery_item_list in room_scenery_list:
checksum += sum(scenery_item_list[i] * (key + i) for i in range(len(scenery_item_list)))
check_counter += 1