Найти - Пользователи
Полная версия: Возвращение в предыдущий круг цикла for
Начало » Python для новичков » Возвращение в предыдущий круг цикла for
1
MEOW
Мне нужно, чтобы после того как выполнилось определённое условие, цикл for не начинал новый круг, а вернулся на предыдущий круг. Как это сделать?
Возможно не точно выразился.
 s = str(input())
code = False
for i in range(len(s)):
    try:
        if s[i]==s[i-1]:
            s = s.replace(s[i]*2,'')
            i-=2
            print(s)
            continue
    except:
        pass
print(s)
Решил попробовать отнимать 2 от переменной i, но он не возвращается на предыдущий круг
JOHN_16
Вы ни тот цикл используете. Вам нужен while со своим собственным внутри счетчиком и флагом выхода из цикла.
MEOW
Я прекрасно понимаю реализацию через while, но сейчас мне интересен именно for. Возможна ли там реализация того, чего хочу?
Slow
Никак. Во-первых, цикл for вам этого не позволит (в общем случае), если только как-то очень хитро не переопределить __iter__ на итерируемом.
Во вторых, очень плохо (и почти всегда невозможно) менять итерируемое в процессе итерации.
(И вы даже от этого “защитились” завернув свой код в try-except (наверняка убегаете от IndexError`a))
В третьих, вы неправильно решаете задачу (какой бы она ни была)
JOHN_16
MEOW
Возможна ли там реализация того, чего хочу?
да, как сказал предыдущий участник - если вы будете играться со своим итератором.
JOHN_16
MEOW
Вот вам пример исключительно в учебных целях
 class MyIter:
    def __init__(self, end):
        self.current = -1
        self.end = end
    def __iter__(self):
        return self
    def __next__(self):
        if self.current < -1:
            raise StopIteration()
        return self.next()
    def next(self):
        self.current += 1
        if self.current >= self.end:
            raise StopIteration()
        return self.current
    def previous(self):
        self.current -= 2
        return self.current
def test_1():
    assert [x for x in MyIter(3)] == [0, 1, 2]
def test_2():
    flag = False
    l = []
    my_iter = MyIter(5)
    for value in my_iter:
        if not flag and value == 3:
            flag = not flag
            my_iter.previous()
        l.append(value)
    assert l == [0, 1, 2, 3, 2, 3, 4]
def test_3():
    l = []
    my_iter = MyIter(3)
    for value in my_iter:
        my_iter.previous()
        l.append(value)
    assert l == [0]
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