Désolé pour le titre vague, mais je n'ai vraiment aucune idée de ce qui se passe ici.
from functools import reduce
arr = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
def strxo(n):
if (n == -1):
return "X"
elif (n == 1):
return "O"
else:
return "_"
def prboard(board):
print(reduce(lambda x, y: x + "\n" + y, list(map(lambda l: reduce(lambda a, b: strxo(a) + strxo(b), l), board))))
prboard(arr)
Sortie souhaitée :
___
___
___
Production réelle :
__
__
__
Et quand je change la finale else
en strxo
a return str(n)
au lieu de return "_"
J'ai compris :
000
000
000
Ce qui est ce que j'attendais et la forme que je veux, mais je veux remplacer ces zéros. Quelle est la cause de ce problème ?
0 votes
Je ne comprends pas comment vous espérez obtenir 5 caractères de soulignement en appelant une fonction trois fois. Ou pourquoi la sortie souhaitée est 5x3 en premier lieu alors qu'en même temps une grille 3x3 de 0s est la forme souhaitée.
2 votes
Première étape du débogage : Réécrivez votre code pour qu'il soit lisible. Idéalement, débarrassez-vous de ce style fonctionnel en utilisant
reduce
et utiliser des compréhensions de listes à la place. Mais au moins, divisez cette monstruosité en plusieurs lignes.4 votes
Aussi, pourquoi faites-vous cela avec
map
yreduce
en premier lieu ? Votre extérieurreduce
est simplement moins efficace et plus difficile à comprendre'\n'.join
, votrelist(map(lambda…))
est une compréhension de liste moins efficace et plus difficile à comprendre, et votre intérieurreduce
Je ne suis pas sûr de ce qu'il est censé faire ; pourquoi appelez-vous le service de l'immigration ?strxo
sur la valeur accumulée ici ? Et pourquoi tout cela doit-il être une ligne monstrueuse, au lieu d'être divisé en petits morceaux que vous pouvez comprendre et déboguer vous-même ?0 votes
@abarnert Je l'ai fait de cette façon parce que c'est ce que j'ai l'habitude d'utiliser en JavaScript, je reviens à Python après une longue période, donc j'essayais juste de faire un simple morpion sans trop chercher. Tout le monde sur ce post a été très utile !