gpt4 book ai didi

python - 计算位功能

转载 作者:太空宇宙 更新时间:2023-11-04 09:07:13 27 4
gpt4 key购买 nike

我正在尝试打印最大位数 (n) 以及这些位数能够表示的最大数量。我觉得好像问题出在 x = x%2

输入:

sortbit(3)

输出:

000
111
000
111
000
111
000
111

预期输出"

000
001
010
011
100
101
110
111

我的代码:

def sortbit(n):
max_num = 2**n

for x in range(0,max_num):
stringy = []
a = 0
while a < n:
a += 1
x = x % 2
if x == 0:
stringy.insert(a,'0')
else:
stringy.insert(a,'1')
t = ''.join(stringy)
print t

最佳答案

您正在使用 x = x % 2 将任何数字转换为 10。您也可以只打印 str(x % 2) * n

您需要改为使用整数除法,并分别测试偶数或奇数。

更好的是,您可以将模数测试的输出作为字符串附加到stringy:

stringy.insert(0, str(x % 2))
x = x // 2

代码简化了一点的演示:

>>> def sortbit(n):
... max_num = 2**n
... for x in range(max_num):
... stringy = []
... for a in range(n):
... stringy.append(str(x % 2))
... x //= 2
... print ''.join(reversed(stringy))
...
>>> sortbit(3)
000
001
010
011
100
101
110
111

您还可以对值进行位移; >> operator按给定的步数将位向右移动; x >> 1x 中的位移动了一步,基本上除以二。

您还可以查看 bin() function (以二进制字符串形式返回值,以 0b 开头),以及 format() function , 连同 str.format() method ,它允许您使用 b 输出格式将值格式化为二进制字符串。在循环中打印您的值可以像这样简单:

def sortbit(n):
for i in range(2**n):
print '{:0{}b}'.format(i, n)

最后但同样重要的是,您只是生成数字 0 和 1 的乘积,n 次。你可以用 itertools.product() 表达还有:

>>> from itertools import product
>>> for bits in product('01', repeat=3):
... print ''.join(bits)
...
000
001
010
011
100
101
110
111

但这可能被视为作弊。 :-)

关于python - 计算位功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19240946/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com