打印右对齐的二进制数列表

时间:2018-08-17 12:14:48

标签: python-3.x

这里是将十进制数字number转换为二进制(DectoBin)并打印从1number的所有二进制数字的列表的代码({ {1}}):

print_formatted

我得到的输出:

def DectoBin(number):
    j=1
    binary = 0
    while (number != 0):
        reminder = number % 2
        number= int(number / 2)
        binary= binary + reminder * j
        j *= 10
    return(binary)

def print_formatted(number):
    for j in range(1, number + 1):
        bin1 = DectoBin(j)        
        print(bin1, end='\n')

我想要的输出(右对齐的二进制数列表):

1
10
11
100
101
110
111
1111

2 个答案:

答案 0 :(得分:0)

如下定义print_formatted函数。这样可以确保在每个数字之前用正确的空格数对二进制数字正确进行右对齐:

import math

def print_formatted(number):
    max_bits = math.ceil(math.log2(number + 1))
    for j in range(1, number + 1):
        bin1 = str(DectoBin(j)).rjust(max_bits)
        print(bin1, end='\n')

max_bits是用于表示number的位数,rjust用于对长度为max_bits的字符串中的字符串进行右对齐。

答案 1 :(得分:0)

请参见PEP 498,其中介绍了文字字符串插值。您可以使用它来纠正打印输出的合理性:

def DectoBin(number):
    j=1
    binary = 0
    while (number != 0):
        reminder = number % 2
        number= int(number / 2)
        binary= binary + reminder * j
        j *= 10
    return(binary)


for i in range(16):
    print (f'{DectoBin(i):>5}')

产生以下输出:

    0
    1
   10
   11
  100
  101
  110
  111
 1000
 1001
 1010
 1011
 1100
 1101
 1110