我尝试构建一个标准函数,将任何十进制值转换为它的八进制、十六进制和二进制等价物,但出于某些原因,它不能处理二进制。我尝试在条件语句中加入额外的预防措施来检查基数为2,但仍然无法正常工作。
这是函数(我知道这对十六进制值不起作用。我之后会处理它):
在代码行
例如,如果输入是
这些函数负责输入和输出打印:
这是函数(我知道这对十六进制值不起作用。我之后会处理它):
def convert(num, base):
remainder = num % base
conv = []
if(remainder == 0):
conv.append('0')
elif(remainder != 0 and base == 2):
conv.append('1')
else:
conv.append(str(remainder))
result = ''.join(conv)
output = result[::-1]
return int(output)
在代码行
elif(remainder != 0 and base == 2):
中,我检查余数不为0且基数为2时,向临时列表 conv
添加1。然后将列表转换为字符串,反转并将其作为整数返回。例如,如果输入是
17
,则输出需为: 1 1 1 1
2 2 2 10
3 3 3 11
4 4 4 100
5 5 5 101
6 6 6 110
7 7 7 111
8 10 8 1000
9 11 9 1001
10 12 A 1010
11 13 B 1011
12 14 C 1100
13 15 D 1101
14 16 E 1110
15 17 F 1111
16 20 10 10000
17 21 11 10001
这些函数负责输入和输出打印:
def print_formatted(number):
# your code goes here
for i in range(number):
print(
str(i + 1) + " " +
str(convert(i + 1, 8)) + " " +
str(convert(i + 1, 16)) + " " +
str((convert(i + 1, 2)))
)
if __name__ == '__main__':
n = int(input())
print_formatted(n)
更新
与其整个方程式都处理,我决定使用内置函数并修剪前两个字符(即0b
),以便它符合格式。我试图基于二进制输出的宽度将它们相互分离,但我无法找到一种方法来实现。目前为止,这就是我所拥有的。
def convert(num, base):
# get the highest power
val = ''
hex_char_list = ['A', 'B', 'C', 'D', 'E', 'F']
if(base == 2):
bin_num = bin(num)
bin_list = list(bin_num)
bin_list_2 = bin_list[2:]
val = ''.join(bin_list_2)
if(base == 8):
oct_num = oct(num)
oct_list = list(oct_num)
oct_list_2 = oct_list[2:]
val = ''.join(oct_list_2)
if(base == 16):
hex_num = hex(num)
hex_list = list(hex_num)
hex_list_2 = hex_list[2:]
val = ''.join(hex_list_2)
if val in hex_char_list:
val = val.upper()
return val
def print_formatted(number):
# your code goes here
width = len(convert(number, 2).format(number))
for i in range(number):
print(
str(i + 1) + width +
str(convert(i + 1, 8)) + width +
str(convert(i + 1, 16)) + width +
str((convert(i + 1, 2)))
)
if __name__ == '__main__':
n = int(input())
print_formatted(n)