Независимая переменная для функции при вызове несколько раз - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь создать функцию, которая будет печатать элемент в списке.Однако я хочу, чтобы я мог печатать следующий элемент каждый раз, когда функция используется в операторе If.Вот что я получил:

import random

index = 0
list1 = ['one', 'two', 'three', 'four', 'five', ]
list2 = ['uno', 'dos', 'tres', 'cuatro', 'cinco', ]

def reshuffle(list):
    global index
    if index < len(list):
        print(list[index])
        index += 1
    elif index == len(list):
        random.shuffle(list)
        index = 0
        print(list[index])
        index += 1

while True:
    user_input = input("Enter command: ")
    if user_input == "e":
        print(reshuffle(list=list1))
    if user_input == "s":
        print(reshuffle(list=list2))

Что происходит, когда функция распечатывает все элементы в списке с помощью оператора if, она перемешивает их и начинает заново.Это делается с помощью индекса, но каждый раз, когда функция используется более чем одним оператором if, она считывает одну и ту же переменную.Выходные данные выглядят так:

Enter command: e
one
None
Enter command: e
two
None
Enter command: s
tres
None
Enter command: s
cuatro
None

Я хочу, чтобы это было сделано:

Enter command: e
one
None
Enter command: e
two
None
Enter command: s
uno
None
Enter command: s
dos
None

Как можно, чтобы каждый вызов функции использовал одну и ту же переменную независимо, без ее сброса?Или, если есть другой способ приблизиться к этому, любая помощь будет оценена.

1 Ответ

0 голосов
/ 26 сентября 2018

Ваши списки имеют один и тот же глобальный index, поэтому изменение индекса для одного списка естественным образом влияет на другой.

Вам следует создать подкласс list с index в качестве переменной экземпляра, makereshuffle метод класса и создание list1 и list2 экземпляров этого класса, чтобы каждый из них мог отслеживать свои собственные индексы:

import random

class List(list):
    def __init__(self, *args):
        super().__init__(*args)
        self.index = 0

    def reshuffle(self):
        if self.index < len(self):
            print(self[self.index])
            self.index += 1
        elif self.index == len(self):
            random.shuffle(self)
            self.index = 0
            print(self[self.index])
            self.index += 1

list1 = List(['one', 'two', 'three', 'four', 'five'])
list2 = List(['uno', 'dos', 'tres', 'cuatro', 'cinco'])

while True:
    user_input = input("Enter command: ")
    if user_input == "e":
        print(list1.reshuffle())
    if user_input == "s":
        print(list2.reshuffle())

Пример ввода / вывода:

Enter command: e
one
None
Enter command: e
two
None
Enter command: s
uno
None
Enter command: s
dos
None
...