Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 28, 2014 01:13:00

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

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

Budulianin
Просто in спрашивает не совсем понятно. Вот я и отправил его почитать http://informatics.mccme.ru/mod/book/view.php?id=4384&chapterid=473 думая что он хочет взять переменную и вытянуть их из цикла.

#Чтобы функция могла изменить значение глобальной переменной, необходимо объявить эту переменную внутри функции, как глобальную, при помощи ключевого слова global:
def f():
    global a
    a = 1
    print (a)
a = 0
f()
print(a)

in
for <элемент> in <итерируемый объект>:
    блок1
    if условие: continue
    else: break
    блок2           # не выполнится никогда, учитывая инструкцию if
else:
    блок3           # выполнится, если выход из цикла не осуществлялся инструкцией break
http://habrahabr.ru/post/50120/

Офлайн

#2 Сен. 28, 2014 01:15:33

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

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

Budulianin
И вообще, если возникает потребность в continue или break, то скорее всего ваш алгоритм неудачный.


Это очень голословное заявление, которое говорит исключительно о ваших предпочтениях.

Давайте я просто объясню вам логику появления этого вопроса, чтобы вы меня поняли. Я не тонкий ценитель python. Python помогает мне решить конкретную задачу, в рамках проекта. Моя задача как-можно скорее дойти до релиза. За день я делаю таски по проекту, если я что-то не знаю я гуглю и только в том случае если не могу за 10 минут уже иду на форум. В данном случае, я не хотел тратить слишком много времени на чтение статей про циклы, потому что я знаю что это такое, я неоднократно сталкивался с ними в других языках, мне нужен именно синтаксис, а поскольку код работает и без выхода просто чуть больше жрет времени на исполнение, я могу не блокировать свою работу поисками ответа, а условно оставить вопрос публично открытым в параллельном потоке. Чтобы потом просто вставить эту строчку в код.

Офлайн

#3 Сен. 28, 2014 01:16:34

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

Офлайн

#4 Сен. 28, 2014 01:17:08

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

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

>>> lst
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> flag = False
>>> for row in lst:
...     if flag: break
...     for elem in row:
...         print(elem)
...         if elem == 5:
...             flag = True
...             break
...
1
2
3
4
5



Офлайн

#5 Сен. 28, 2014 01:18:31

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

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

in
Это очень голословное заявление, которое говорит исключительно о ваших предпочтениях.
Это мнение Дугласа Крокфорда. Наверно он знает, что говорит.



Офлайн

#6 Сен. 28, 2014 01:23:13

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

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

supper-pit мне не нужен else, в данном случае. вот код функции, мне жаль если это не python way, надеюсь со временем я смогу прикоснуться к прекрасному и понять все тонкости идеологии python, но сейчас мне нужно просто решение которое нормально показало себя в других языках

 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

Я прогоняю матрицу и считаю количество черных шашек на поле, единица означает черную шашку, любая другая цифра другую фигуру. Фигур много поэтому у меня не флаги true false а цифры. Алгоритм считает количество черных шашек, если их нет то я добавляю в ответ клиенту еще одну переменную.

Офлайн

#7 Сен. 28, 2014 01:28:09

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

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

Вот смотрите этот код на самом деле не нативный синтаксис, а один из костылей.

 flag = False
>>> for row in lst:
...     if flag: break
...     for elem in row:
...         print(elem)
...         if elem == 5:
...             flag = True
...             break

Я могу сочинять костыли и без вас. Я уже выше написал что можно через try catch это сделать, просто например в том же javascript можно выскочить из двух циклов сразу написав цифру 2 рядом с break. Очевидно если в питоне нет таких возможней и возможно именно поэтому я не смог найти это в гугле, то можно просто написать, что нативного синтаксиса нет. пишите типа костыль.

Отредактировано in (Сен. 28, 2014 01:31:08)

Офлайн

#8 Сен. 28, 2014 01:29:50

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

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

sypper-pit
За global бил бы по рукам

Офлайн

#9 Сен. 28, 2014 01:31:04

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

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

in
try catch
try - catch в питоне нет…

Возьмитесь за один язык. У Вас в голове сейчас жуткая мешанина из механизмов, понятий и техник реализации.

Отредактировано 4kpt_II (Сен. 28, 2014 01:32:55)

Офлайн

#10 Сен. 28, 2014 01:32:29

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

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

in
Очевидно если в питоне нет таких возможней
Я уже писал о том, что нет таких волшебных слов.
in
catch
except

Тут просто нужно написать маленькую функцию и вызывать её в коде, вот и всё.
Но вы почему-то не хотите этого понять.



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

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version