【问题标题】:How to extract black and white moves separately from a Portable Game Notation (PGN) file?如何从便携式游戏符号 (PGN) 文件中分别提取黑白移动?
【发布时间】:2021-05-20 05:41:26
【问题描述】:

我想通过使用 Python 分析 PGN(便携式游戏符号)文件,分别提取国际象棋游戏中的白棋和黑棋。

示例:

1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O b5 6. Bb3 Bb7 7. d3 Be7 8. Nc3 O-O 9. a3 Nd4 10. Nxd4 exd4 11. Ne2 c5 12. Bg5 d5 13. Bxf6 Bxf6 14. Bxd5 Bxd5 15. exd5 Qxd5 16. Ng3 c4 17. Re1 Rae8 18. a4 Rxe1+ 19. Qxe1 cxd3 20. cxd3 bxa4 21. Qd1 Qb5 22. Ne4 Be7 23. Qc2 Rb8 24. Rxa4 Qxb2 25. Qxb2 Rxb2 26. g4 Rb6 27. Rxd4 Kf8 28. Rd7 Rg6 29. Kf1 Rxg4 30. Ra7 f5 31. Ng3 g6 32. Rxa6 Rh4 33. Kg2 Rd4 34. Ne2 Rxd3 35. Ng1 Rd7 36. Nf3 Kg7 37. h3 Bf6 38. Kg3 Rb7 39. Kg2 Re7 40. Ra5 Rc7 41. Rd5 Ra7 42. Rb5 Be7 43. Nd4 Rd7 44. Nf3 Rd6 45. Rb7 Kf6 46. Ra7 h6 47. Nh4 Bd8 48. Rh7 Rd2 49. Rxh6 Kg7 50. Rxg6+ Kh7 51. Nf3 Rxf2+ 52. Kxf2 Kxg6 53. Kg2 Kh5 54. Nd4 f4 55. Ne6 Bg5 56. Nxg5 Kxg5 57. Kf3 Kh4 58. Kxf4 Kxh3 1/2-1/2

【问题讨论】:

  • 将其作为字符串读入并使用正则表达式分隔数字后跟句点。
  • 如果单纯分析这款游戏,那么还有其他软件不使用python。告诉我你是否只想通过不使用 python 来分析这个

标签: python chess python-chess


【解决方案1】:

白开始。因此,对于每一步,首先是移动编号,然后是白色移动,然后是黑色移动。然后使用的基本逻辑是:

s = "1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O b5 1/2-1/2"
move_numbers = s.split()[0::3]  # last element will be the game conclusion, here 1/2-1/2
white_moves = s.split()[1::3]
black_moves = s.split()[2::3]

请注意,如果白方走最后一步,则游戏结论将添加为 black_moves。可以通过len(s.split())查看是否是这样

【讨论】:

  • 我认为你在split 调用后忘记了括号:TypeError: 'builtin_function_or_method' object is not subscriptable
  • 一个优化——s.split()可以先保存在一个变量中,然后重复调用。这将显着减少代码执行时间
  • @RobinDeSchepper 你是对的;感谢您的编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多