Найти - Пользователи
Полная версия: Проблема со списком
Начало » Центр помощи » Проблема со списком
1
Aturo
Подскажите пожалуйста, почему ругается и как поправить?
выдаёт:
 выстрел по х: 2
выстрел по y: 2
мимо
выстрел по х: 1
выстрел по y: 1
убил
[1, 10, 10] [10, 10, 1]
Traceback (most recent call last):
if (shotx==onex[i]) and (shoty==oney[i]):
IndexError: list index out of range
код:
 onex=[1,1,10,10]
oney=[10,1,10,1]
t='true'
while t:
    pr=len(onex)
    shotx=int(input('выстрел по х: '))
    shoty=int(input('выстрел по y: '))
    for i in range(len(onex)):
        if (shotx==onex[i]) and (shoty==oney[i]):
            print('убил')
            onex.remove(i)
            oney.remove(i)
            ##print(onex, oney)
    if pr==len(onex):
        print('мимо')
Полагаю изменять итерируемый диапазон в теле цикла не лучшая идея, но по другому я ещё не умею (да и препод врятли разрешит). Подскажите пожалуйста как это записать чтобы нормально работало без исключений (try: except: не устроит).
py.user.next
  
>>> def f():
...     onex = [1, 1, 10, 10]
...     oney = [10, 1, 10, 1]
...     t = True
...     while t:
...         pr = len(onex)
...         shotx = int(input('выстрел по х: '))
...         shoty = int(input('выстрел по y: '))
...         for i in range(len(onex)):
...             if shotx == onex[i] and shoty == oney[i]:
...                 onex.remove(i)
...                 oney.remove(i)
...                 print('убил')
...                 break
...         if pr == len(onex):
...             print('мимо')
... 
>>> f()
выстрел по х: 2
выстрел по y: 2
мимо
выстрел по х: 1
выстрел по y: 1
убил
выстрел по х: 1
выстрел по y: 1
мимо
...
>>> 
FishHook
    
ships = [
    [0, 0, 0, 1, 0, 1],
    [0, 1, 1, 1, 0, 0],
    [0, 1, 1, 0, 0, 0],
    [1, 1, 1, 1, 0, 1],
    [0, 1, 0, 1, 0, 0],
    [1, 0, 0, 0, 0, 1],
]
while True:
    shotx = int(input('выстрел по х: '))
    shoty = int(input('выстрел по y: '))
    if ships[shotx][shoty] == 0:
        print("Мимо")
    elif ships[shotx][shoty] == 1:
        print("Убил")
    else:
        print("Уже стрелял")
    ships[shotx][shoty] = 3
Aturo
py.user.next
При повторном попадании выдаёт:
 ValueError: list.remove(x): x not in list
решил пока не трогать remove т.к. ничего с ним не выходит и остановился на
 onex[i]=0
oney[i]=0
пока работает вроде. Спасибо всем за ответы.
FishHook
Шикарно, не знал что так можно. Это сильно упрощает мне задачу. Спасибо ^_^
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB