WedX - журнал о программировании и компьютерных науках

Python повторяется с середины цикла до начала

Я работал над программированием настольной игры для практики Python. Я использую цикл для выполнения порядка поворотов следующим образом:

turncycle = [0,1,2,3]
for turnindex in cycle(turncycle):
    #.
    #...turn stuff
    #...turnindex is used for active player
    #.

Что я хочу сделать, так это дать индекс хода, чтобы начать мини-ход, когда срабатывает карта события, и они должны что-то делать. Есть ли способ перестроить список, чтобы я мог изменить [0,1,2,3] на [1,2,3,0] или выполнить цикл, начиная с 1,2 или 3, а затем один раз пройтись по остальным?

05.09.2016

  • Turncycle[1:]+[turncycle[0]] возможно? 06.09.2016
  • или используя numpy: np.roll(turncycle, 1) 06.09.2016
  • Не уверен, что вы имеете в виду. Пример желаемого поведения был бы хорошим. 06.09.2016

Ответы:


1

Как насчет чего-то подобного?

def next_cycle(lst):
    return turncycle[1:] + turncycle[:1]

turncycle = [0, 1, 2, 3]

for turnindex in range(len(turncycle)):
    turncycle = next_cycle(turncycle)
    print turncycle
05.09.2016
  • Имхо turncycle[1:] + turncycle[:1] выглядит намного красивее и его легко обобщить. 06.09.2016

  • 2

    Собрал кое-что из рецептов itertools

    import itertools
    a = [0,1,2,3,4,5,6,7]
    def consume(iterator, n):
        "Advance the iterator n-steps ahead. If n is none, consume entirely."
        # Use functions that consume iterators at C speed.
        if n is None:
            # feed the entire iterator into a zero-length deque
            collections.deque(iterator, maxlen=0)
        else:
            # advance to the empty slice starting at position n
            next(itertools.islice(iterator, n, n), None)
    
    def cycle(turncycle, start = 0):
        # limit to the original number of turns
        no_of_turns = len(turncycle)
        # make a non-ending cycle
        turncycle = itertools.cycle(turncycle)
        # advance to the start position
        consume(turncycle, start)
        # return a new turn cycle - from the itertools take() recipe
        return itertools.islice(turncycle, no_of_turns)
    
    >>> 
    >>> for n in cycle(a):
        print(n),
    
    0 1 2 3 4 5 6 7
    >>> for n in cycle(a, 4):
        print(n),
    
    4 5 6 7 0 1 2 3
    >>> for n in cycle(a, 20):
        print(n),
    
    4 5 6 7 0 1 2 3
    >>>
    

    cycle, возможно, потребуется немного изменить в зависимости от того, что, по вашему мнению, означает параметр start.

    Вероятно, его можно было бы переименовать в roll().

    05.09.2016
    Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]