谁能解释一下这段代码中的打印语句?
Can anybody explain me print statement in this code?
我在互联网上找到了这段代码,但我无法理解打印语句是如何工作的。
我已经尝试看到许多答案,但 none 完美地回答了它。
def main():
n=int(raw_input())
for i in range(0, 1<<n):
gray=i^(i>>1)
print "{0:0{1}b}".format(gray,n),
main()
您所看到的是高级字符串格式的概念。具体来说,PEP 3101 Advanced string Formatting
您可以参考 official documentation 进行理解。
for i in range(0, 1<<n):
这里,1 << n
将 1 向左移动 n 位。这意味着:
if n = 1, 1 << 1 would be 10,
n = 2, 1 << 10 would be 100
[2 = 二进制 10]
等等。
对于十进制数,答案等于 2 的 n 次方。
对于二进制 'n' 添加了多个零。
所以范围是for i in range(0, 2 ** n)
。
gray=i^(i>>1)
这里 i>>1
将 i 向右移动 1 位。这意味着:
if i = 1, 1 >> 1 would be 0,
i = 2, 10 >> 1 would be 1 [2 = binary 10]
i = 3, 100 >> 1 would be 10 (in binary) 2 in decimal
等等。
对于十进制数,它相当于除以 2(并忽略小数点后的数字)。
对于二进制,最后一位被擦除。
^
是异或运算符。它被定义为:
0 ^ 0 = 0,
0 ^ 1 = 1 ^ 0 = 1,
1 ^ 1 = 0
print "{0:0{1}b}".format(gray,n)
这里{1}指的是n,b指的是二进制。所以将gray转为二进制,用n位表示。
我在互联网上找到了这段代码,但我无法理解打印语句是如何工作的。
我已经尝试看到许多答案,但 none 完美地回答了它。
def main():
n=int(raw_input())
for i in range(0, 1<<n):
gray=i^(i>>1)
print "{0:0{1}b}".format(gray,n),
main()
您所看到的是高级字符串格式的概念。具体来说,PEP 3101 Advanced string Formatting
您可以参考 official documentation 进行理解。
for i in range(0, 1<<n):
这里,1 << n
将 1 向左移动 n 位。这意味着:
if n = 1, 1 << 1 would be 10,
n = 2, 1 << 10 would be 100
[2 = 二进制 10]
等等。
对于十进制数,答案等于 2 的 n 次方。
对于二进制 'n' 添加了多个零。
所以范围是for i in range(0, 2 ** n)
。
gray=i^(i>>1)
这里 i>>1
将 i 向右移动 1 位。这意味着:
if i = 1, 1 >> 1 would be 0,
i = 2, 10 >> 1 would be 1 [2 = binary 10]
i = 3, 100 >> 1 would be 10 (in binary) 2 in decimal
等等。
对于十进制数,它相当于除以 2(并忽略小数点后的数字)。
对于二进制,最后一位被擦除。
^
是异或运算符。它被定义为:
0 ^ 0 = 0,
0 ^ 1 = 1 ^ 0 = 1,
1 ^ 1 = 0
print "{0:0{1}b}".format(gray,n)
这里{1}指的是n,b指的是二进制。所以将gray转为二进制,用n位表示。