Я пытаюсь создать стандартную функцию для преобразования любого десятичного значения в его восьмеричный, шестнадцатеричный и двоичный эквивалент, но по какой-то причине он не работает для двоичного кода.Я попытался ввести дополнительные меры предосторожности в условный оператор для проверки базы 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, чтобы добавить 1 во временный список conv
.Затем я преобразовываю список в строку, обращаю его и возвращаю как int.
Например.Если ввод 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)