为什么 type(bin(1)) 返回字符串?

问题描述 投票:0回答:1

我正在尝试用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))) 时,我希望它会说 但它说 .

python list binary type-conversion
1个回答
0
投票

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
开头的字符串,表明它是二进制的,因此您必须对其进行字符串切片以删除该位。

© www.soinside.com 2019 - 2024. All rights reserved.