任何人都可以稍微解释一下此代码。我不明白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))
答案 0 :(得分:2)
n
计算数字N
中的位数。 bin()
生成二进制表示形式(零和一),作为带有0b
前缀的字符串:
>>> bin(42)
'0b101010'
因此,len(bin(n))
用该输出字符串的长度减去2来表示前缀。
将整数转换为以“ 0b”为前缀的二进制字符串。
长度用于设置列的宽度(通过str.rjust()
,这会在字符串的前面添加空格以创建宽度为n
个字符的输出)。知道最宽的二进制表示形式需要多少个字符会有所帮助。
但是,可以使用int.bitlength()
method直接从号码中 获得相同的信息:
>>> N = 42
>>> N.bit_length()
6
>>> len(bin(N)) - 2
6
其他列的数字也过大。您可以改为计算每列的最大宽度,然后使用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}')