2014-01-02 3 views
0

Вот мой код для части моей игры «Hunt the Wumpus (WAMPA)». Он работает, если я делаю диапазон (0,20), но если я это сделаю (1,21), то есть еще 20 пещер, но нет «Пещерного номера 0» ..., который только я финишный ... и это говорит, что индекс списка выходит за пределы диапазона ... не уверен, почему перемещение всего на одну цифру в моем диапазоне будет делать это, поскольку нет прямой ссылки на конкретный номер в этом диапазоне где-нибудь еще ... поэтому удаление 0 shouldn «т быть проблемой, но увы ... это ... вот код, где ошибка от:IndexError: list index находится за пределами допустимого диапазона

from random import choice 

cave_numbers = range(1,21) 
caves = [] 
for i in cave_numbers: 
    caves.append([]) 

for i in cave_numbers: 
    for j in range(3): 
     passage_to = choice(cave_numbers) 
     caves[i].append(passage_to) 

а вот код в полном объеме, только ради ЗАВЕРШЕНИЕ в:

from random import choice 

cave_numbers = range(1,21) 
caves = [] 
for i in cave_numbers: 
    caves.append([]) 

for i in cave_numbers: 
    for j in range(3): 
     passage_to = choice(cave_numbers) 
     caves[i].append(passage_to) 


wampa_location = choice(cave_numbers) 
wampa_friend_location = choice(cave_numbers) 
player_location = choice(cave_numbers) 
while (player_location == wampa_location or player_location == wampa_friend_location): 
    player_location = choice(cave_numbers) 

print("Welcome to Hunt the Wampa!") 
print("You can see", len(cave_numbers), "caves.") 
print("To play, just type the number") 
print("of the save you wish to enter next.") 

player_location != wampa_location 

while True: 
    if player_location != wampa_location: 
     print("You are in cave", player_location) 
     print("From here, you can see caves:", caves[player_location]) 
     if(player_location == wampa_location -1 or player_location == wampa_location +1): 
       print("I smell a Wampa!") 
     if(player_location == wampa_friend_location -1 or player_location == wampa_friend_location +1): 
     print("I smell a stinky Wampa!") 
    print("Which cave next?") 
    player_input = input(">") 
    if(not player_input.isdigit() or 
      int(player_input) not in caves[player_location]): 
      print(player_input, "isn't a cave you can see from here!") 
    else: 
      player_location = int(player_input) 
      if player_location == wampa_location: 
       print("Aargh! You got eaten by a Wampa!") 
      if player_location == wampa_friend_location: 
       print("Aargh! You got eaten by the Wampa's friend!") 

Прошу прощения, если на отступлении это плохо, некоторые из них линии обертывают, и я потерял свое место ... но я думаю, что ошибка в этих первых 11 строках в любом случае.

Спасибо ребята

ответ

1

Ваши отступов хорошо, но вам нужно положить (0, 20), потому что на самом деле происходит, когда вы добавляете туда он не определяет, что каждый пещеру [INT] идет к, если вы было бы использовать словарь, это было бы вполне возможно, но что происходит, вы закончили с caves = [[]*20] Итак, когда вы говорите for i in cave_numbers, он пытается начать с 1 и перейти к 20, но так как python основан на нуле, он вызывает ошибку, когда вы достигаете 20, потому что caves действительно начинается с 0 и переходит к 19, который по-прежнему составляет 20 единиц данных.

0
for i in cave_numbers: 
    for j in range(3): 
     passage_to = choice(cave_numbers) 
     caves[i].append(passage_to) 

Это занимает каждое число в диапазоне 1..20 и пытается использовать его в качестве индекса в списке длины 20, получение пещер номер 2, 3, ... 20. Когда он попадает в I = 20, он обнаруживает, что в списке нет элемента с этим индексом и умирает.

0

Изменение диапазона от (0,20) до (1,21) не изменяет размер результирующего списка, как и следовало ожидать. Длина остается равной 20.

Однако, поскольку вы используете значения в своем списке диапазонов в качестве индексов, ваш конечный индекс слишком высок. Нет пещер [20], потому что для этого потребуется список из 21 элемента, а в вашем списке всего 20 элементов (в обоих случаях).

0

Возможно, вы хотите что-то подобное? (испытания)

#!/usr/local/cpython-3.3/bin/python 

from random import choice 

cave_numbers = range(1,21) 
caves = [] 
for i in cave_numbers: 
    caves.append([]) 

for index, cave in enumerate(caves): 
    for j in range(3): 
     passage_to = choice(cave_numbers) 
     cave.append(passage_to) 
Смежные вопросы