Python IDLE: Неправильное выравнивание пробелов

Итак, у меня есть скрипт Python, который выполняет двоичные преобразования чисел:

Итак, я сохраняю его как файл и нажимаю F5.

Вывод следующий:

Почему он это делает?

Итак, чтобы проверить свой code на работоспособность, я пытаюсь скопировать вывод в ближайшее текстовое поле, которое смог найти. ChatGpt. Он волшебным образом отформатирован именно так, как и должен быть.

Почему он работает здесь, но не в IDLE?

А вот моя конфигурация шрифта, если это важно.

Кстати, я полный новичок в Python и не знаю многого о таких вещах, как настройка IDLE.

Итак, если у вас есть какой-то настоящий "вопрос", так это ПОЧЕМУ он это делает, КАК это можно исправить и есть ли способ заставить его работать глобально, потому что командная строка Windows делает то же самое.

РЕДАКТИРОВАТЬ: Если вы Интересно, что такое 16-битный режим, я знаю. Он сломан. Я попросил chatgpt написать эту часть, так что я не ожидал, что он будет работать идеально с первой попытки.

def generate_binary_representation(bit_size):
    binary_dict = {}
    for num in range(2 ** bit_size):
        binary_rep = format(num, f'0{bit_size}b')
        binary_dict[num] = {"binary": binary_rep, "components": [int(b) for b in binary_rep]}
    return binary_dict

def run_conversion(bit_size):
    return generate_binary_representation(bit_size)

def display_results(bit_size, binary_dict):
    for num, data in binary_dict.items():
        if bit_size == 4:
            print(f'+{num} = {data["components"]}')
            print(f'8421\n{data["binary"]}\n')
        elif bit_size == 8:
            print(f'+{num} = {num}')
            print(f'128 64 32 16')
            print(f'|     /    /    /')
            print(f'|  /    /     / ')
            print(f'| |   /     /  ')
            print(f'| |  /    /   ')
            print(f'| | |   / 8421')
            print(f'{data["binary"][:4]}  {data["binary"][4:]}\n')
        elif bit_size == 16:
            print(f'+{num} = {num}')
            print(f'32768 16384 8192 4096')
            print(f'|         /         /         /         /')
            print(f'|      /         /         /         /  ')
            print(f'|   /         /         /         /   ')
            print(f'| /         /         /         /    ')
            print(f'| |        /         /         /     ')
            print(f'| |      /         /         /      ')
            print(f'| |    /         /         /       ')
            print(f'| |   /         /         /        ')
            print(f'| |  /         /         /         ')
            print(f'| | /         /         / 128 64 32 16')
            print(f'{data["binary"][:4]}  {data["binary"][4:8]}  {data["binary"][8:12]}  {data["binary"][12:]}\n')

def main():
    print("Choose bit size for conversion:")
    print("1. 4-bit")
    print("2. 8-bit")
    print("3. 16-bit")
    
    choice = input("Enter your choice (1/2/3): ")
    
    bit_size_map = {'1': 4, '2': 8, '3': 16}
    
    if choice not in bit_size_map:
        print("Invalid choice. Exiting.")
        return
    
    bit_size = bit_size_map[choice]
    
    background_run = input("Do you want to run the conversion in the background? (yes/no): ").lower()
    
    if background_run == 'yes':
        limit = int(input(f"Enter the limit for conversion (max {2 ** bit_size - 1}): "))
        if limit > 2 ** bit_size - 1:
            print(f"Limit exceeds maximum value for {bit_size}-bit. Exiting.")
            return
        
        binary_dict = generate_binary_representation(bit_size)
        binary_dict = {k: v for k, v in binary_dict.items() if k <= limit}
        print(f"Conversion completed up to {limit}.")
    else:
        binary_dict = run_conversion(bit_size)
        display_results(bit_size, binary_dict)
    
    while True:
        lookup_choice = input("Enter a number to lookup (or 'exit' to quit): ").lower()
        if lookup_choice == 'exit':
            break
        
        try:
            num = int(lookup_choice)
            if num in binary_dict:
                data = binary_dict[num]
                if bit_size == 4 and num <= 15:
                    print(f'+{num} = {data["components"]}')
                    print(f'8421\n{data["binary"]}\n')
                elif bit_size == 8:
                    print(f'+{num} = {num}')
                    print(f'128 64 32 16')
                    print(f'|     /    /    /')
                    print(f'|  /    /     / ')
                    print(f'| |   /     /  ')
                    print(f'| |  /    /   ')
                    print(f'| | |   / 8421')
                    print(f'{data["binary"][:4]}  {data["binary"][4:]}\n')
                elif bit_size == 16:
                    print(f'+{num} = {num}')
                    print(f'32768 16384 8192 4096')
                    print(f'|         /         /         /         /')
                    print(f'|      /         /         /         /  ')
                    print(f'|   /         /         /         /   ')
                    print(f'| /         /         /         /    ')
                    print(f'| |        /         /         /     ')
                    print(f'| |      /         /         /      ')
                    print(f'| |    /         /         /       ')
                    print(f'| |   /         /         /        ')
                    print(f'| |  /         /         /         ')
                    print(f'| | /         /         / 128 64 32 16')
                    print(f'{data["binary"][:4]}  {data["binary"][4:8]}  {data["binary"][8:12]}  {data["binary"][12:]}\n')
            else:
                print(f'{num} is out of range for {bit_size}-bit conversion.')
        except ValueError:
            print("Invalid input. Please enter a number or 'exit'.")

if __name__ == "__main__":
    main()
Андроник
Вопрос задан17 января 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.