Executando verificação de segurança...
9

Programação para iniciantes para quem não é iniciante, Parte 3

Atenção, isso não é um tutorial! Pessoas de coração fraco podem passar mal.

Link para a parte 2

Errata e mudança de planos

No codigo anterior existe um problema para multiplicar devido a o acumulador iniciar com zero. Enfim, tentei deixar o código muito simples para evitar que as pessoas fiquem pensando mais na implementação do que nos conceitos. Mas sintam-se livres para corrigir e responder com um código 100% funcional.

Pensei em simular como seria um cartão perfurado passando pela calculadora programável e apertando os botões, acredito que esse conceito deve já estar bem explicado então vou pular essa, caso ainda não tenha entendido volte para a caixa de música.

Olá meus caros!

Chegou a hora de deixar nossa calculadora com um pouco mais de cara de um computador. Mais alguns passos e estamos próximos de criar nossa própria máquina virtual!!

Instruções em forma de números

Dentro do processador existem um componente chamado instruction decoder basicamente é um componente onde ele recebe um número e executa quais "botões devem ser apertados dentro do processador". Vamos simular isso na nossa calculadora:

Adicione este metodo no PocketCalculator:

    ...
    def read_intruction(self, instruction_number: int):
        instructions_decoder = {
            0: self.KEY_0,
            1: self.KEY_1,
            2: self.KEY_2,
            3: self.KEY_3,
            4: self.KEY_4,
            5: self.KEY_5,
            6: self.KEY_6,
            7: self.KEY_7,
            8: self.KEY_8,
            9: self.KEY_9,
            10: self.KEY_PLUS,
            11: self.KEY_MINUS,
            12: self.KEY_MULTIPLY,
            13: self.KEY_EQUALS
        }
        instructions_decoder[instruction_number]()

Basicamente o que fizemos foi criar um dicionário onde cada número de 0-13 aponta para uma tecla da nossa calculadora.

Agora vamos escrever essa função que vai ler um arquivo json com uma lista de números:

def run_program():
    calculator = PocketCalculator()
    ''' Seu programa no arquivo JSON deve ser uma lista de números inteiros
        [
            1,   // KEY_1
            2,   // KEY_2
            10,  // KEY_PLUS
            3,   // KEY_3
            0,   // KEY_0
            13   // KEY_EQUALS
        ]
    '''
    with open('program.json', 'r') as f:
        program = json.load(f)

    for instruction in program:
        calculator.read_intruction(instruction)

    print(calculator.display)
    assert calculator.display == '42'

if __name__ == '__main__':
    run_program()

Essa função vai ler um arquivo JSON e vai executar cada instrução descrita nele.
Podemos chamar aqui cada número desse que mapeia uma tecla (instrução) de opcode (operation code) e a lista desses códigos de bytecode. Familiar? Na próxima vamos entender onde as variáveis dos seus programas são armazenadas.