多次调用时函数的独立变量

时间:2018-09-25 23:18:18

标签: python-3.x list variables if-statement element

我正在尝试创建一个将在列表中打印元素的函数。但是,我想要它,以便每次在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 :(得分:0)

您的列表共享相同的全局index,因此一个列表的索引更改自然会影响另一个列表。

您应该使用list作为实例变量创建index的子类,使reshuffle成为该类的方法,并使list1list2该类的实例,以便它们每个都可以跟踪自己的索引:

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