【问题标题】:Retrieve only chess move in database log仅检索数据库日志中的国际象棋移动
【发布时间】:2020-11-27 15:23:41
【问题描述】:

我正在尝试从国际象棋数据库的日志中获取所有的白棋,

1。 g3 d5 2. Bg2 Nf6 3. Nf3 c6 4. O-O Bf5 5. d3 e6 6. h3 Nbd7 7. Nh4 Bc5 8. Nxf5 exf5 9. d4 Bd6 10. e3 O-O 11. b3 Ne4 12. Bb2 Qa5 13. c4 dxc4 14. bxc4 b6 15. Qc2 Rfe8 16. Nc3 Ndf6 17. Ne2 Ba3 18. Bxa3 Qxa3 19. Nf4 Rad8 20. Nd3 Re7 21. Rfd1 Nc3 22. Rd2 Nfe4 23. Bxe4 Nxe4 24. Rdd1 Nc3 25. Rd2 Ne4 26. Rdd1 Nc3 27. Rd2 f6 28. Qb3 Qxb3 29. axb3 Kf7 30. Ra6 g6 31. Rc2 Ne4 32. Rca2 Rdd7 33. Ra1 Nd2 34. R1a3 h5 35. Nb4 Rc7 36. d5 c5 37. Nc6 Nf3+ 38. Kg2 Ne1+ 39. Kf1 Nc2 40. Rxa7 Nxa3 41. Rxa3 Re4 42. Ra6 h4 43. gxh4 Rxh4 44. Kg2 f4 45. exf4 Ke8 46. Rxb6 Rch7 47. Rb8+ Kd7 48. Rb7+ Kd6 49. Rxh7 Rxh7 50. Kg3 Rb7 5 Na5 Ra7 52. Nc6 Ra3 53. Kg4 Rxb3 54. f5 gxf5+ 55. Kxf5 Rf3+ 56. Kg4 Rxf2 57. h4 Rg2+ 58. Kf5 Rh2 59. Kxf6 Rxh4 60. Na5 Rf4+ 61. Kg5 Rf7 62. Kg6 Ra7 63. Nc6 Ra 64. Kf6 Rxc4 65. Ne7 Re4 66. Nf5+ Kxd5 67. Ne7+ Rxe7 68. Kxe7 c4 {White辞职} 0-1

这是一个完整的游戏,我的日志文件中有很多内容

[g3, Bg2, Nf3, d3, h3, Nh4, Nf5, Bd6, e3, b3....等]

这就是我想要的

我只需要白色棋子的移动(我不关心检查 +、捕获 x、castling 0-0 等)我只想要棋子 B、R、Q、K 的名称以及它所在的方格去。

这是我尝试过的sn-p

a = logfile.readlines()
for lines in a:
    if lines.startswith('1. '):
        x = lines.split('. ')
        print(x)

['1', 'g3 d5 2', 'Bg2 Nf6 3', 'Nf3 c6 4', 'O-O Bf5 5', 'd3 e6 6', 'h3 Nbd7 7', 'Nh4 Bc5 8', 'Nxf5 exf5 9'、'd4 Bd6 10'、'e3 O-O 11'、'b3 Ne4 12'、'Bb2 Qa5 13'、'c4 dxc4 14'、'bxc4..etc]

这是我的结果,如何去掉'1'、'2',只得到一个字符串?

我只需要 [g3, Bg2, Nf3, d3, h3...] 谢谢,我希望它有意义


我找到了这种方法,如果我打印print(x[0][0:3]) 并为第一个 [] 做一个 for,我将获得所有白色的移动..

28/11/202 更新 我来了:

['g3']
['Bg2']
['Nf3']
['O-O']
['d3']
['h3']
['Nh4']
['Nxf5']
['d4']
['e3']
['b3']
['Bb2']
['c4']
['bxc4']
['Qc2']
['Nc3']
['Ne2']
['Bxa3']
['Nf4']
['Nd3']
['Rfd1']
['Rd2']
['Bxe4']
['Rdd1']
['Rd2']
['Rdd1']
['Rd2']
['Qb3']
['axb3']
['Ra6']
['Rc2']
['Rca2']
['Ra1']
['R1a3']
['Nb4']
['d5']
['Nc6']
['Kg2']
['Kf1']
['Rxa7']
['Rxa3']
['Ra6']
['gxh4']
['Kg2']
['exf4']
['Rxb6']
['Rb8+']
['Rb7+']
['Rxh7']
['Kg3']
['Na5']
['Nc6']
['Kg4']
['f5']
['Kxf5']
['Kg4']
['h4']
['Kf5']
['Kxf6']
['Na5']
['Kg5']
['Kg6']
['Nc6']
['Kf6']
['Ne7']
['Nf5+']
['Ne7+']
['Kxe7']

我必须删除城堡“0-0”和“0-0-0”捕获“x”并检查“+”你建议我做什么?我尝试用 for 循环迭代列表

对于列表中的移动: 如果移动 == '0-0': list.remove(移动)

但我有错误 ListIndex

【问题讨论】:

  • 你应该使用正则表达式。
  • 在表达式 r”(\d+\.\s)(\w+)” 中,第二组将匹配白色的移动
  • 看看你得到的答案。您刚刚更新了您的问题,以包含最初未提供的更多信息。
  • asnwers 没有完成工作

标签: python pandas chess


【解决方案1】:

当您调用 .split 时,它会将您的字符串转换为数组。您可以通过以下方式访问最后一个元素:

x = lines.split('. ')[-1]

【讨论】:

  • 但这只会给我数组的最后一个元素,我想要从 2 到最后一个,我不想要轮到的数字
【解决方案2】:
list_even = my_list[1::3]

将给出列表中的第二个单词

【讨论】:

  • 这会给我偶数回合,我需要所有回合,但没有回合数,只有移动,所以我需要我的 _list[1:n] 但我不想要数字在每个指示转弯的元素内
【解决方案3】:

你可以用这个:

new_list = my_list.split()[1::3]

【讨论】:

    猜你喜欢
    • 2016-07-06
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    相关资源
    最近更新 更多