En Python (V2.7), j'essaye de faire un jeu ConnectFour contre un lecteur d'ordinateur. J'ai développé une fonction simple pour trouver 4 d'affilée (pour déterminer la fin du jeu) et retourner TRUE si c'est le cas, et maintenant j'essaie d'utiliser la même fonction pour localiser 3 dans une rangée et retourner l'emplacement .Python: Fonction return bool et tuple entier
def finder(matrix, player,number):
for row in matrix:
count = 0
for item in row:
if item == player:
count +=1
if count == number:
return True
else:
count = 0
où je peux entrer: finder (conseil, « X », 4) pour savoir si quatre dans une rangée est VRAI ou encore à FALSE par défaut (ce qui fonctionne le). Maintenant, je veux essayer quelque chose comme ceci:
def finder(matrix, player,number):
for row in matrix:
count = 0
for item in row:
if item == player:
count +=1
if count == number:
return True
location = row, item
return location
else:
count = 0
Cependant, cela appelle une erreur que je ne l'ai pas initialisé l'emplacement, donc je puis définir ma position = 0, 0. Maintenant, il retourne juste TRUE et le tuple (0, 0). Comment puis-je l'obtenir pour donner l'emplacement du dernier élément du 3 dans une rangée? Editer: J'ai essayé de retourner le triplet: VRAI, ligne, élément. Cependant, la deuxième partie du problème est comment puis-je obtenir les numéros de ligne et de col lorsque la fonction est TRUE? Le code suivant fonctionne pour réaliser qu'il y a une menace, mais je ne peux pas trouver un moyen d'obtenir l'emplacement d'une menace étant donné qu'il existe une menace.
if finder(board, "X", 3) is True:
horizontal_threat = True
print row, item
_ "Maintenant, il retourne juste TRUE et le tuple (0,0) "_. Cela ne me semble pas possible. Une fonction ne peut pas retourner deux fois. Lorsque votre fonction atteint 'return True', elle se termine immédiatement et transmet' True' au contexte appelant, sans jamais arriver '' return location''. Pouvez-vous fournir un [mcve] qui démontre votre comportement revendiqué? – Kevin
_ "Je peux entrer: finder (tableau," X ", 4) pour savoir si quatre d'affilée est VRAI ou toujours par défaut FALSE" _. Êtes-vous en train de dire que votre fonction renvoie False par défaut si vous ne rencontrez aucune déclaration de retour? Si une fonction se termine sans appuyer sur une instruction return, elle renvoie None, pas False. En toute justice, None is [falsey] (https://stackoverflow.com/questions/39983695/what-is-truthy-and-falsy-in-python-how-is-it-different-from-true-and-false), donc dans certains contextes, ils se comportent de la même manière mais classiquement, il est préférable de renvoyer explicitement False plutôt que None si tous les chemins de code doivent renvoyer un booléen. – Kevin
Je n'étais pas au courant qu'une fonction ne pouvait renvoyer qu'une seule valeur, j'ai défini location = 0,0 au début du programme. Maintenant, je me rends compte que j'appelais simplement une variable que j'ai définie il y a quelques temps. – Ra31513