Python类,如何在玩家之间切换

Python类,如何在玩家之间切换,python,Python,我有一个球员名单存储,我想在他们之间切换。例如,首先,我向player1请求输入,当他完成后,我将向player2请求输入,然后向player3请求输入,然后再次向player1请求输入。等等 它不一定只有3名球员,它可以是更多或更少 代码: 因此,所有播放器都存储在“fn”中,但我无法将其连接到str。如果我使用fn[0],它只会带来名字,但我希望它在它们之间翻转不确定地在对象列表上循环的最直接方法是使用while循环: class Player: def __init__(self,

我有一个球员名单存储,我想在他们之间切换。例如,首先,我向player1请求输入,当他完成后,我将向player2请求输入,然后向player3请求输入,然后再次向player1请求输入。等等

它不一定只有3名球员,它可以是更多或更少

代码:


因此,所有播放器都存储在“fn”中,但我无法将其连接到str。如果我使用fn[0],它只会带来名字,但我希望它在它们之间翻转

不确定地在对象列表上循环的最直接方法是使用while循环:

class Player:
    def __init__(self, name):
        self.name = name
    def greeting(self):
        return f"Hello, may name is {self.name}"

def game_loop(players):
    while True:
        for player in players:
            print(player.greeting())

players = [Player('Frank'), Player("Anna"), Player("Juan")]

game_loop(players)
当然,上面的内容会给你一个无限循环。因此,您必须注意断开循环,注意,只有直接在
内断开,而
循环体(而不是for循环内)将断开无限循环

另一种可能使事情更容易处理的方法是使用
itertools
和for循环:

import itertools
for player in itertools.cycle(players):
    print(player.greeting())
这可能更容易处理,因为这样您就可以突破单个循环。但这也是一个无限循环,因为
cycle
返回一个无限迭代器

注意,您可以直接使用生成器来实现cycle(当然,在CPython中,它们不是用Python实现的,而是用C实现的):


注意,它仍然有这个
,而True:for x在which:…
结构中。。。它刚刚被封装在迭代器中,实际上是一个生成器。

这是否回答了您的问题@米凯斯科蒂谢谢你,不过,让我们假设我有7名球员,而不是2名。这是怎么回事?玩家必须存储在一个列表中。你可以将所有玩家放在一个列表中,然后再放在该列表中,或者使用一个对象(链接问题中也提到了)。你最初的问题是如何在player1和player2之间切换,请不要根本更改你的问题,因为这样很难或不可能回答它或链接到匹配的副本。
import itertools
for player in itertools.cycle(players):
    print(player.greeting())
def cycle(iterable):
    # cycle('ABCD') --> A B C D A B C D A B C D ...
    saved = []
    for element in iterable:
        yield element
        saved.append(element)
    while saved:
        for element in saved:
              yield element