我正在尝试创建一个将在列表中打印元素的函数。但是,我想要它,以便每次在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
如何让每个函数调用独立使用相同的变量,而无需重置变量?或者,如果还有其他方法可以解决,那么将不胜感激。
答案 0 :(得分:0)
您的列表共享相同的全局index
,因此一个列表的索引更改自然会影响另一个列表。
您应该使用list
作为实例变量创建index
的子类,使reshuffle
成为该类的方法,并使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