python 在简单的国际象棋程序中跳过代码的问题
Issue with python skipping code in simple chess program
我正在创建一个简单的国际象棋程序,我 运行 一个据称 python 跳过代码的问题。
程序入口为:find_side()
控制台输出:
Enter your team(1-black 2-white):1
<PlayResult at 0x3ec1dc0 (move=e2e4, ponder=d7d5, info={}, draw_offered=False, resigned=False)>
Enter your enemies move:
根据控制台输出,引擎为白棋随机生成棋子,并在思考中作出反击。但是我对此有输入,看起来 python 比用户输入更快地执行 result_engine
。
另外,还有一个问题。引擎完全忽略 chess.engine.turn = turn
行。
我使用 stockfish 11 作为引擎,import chess
作为 python 代码和带有通用国际象棋引擎的引擎之间的 link
代码:
import chess
import chess.engine
import time
import os
def logic_white():
engine = chess.engine.SimpleEngine.popen_uci("C:\Users\Admin\Desktop\sf.exe")
board = chess.Board()
turn = True # True - white False - black
while True:
chess.engine.turn = turn # This isn't working
result_engine = engine.play(board,chess.engine.Limit(time=0.1))
print(result_engine)
res = input("Enter your enemie's move: ")
move = chess.Move.from_uci(res)
board.push(move)
turn = not turn
time.sleep(0.5)
def logic_black():
engine = chess.engine.SimpleEngine.popen_uci("C:\Users\Admin\Desktop\sf.exe")
board = chess.Board()
turn = True # True - white False - black
while True:
chess.engine.turn = turn # This isn't working
res = input("Enter your enemie's move: ")
move = chess.Move.from_uci(res) #Inputting the enemy move and putting in on the virtual board
board.push(move)
result_engine = engine.play(board,chess.engine.Limit(time=0.1)) #Calculating best move to respond
print(result_engine)
board.push(result_engine) #Push the engine's move to the virtual board
turn = not turn # Inverting turn, so turns can change from black to white, etc.
time.sleep(0.5)
def find_side():
if(input("Enter your team(1-black 2-white):")) == 1:
logic_black()
else:
logic_white()
Python 的输入函数 returns 是一个字符串,因此它永远不会等于整数 1。因此,代码将始终进入 else 块。要解决此问题,请将输入转换为整数或将其与“1”进行比较。
def find_side():
if int(input("Enter your team(1-black 2-white):")) == 1:
logic_black()
else:
logic_white()
我正在创建一个简单的国际象棋程序,我 运行 一个据称 python 跳过代码的问题。 程序入口为:find_side()
控制台输出:
Enter your team(1-black 2-white):1
<PlayResult at 0x3ec1dc0 (move=e2e4, ponder=d7d5, info={}, draw_offered=False, resigned=False)>
Enter your enemies move:
根据控制台输出,引擎为白棋随机生成棋子,并在思考中作出反击。但是我对此有输入,看起来 python 比用户输入更快地执行 result_engine
。
另外,还有一个问题。引擎完全忽略 chess.engine.turn = turn
行。
我使用 stockfish 11 作为引擎,import chess
作为 python 代码和带有通用国际象棋引擎的引擎之间的 link
代码:
import chess
import chess.engine
import time
import os
def logic_white():
engine = chess.engine.SimpleEngine.popen_uci("C:\Users\Admin\Desktop\sf.exe")
board = chess.Board()
turn = True # True - white False - black
while True:
chess.engine.turn = turn # This isn't working
result_engine = engine.play(board,chess.engine.Limit(time=0.1))
print(result_engine)
res = input("Enter your enemie's move: ")
move = chess.Move.from_uci(res)
board.push(move)
turn = not turn
time.sleep(0.5)
def logic_black():
engine = chess.engine.SimpleEngine.popen_uci("C:\Users\Admin\Desktop\sf.exe")
board = chess.Board()
turn = True # True - white False - black
while True:
chess.engine.turn = turn # This isn't working
res = input("Enter your enemie's move: ")
move = chess.Move.from_uci(res) #Inputting the enemy move and putting in on the virtual board
board.push(move)
result_engine = engine.play(board,chess.engine.Limit(time=0.1)) #Calculating best move to respond
print(result_engine)
board.push(result_engine) #Push the engine's move to the virtual board
turn = not turn # Inverting turn, so turns can change from black to white, etc.
time.sleep(0.5)
def find_side():
if(input("Enter your team(1-black 2-white):")) == 1:
logic_black()
else:
logic_white()
Python 的输入函数 returns 是一个字符串,因此它永远不会等于整数 1。因此,代码将始终进入 else 块。要解决此问题,请将输入转换为整数或将其与“1”进行比较。
def find_side():
if int(input("Enter your team(1-black 2-white):")) == 1:
logic_black()
else:
logic_white()