我正在尝试用Python制作一个国际象棋引擎,我正在尝试将1和0的列表写为二进制值,但我在互联网上找不到任何有用的东西,我正在尝试自己的方法,但它需要使用 bin(19) 其中 19 是二进制字符串 10001 的整数表示,当您尝试使用 bin(19) 函数时,它会给出错误,因为类型是字符串,并且我正在尝试对其执行按位运算。因此,它尝试调试问题,我尝试使用 type(bin(19)) 函数来查看它返回的字符串的函数类型,但它没有任何意义。我希望得到一些帮助。或者,如果有一种更简单的方法将 0 和 1 整数列表转换为二进制字符串,我也会接受。这是我未完成的代码。谢谢你。
#Visualize Squares
Skip_Visual=1
if Skip_Visual == 0:
visual = []
for i in range(64):
if i<10:
visual.append("0"+str(i))
else:
visual.append(str(i))
visual= visual[::-1]
for i in range(1,9):
slice = visual[(8*(i-1)):(8*i):1]
slice = slice[::-1]
print(slice)
#SETUP
white_pawnbb =[]
white_knightbb =[]
white_bishopbb =[]
white_rookbb =[]
white_queenbb =[]
white_kingbb =[]
black_pawnbb =[]
black_knightbb =[]
black_bishopbb =[]
black_rookbb =[]
black_queenbb =[]
black_kingbb =[]
bin_val = []
Square_Notation = ("a1","b1","c1","d1","e1","f1","g1","h1","a2","b2","c2","d2","e2","f2","g2","h2","a3","b3","c3","d3","e3","f3","g3","h3","a4","b4","c4","d4","e4","f4","g4","h4","a5","b5","c5","d5","e5","f5","g5","h5","a6","b6","c6","d6","e6","f6","g6","h6","a7","b7","c7","d7","e7","f7","g7","h7","a8","b8","c8","d8","e8","f8","g8","h8")
Piece_Abbreviation = {"Pawn":" ","Knight":"N","Bishop":"B","Rook":"R","Queen":"Q","King":"K"}
Peice_Value = {"Pawn":"100","Knight":"300","Bishop":"350","Rook":"500","Queen":"900","King":"100000"}
#Functions
def replace(index,list,item):
list.insert(index,str(item))
list.pop(index+1)
def List_to_Binary_Integer(List,Delete):
if Delete == 1:
bin_val.clear()
#shift when converting to binary using << 1
bin_val.append(int(''.join(map(str, List)), 2))
def Binary_Integer_To_Binary(Int):
Bin_val_var = bin(Int)
print(type(bin(17)))
def Eval():
print(type(bin_val[1]))
#Setup Squares
for i in range(64):
white_pawnbb.append(0)
white_knightbb.append(0)
white_bishopbb.append(0)
white_rookbb.append(0)
white_queenbb.append(0)
white_kingbb.append(0)
black_pawnbb.append(0)
black_knightbb.append(0)
black_bishopbb.append(0)
black_rookbb.append(0)
black_queenbb.append(0)
black_kingbb.append(0)
#Piece Setup
for i in range(8,16):
replace(i,white_pawnbb,1)
replace(63-i,black_pawnbb,1)
replace(1,white_knightbb,1)
replace(6,white_knightbb,1)
replace(57,black_knightbb,1)
replace(62,black_knightbb,1)
replace(2,white_bishopbb,1)
replace(5,white_bishopbb,1)
replace(58,black_bishopbb,1)
replace(61,black_bishopbb,1)
replace(0,white_rookbb,1)
replace(7,white_rookbb,1)
replace(56,black_rookbb,1)
replace(63,black_rookbb,1)
replace(3,white_queenbb,1)
replace(59,black_queenbb,1)
replace(4,white_kingbb,1)
replace(60,black_kingbb,1)
#Convert Lists
List_to_Binary_Integer(white_pawnbb,1)
List_to_Binary_Integer(white_knightbb,0)
List_to_Binary_Integer(white_bishopbb,0)
List_to_Binary_Integer(white_rookbb,0)
List_to_Binary_Integer(white_queenbb,0)
List_to_Binary_Integer(white_kingbb,0)
List_to_Binary_Integer(black_pawnbb,0)
List_to_Binary_Integer(black_knightbb,0)
List_to_Binary_Integer(black_bishopbb,0)
List_to_Binary_Integer(black_rookbb,0)
List_to_Binary_Integer(black_queenbb,0)
List_to_Binary_Integer(black_kingbb,0)
Binary_Integer_To_Binary(bin_val[1])
我尝试查找,但我不断找到与我的问题无关的内容。当我运行 print(type(bin(17))) 时,我希望它会说
bin()
函数返回一个字符串。您不能对 bin()
的输出进行二元运算,因为它返回 string
。但是,您可以将二进制字符串转换为整数,然后对它们进行二进制运算,然后使用 bin()
将它们转换回二进制。
例如
binary_str1 = '1010'
binary_str2 = '1100'
result_or = bin(int(binary_str1, 2) | int(binary_str2, 2))[2:]
print(result_or) # Output: '1110'
请注意,
bin()
返回一个以0b
开头的字符串,表明它是二进制的,因此您必须对其进行字符串切片以删除该位。