Python 需要帮助理解代码吗

Python 需要帮助理解代码吗,python,python-3.x,Python,Python 3.x,有人能解释一下这个代码吗。我不明白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
在这里做什么?我们已经将
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))

n
统计数字中的位数
n
bin()
生成二进制表示形式(零和一),如带有
0b
前缀的字符串:

>>> bin(42)
'0b101010'
因此
len(bin(n))
采用该输出字符串的长度减去2作为前缀

见:

将整数转换为前缀为“0b”的二进制字符串

长度用于设置列的宽度(via,它在字符串前面添加空格以创建
n
字符宽的输出)。了解最宽的二进制表示法需要多少字符在这里很有帮助

但是,可以通过以下方式直接从号码中获取相同的信息:

其他列的数字也过大。您可以计算每列的最大宽度,并使用
str.format()
或f字符串进行格式化:

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}')

n
统计数字中的位数
n
bin()
生成二进制表示形式(零和一),如带有
0b
前缀的字符串:

>>> bin(42)
'0b101010'
因此
len(bin(n))
采用该输出字符串的长度减去2作为前缀

见:

将整数转换为前缀为“0b”的二进制字符串

长度用于设置列的宽度(via,它在字符串前面添加空格以创建
n
字符宽的输出)。了解最宽的二进制表示法需要多少字符在这里很有帮助

但是,可以通过以下方式直接从号码中获取相同的信息:

其他列的数字也过大。您可以计算每列的最大宽度,并使用
str.format()
或f字符串进行格式化:

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}')