代码之家  ›  专栏  ›  技术社区  ›  Sai Kumar

在理解代码时需要帮助

  •  0
  • Sai Kumar  · 技术社区  · 6 年前

    有人能解释一下这个密码吗。我不明白 n 在这儿吗?我们已经采取了 N = int(input()) 作为输入然后为什么 n=len(bin(N))-2 ? 我想不出来。

    N = int(input())
    n = len(bin(N))-2
    for i in range(1,N+1):
        print(str(i).rjust(n) + " " + format(i,'o').rjust(n) + " " + format(i,'X').rjust(n) + " " + format(i,'b').rjust(n))
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Martijn Pieters    6 年前

    n 计算 在数字中 N bin() 生成二进制表示(0和1),作为字符串 0b 前缀:

    >>> bin(42)
    '0b101010'
    

    所以 len(bin(n))

    bin() documentation

    长度用于设置列的宽度(通过 str.rjust() ,它在字符串前面添加空格以创建输出 n个

    但是,同样的信息可以得到 从号码上,用 int.bitlength() method

    >>> N = 42
    >>> N.bit_length()
    6
    >>> len(bin(N)) - 2
    6
    

    其他列的数字也太大了。您可以计算每列的最大宽度,并使用 str.format()

    from math import log10
    
    N = int(input())
    decwidth = int(log10(N) + 1)
    binwidth = N.bit_length()
    hexwidth = (binwidth - 1) // 4 + 1
    octwidth = (binwidth - 1) // 3 + 1
    
    for i in range(1, N + 1):
        print(f'{i:>{decwidth}d} {i:>{octwidth}o} {i:>{hexwidth}X} {i:>{binwidth}b}')