我想将一个单词表示为26位的序列。如果设置了第 25 位,则表示该单词中存在字母"y"。
例如:单词:"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
我可以进行哪些更改?谢谢!
不能在整数上存储前导零。值得庆幸的是,您使用的是 bin()
,它返回一个字符串。
通过一些创造性的切片,我们可以随心所欲地格式化它:
return "0b%32d" % int(bin(mask)[2:])
将给予:
>>> representAsBits("abekz")
'0b00000010000000000000010000010011'
话虽如此,要比较掩码,您不必bin()
它们,除非您想"显示"二进制文件。比较整数本身,这将是相同的:
与return mask
:
>>> representAsBits("z") == representAsBits("zzz")
True
虽然,由于掩码将匹配,因此使用什么填充并不重要,因为如果从同一掩码生成,它们将是相同的:任何仅包含字符的字符串都将生成相同的字符串wxc
无论您使用哪种方法。