Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 8, 2017 09:11:20

Aturo
Зарегистрирован: 2017-10-28
Сообщения: 24
Репутация: +  2  -
Профиль   Отправить e-mail  

Проблема со списком

Подскажите пожалуйста, почему ругается и как поправить?
выдаёт:

 выстрел по х: 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: не устроит).

Отредактировано Aturo (Ноя. 8, 2017 09:12:18)

Офлайн

#2 Ноя. 8, 2017 09:41:59

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Проблема со списком

  
>>> 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
мимо
...
>>> 



Офлайн

#3 Ноя. 8, 2017 09:43:37

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проблема со списком

    
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



Офлайн

#4 Ноя. 8, 2017 10:07:01

Aturo
Зарегистрирован: 2017-10-28
Сообщения: 24
Репутация: +  2  -
Профиль   Отправить e-mail  

Проблема со списком

py.user.next
При повторном попадании выдаёт:
 ValueError: list.remove(x): x not in list
решил пока не трогать remove т.к. ничего с ним не выходит и остановился на
 onex[i]=0
oney[i]=0
пока работает вроде. Спасибо всем за ответы.
FishHook
Шикарно, не знал что так можно. Это сильно упрощает мне задачу. Спасибо ^_^

Отредактировано Aturo (Ноя. 8, 2017 10:29:45)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version