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.
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.