我想将一个单词表示为26位的序列。如果设置了第25位,则表示该单词中存在字母“y”。
例如:word:“abekz” 表示:10000000000000010000010011 这在C / C ++中很容易实现,因为它具有32位int类型。但是Python的int具有无限的精度,所以我无法做到。
这是我的(错误)解决方案:
def representAsBits(string):
mask=0
for each_char in string:
bit_position= ord(each_char)-97 #string consists of only lower-case letters
mask= mask | (1<<bit_position)
return bin(mask)
print representAsBits("abze")# gives me 0b10000000000000000000010011
print representAsBits("wxcc")# gives me 0b110000000000000000000100 2 bits missing here
我可以做出哪些改变?谢谢!
答案 0 :(得分:1)
您不能在整数上存储前导零。谢天谢地,您正在使用bin()
,它会返回一个字符串。
通过一些创意切片,我们可以根据需要对其进行格式化:
return "0b%32d" % int(bin(mask)[2:])
会给:
>>> representAsBits("abekz")
'0b00000010000000000000010000010011'
话虽这么说,为了比较面具,你不必bin()
他们,除非你想&#34;显示&#34;二进制。比较整数本身,这将是相同的:
return mask
:
>>> representAsBits("z") == representAsBits("zzz")
True
虽然,由于蒙版会匹配,但与您使用的填充无关,因为如果从同一蒙版生成它们将是相同的:任何只包含字符的字符串{无论您使用何种方法,{1}}都会产生相同的字符串。