-1

有一种方法可以像我们在 Python 上对列表进行切片一样对主线进行切片?例如:

  • mainline[start:stop] # 将 start 移动到 stop-1
  • mainline[start:] # 将 start 移动到主线的其余部分
  • mainline[:stop] # 从头开始​​移动到 stop-1

或者

  • mainline[start:stop:step] # 从不超过 stop 开始,逐步。

这个想法是,有main_sicilian对象:

1. e4 c5 2. b4 cxb4 3. d4 d5 4. e5 Nc6 5. a3 Qb6 6. Ne2 Bf5 7. axb4 Nxb4 8. Na3 Rc8 9. Nf4 Bxc2 10. Qg4 e6 *

我想拥有:

main_sicilian[1:5] = 1. e4 c5 2. b4 cxb4 3. d4 d5 4. e5 Nc6 5. a3 Qb6

此外,通过定义它将在哪里完成。例如,直到白方第三步:

1. e4 c5 2. b4 cxb4 3. d4

我尝试了文档,但我发现它很难用于 Python 初学者。

4

1 回答 1

0

Try this.

code

import io
import chess
import chess.pgn


pgn = io.StringIO("1. e4 c5 2. Nf3 d6 3. d4 cxd4 4. Nxd4 Nf6 5. Nc3 *")
game = chess.pgn.read_game(pgn)

var = []
for node in game.mainline():
    var.append(node.move)

# Slice up to 3 plies.
sliced_var = var[0:3]

# Convert to SAN format.
b = chess.Board()
san_sliced_var = b.variation_san(sliced_var)
print(san_sliced_var)

Output

1. e4 c5 2. Nf3

于 2021-10-21T11:15:23.320 回答