【问题标题】:Can anybody explain me print statement in this code?谁能解释我这段代码中的打印语句?
【发布时间】:2019-12-23 10:03:52
【问题描述】:

我在互联网上找到了这段代码,但我无法理解打印语句的工作原理。

我已经试过很多答案,但没有一个能完美回答。

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()

【问题讨论】:

  • 你的意思是字符串格式"{0:0{1}b}".format(gray,n)?

标签: python-3.x data-structures gray-code


【解决方案1】:

for i in range(0, 1&lt;&lt;n):
这里,1 &lt;&lt; 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&gt;&gt;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指的是二进制。所以灰度转换为二进制,用n位表示。

【讨论】:

【解决方案2】:

高级字符串格式化的概念知道您正在查看的内容。具体来说,PEP 3101 Advanced string Formatting

您可以参考official documentation 以供了解。

【讨论】:

    猜你喜欢
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多