[英]Issue with python skipping code in simple chess program
I am creating a simple program for chess, and I ran to an issue of supposedly python skipping code.我正在为国际象棋创建一个简单的程序,我遇到了一个据称是 python 跳过代码的问题。 Program entry is: find_side()
程序入口为:find_side()
Console output:控制台输出:
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:
According to the console output, engine randomly generated move for the White player and made a counter-response in ponder.根据控制台输出,引擎为白方随机生成走法,并在思考中做出反击。 But I have input for that, looks like, that python is executing
result_engine
sooner than user input.但是我有输入,看起来,python 比用户输入更早地执行
result_engine
。 Also, there's one more problem.此外,还有一个问题。 Engine completely ignores the
chess.engine.turn = turn
line. Engine 完全忽略
chess.engine.turn = turn
线。 I am using stockfish 11 as an engine and import chess
as an link between python code and engine with universal chess engine Code:我使用stockfish 11作为引擎并
import chess
作为python代码和具有通用国际象棋引擎代码的引擎之间的链接:
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's input function returns a string, so it will never be equal to the integer 1. As such, the code will always go into the else block. Python 的输入函数返回一个字符串,因此它永远不会等于整数 1。因此,代码将始终进入 else 块。 To fix this, either convert the input to an integer or compare it to '1'.
要解决此问题,请将输入转换为整数或将其与“1”进行比较。
def find_side():
if int(input("Enter your team(1-black 2-white):")) == 1:
logic_black()
else:
logic_white()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.