Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 28, 2014 01:33:12

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

выйти из всех циклов

Budulianin
Опоздали

Офлайн

#2 Сен. 28, 2014 01:35:10

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

выйти из всех циклов

in
Я конечно извиняюсь, но это как-то ужасно.
Прочитав код, меня немного заклинило.
Ты хочешь прервать

def checkBlackCount (self, extraData):
        countFlag = False
        for i in range(11): # Ты хочешь прервать тут ?
            for j in range(11):
                figure = self.field[i][j]
                if figure == 1:
                    countFlag = True
        if countFlag == False:
            extraData['win'] = True

Посмотри в сторону try https://docs.python.org/2/tutorial/errors.html#handling-exceptions

Офлайн

#3 Сен. 28, 2014 01:39:10

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

выйти из всех циклов

4kpt_II
За global бил бы по рукам
Ну иногда требуется, просто тут непонятно было, что именно хочет человек.

Отредактировано sypper-pit (Сен. 28, 2014 01:39:28)

Офлайн

#4 Сен. 28, 2014 01:40:55

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

выйти из всех циклов

Если требуется, значит что-то не то в коде. Просто поверьте и примите как данность

Офлайн

#5 Сен. 28, 2014 01:44:14

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

выйти из всех циклов

Ну или фишечку смотри:

from itertools import chain
>>> i  = chain(*lst)
>>> for elem in i:
...     if elem == 3:
...         break



Офлайн

#6 Сен. 28, 2014 01:46:08

in
Зарегистрирован: 2013-09-11
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

выйти из всех циклов

Я не могу взяться за один язык потому что у меня клиент серверный проект, а nodejs я не хочу сейчас трогать. Я устал от javascriptа на клиенте. Python очень хороший язык, жаль что нет достаточного времени чобы сначала побольше почитать о питон и только потом что-то на нем писать.

Офлайн

#7 Сен. 28, 2014 01:50:48

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

выйти из всех циклов

Да я знаю, про неправильность использования глобальных переменных, но иногда нужно вытягивать значения из 2го цикла на верх, приходится думать или вкладываем в еще в цикл функции или по быстрому в глобал бросить.

Офлайн

#8 Сен. 28, 2014 01:54:40

in
Зарегистрирован: 2013-09-11
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

выйти из всех циклов

Budulianin
Ну или фишечку смотри
спасибо, это уже интереснее

Офлайн

#9 Сен. 28, 2014 01:58:43

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

выйти из всех циклов

def check_black_count(self, extra_data):
    for elem in chain(*self.field):
        if elem == 1:
            break
    else:
        extra_data['win'] = True

Мы пишем CamelCase только для классов.



Отредактировано Budulianin (Сен. 28, 2014 02:01:33)

Офлайн

#10 Сен. 28, 2014 02:10:58

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

выйти из всех циклов

in
def checkBlackCount(self, extraData):
        countFlag = False
        for i in range(11):
            for j in range(11):
                figure = self.field[i][j]
                if figure == 1:
                    countFlag = True
        if countFlag == False:
            extraData['win'] = True

def checkBlackCount (self, extraData):
    countFlag = False
    try:
        for i in range(11):
            for j in range(11):
                figure = self.field[i][j]
                if figure == 1:
                    countFlag = True
                    raise StopIteration
    except StopIteration:
        pass
    if countFlag == False:
        extraData['win'] = True

Это почти не меняя кода. Часто нужно сохранять код, какой бы он ни был, а рефакторинг проводить потом, уделив этому достаточно времени.


Budulianin
Ну или фишечку смотри:
Там есть itertools.chain.from_iterable()

>>> import itertools
>>> ch = itertools.chain.from_iterable([[1, 2, 3], [4, 5, 6]])
>>> for i in ch:
...   print(i)
... 
1
2
3
4
5
6
>>>

Если представить, что у него матрица размерностью 1000000x1000000, то распаковка займёт какое-то время. Поэтому существует вариант без распаковки.



Отредактировано py.user.next (Сен. 28, 2014 02:16:57)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version