Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 22, 2017 06:10:08

gnus
Зарегистрирован: 2014-01-06
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Выйти из цикла

Не получается, как надо, выйти из вложенного цикла.
Есть ‘поле’ в виде вложенного списка. Нужно вывести первую попавшуюся координату элемента, где есть'I' и которой нет в другом списке.

[code bash]
['O', 'O', 'I', 'O', 'O', 'O', 'O', 'O', 'O', 'O']
['I', 'I', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O']
['O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O']
['O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O']
['O', 'O', 'O', 'O', 'O', 'O', 'I', 'O', 'I', 'I']
['O', 'O', 'O', 'O', 'O', 'I', 'O', 'I', 'O', 'O']
['O', 'O', 'O', 'O', 'O', 'I', 'O', 'I', 'O', 'O']
['I', 'I', 'I', 'O', 'O', 'O', 'I', 'O', 'O', 'O']
['O', 'O', 'I', 'O', 'O', 'O', 'O', 'O', 'O', 'O']
['O', 'O', 'I', 'O', 'O', 'O', 'O', 'O', 'O', 'I']
[/code]
[code python]
imun_kletki=[(0,2)] #координаты имунных клеток
# перебираем поле, находим перую попавшуюся имунную клетку
# и возвращаем ее координату
def seek_imun():
for x in range(n):
for y in range(m):
if field[x][y]=='I' and (x,y) not in imun_kletki:
koord=(x,y)
break
break
print(koord)
return koord
seek_imun()
[/code]
Т.е. в данном случае функция должна вывести (1,0), a получается (7,0)

Отредактировано gnus (Янв. 22, 2017 06:20:08)

Офлайн

#2 Янв. 22, 2017 06:50:50

wi34rd
Зарегистрирован: 2016-10-08
Сообщения: 89
Репутация: +  2  -
Профиль   Отправить e-mail  

Выйти из цикла

 #
imun_kletki=[(0,2)]
def seek_imun(field):
    for x in range(len(field)):
        for y in range(len(field[x])):
            if field[x][y] == 'I' and (x, y) not in imun_kletki:
                return x, y
print(seek_imun(field))

Офлайн

#3 Янв. 22, 2017 07:30:59

gnus
Зарегистрирован: 2014-01-06
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Выйти из цикла

Оказывается, просто сразу вывести значение. Снова все усложняю, туплю. Спасибо.

Офлайн

#4 Янв. 22, 2017 08:01:09

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

Выйти из цикла

wi34rd
ИМХО range(len(…)) - плохая практика, лично у меня такой код вызывает ощущение не вполне грамотного переноса с какого-то другого языка, как будто программист плохо владеет инструментарием питона и не парится по этому поводу, работает да и ладно. Скажите, вам разве вот такой подход не нравится больше?


 def seek_imun(field):
    for x, row in enumerate(field):
        for y, value in enumerate(row):
            if value == 'I' and (x, y) not in imun_kletki:
                return x, y



Офлайн

#5 Янв. 22, 2017 08:23:28

wi34rd
Зарегистрирован: 2016-10-08
Сообщения: 89
Репутация: +  2  -
Профиль   Отправить e-mail  

Выйти из цикла

FishHook, вы меня раскусили, я недавно только с синтаксисом пайтона ознакомился.

Офлайн

#6 Янв. 22, 2017 13:07:43

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2683
Репутация: +  182  -
Профиль   Отправить e-mail  

Выйти из цикла

Тебе нужно найти все координаты элементов “I”? Это можно сделать более функционально:

 kletki = [
	['O', 'O', 'I', 'O', 'O', 'O', 'O', 'O', 'O', 'O'],
	['I', 'I', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'],
	['O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'],
	['O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'],
	['O', 'O', 'O', 'O', 'O', 'O', 'I', 'O', 'I', 'I'],
	['O', 'O', 'O', 'O', 'O', 'I', 'O', 'I', 'O', 'O'],
	['O', 'O', 'O', 'O', 'O', 'I', 'O', 'I', 'O', 'O'],
	['I', 'I', 'I', 'O', 'O', 'O', 'I', 'O', 'O', 'O'],
	['O', 'O', 'I', 'O', 'O', 'O', 'O', 'O', 'O', 'O'],
	['O', 'O', 'I', 'O', 'O', 'O', 'O', 'O', 'O', 'I']
]
imun_kletki = reduce(lambda x, y: x + y, [ [ (y, x) for (x, z) in enumerate(s) if z == "I" ] for (y, s) in enumerate(kletki) ])



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Янв. 22, 2017 13:18:10)

Онлайн

#7 Янв. 23, 2017 09:03:13

heyyyy
Зарегистрирован: 2017-01-22
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Выйти из цикла

Rodegast, только надо учитывать что в 3 версии его надо импортировать из модуля functools

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version