मैं अजगर में एक कार्ड खेल को लागू कर रहा हूँ, और मेरे स्तर के खिलाड़ी, PlayerHandler
संभाल करने के लिए, मैं हाल ही में __next__
कार्यान्वित बस next_player
कॉल करने के लिए। चूंकि गेमप्ले को अनंत लूप में सोचा जा सकता है (खिलाड़ियों को छोड़ने या जीतने/हारने तक खेलना जारी रहेगा), इसे पुनरावृत्ति रोकने के लिए यह समझ में नहीं आया। हालांकि, यह एक भ्रमित प्रतीत हो सकता है अगर लूप के लिए एक अनंत लूप का कारण बनता है, तो क्या मुझे कहीं StopIteration
उठाना चाहिए?लूप खराब अभ्यास के लिए एक अनंत है?
class PlayerHandler():
"""Holds and handles players and order"""
def __init__(self, players=None, order=1):
if players is None:
self.players = []
else:
self.players = list(players)
self.current_player = None
self.next_player()
self.order = order
def get_player(self, interval):
assert type(interval) == int, "Key must be an integer!"
if not interval and self.players:
return self.current_player
elif self.players:
step = interval * self.order
index = self.players.index(self.current_player) + step
while index >= len(self.players):
index -= len(self.players)
while index <= -(len(self.players)):
index += len(self.players)
return self.players[index]
else:
raise KeyError("No players in the list!")
def next_player(self):
"""Sets the current player to the next player to play"""
if not self.current_player:
if self.players:
self.current_player = self.players[0]
else:
self.current_player = None
else:
self.current_player = self.get_player(1)
def __iter__(self):
return self
def __next__(self):
self.next_player()
return self.current_player
मुझे लगता है कि यह एक https://codereview.stackexchange.com सवाल है। उस ने कहा, अंतिम खिलाड़ी के बाद स्टॉपइटरेशन बढ़ाने पर विचार करें, * लेकिन *, गैमेलोप में 'itertools.cycle' का उपयोग करें, यदि उपयुक्त हो तो पहले खिलाड़ी को वापस चक्र में ले जाएं। – kojiro
एक पुनरावर्तक के साथ कुछ भी गलत नहीं है जो कभी खत्म नहीं होता है। यह इटेटरेटर के लिए क्या है इसका हिस्सा है - मूल्यों के अनुक्रम पर कोई मनमानी सीमा नहीं है। – dstromberg
तकनीकी रूप से आप एक अनंत लूप नहीं बना रहे हैं क्योंकि आप जो इंतजार कर रहे हैं वह जीतने/खोने/छोड़ने वाले खिलाड़ी हैं। यह थोड़ी देर चलने की बहुत परिभाषा है 1: लूप .... यानी। जबकि अभी भी खिलाड़ी हैं .... छोड़ो मत। – Amazingred