Como já disse em posts passados, estou tentando trazer conteúdo para ativar o lado “programador raiz” de quem acessa o blog. Isso no sentido de trabalhar lógica, linguagem orientada a objetos, dentre outras coisas. Caso você não tenha visto, os posts Construindo seu primeiro app em Python e Uma introdução a Python orientado a objetos: Construção de classes ficaram bem interessantes. Pensando nisso, hoje vamos abordar um exercício clássico dos cursos de introdução à programação: como converter decimal para binário. Porém, isso está acompanhado de funções e loops!
POR QUE ESTE EXERCÍCIO?
Pensar de forma lógica é essencial para programadores. Além disso, todo tipo de exercício, principalmente quando não se conhece todas as funções que vêm embutidas nas linguagens, ajuda a explorar métodos comumente usados na programação, como loops, condicionais, funções, dentre outras coisas. Você vai ver que este exercício vai te trazer diversas ferramentas para serem utilizadas no futuro. Inclusive, os primeiros dois trechos deste post é sobre Python e não sobre o exercício em si.
FUNÇÕES EM PYTHON
Primeiro, vamos lembrar a sintaxe de uma função em Python. A estrutura é bem simples, basta você utilizar o def seguido do nome da função, em parênteses deve estar os valores que serão utilizados na execução da função e o bloco de código que será executado ao chamar a função:
def nome_da_funcao(input1, input2, ..., inputn): <comando 1> <comando 2> <comando 3> . . . return saida_da_funcao
O exemplo mais simples é uma função que retorna uma mensagem qualquer:
def funcao_ola_mundo(): return print("Olá, mundo!")
Veja que os inputs são opcionais e, neste caso, sequer precisamos de algum. Para executá-la, basta digitar o nome dela:
Agora, vamos praticar um exemplo no qual a função receba um input. Veja um exemplo que verifica se um número é par ou ímpar:
Como você deve ter notado, o símbolo ‘%’ traz a sobra da divisão entre dois números. Agora que você sabe como criar uma função, vamos criar uma que converta um número decimal para binário.
WHILE E FOR
Imagine que você deseja repetir uma tarefa inúmeras vezes no Python. Neste caso, não seria muito inteligente ficar reescrevendo o comando. Apesar da função já ser uma forma de lidar com repetições, há outros dois modos muito úteis para tarefas repetitivas: while e for.
Como o próprio nome já diz, while serve para repetir uma tarefa enquanto uma condição não é atendida. Imagine que você quer repetir uma tarefa 50 vezes, você pode criar um bloco de comandos que se repetem enquanto um contador artificial não atinge 50:
contador = 0 while contador < 50: <comando_1> <comando_2> <comando_3> <comando_4> . . . <comando_n> contador = contador+1 # ou contador+=1
Este é o modelo mais simples de uso do while. Não será utilizado na resolução do desafio proposto no post, mas no Python é possível fazer uso do else junto com o while. Isso para quando a condição do while não for atendida. Abaixo, um exemplo diferente, onde guardamos os quocientes de cada divisão e utilizamos o else para informar o usuário através de uma mensagem que a condição já não é mais atendida:
n = 1 lista_quocientes = [] while n < 6: lista_quocientes.append(int(n/5)) print(n) n+=1 else: print("A condição já não é mais atendida.")
Agora que você já sabe realizar repetições enquanto uma condição não é atendida, é hora de realizar repetições pela quantidade de vezes que você quiser. Quando se utiliza o for, realizamos um bloco de comandos durante quantas vezes quisermos. Essa quantidade pode ser passada dando uma lista de valores da forma que você achar mais conveniente. Tipicamente, temos algo assim:
for i in intervalo_qualquer: <comando_1> <comando_2> <comando_3> <comando_4> . . . <comando_n>
Neste caso, i toma cada um dos valores do intervalo e algum comando, ou grupo de comandos, é realizado. Veja um exemplo bem simples:
for i in [1,2,3,4]: print(i)
Obviamente, i pode ser chamado de qualquer coisa, como ‘x’, ‘valor’, dentre outras possibilidades. Além disso, tenha em mente que podemos utilizar os valores de i para realizar operações e não somente exibir em mensagens. Podemos inclusive fazer loops em palavras. No exemplo abaixo, temos uma lista de nomes e vamos salvar as iniciais deles numa nova lista:
nomes = ['Adriana', 'Bruno', 'Marcos', 'Patricia'] iniciais = [] for nome in nomes: iniciais.append(nome[0])
CONVERSOR DE DECIMAL PARA BINÁRIO: MODELO FÁCIL
A forma mais simples de fazer é essa:
def decimal_para_binario(x):
return int(bin(x)[2:])
O resultado:
Note que há algumas etapas para se entender a função:
- bin(): Essa função já vem no Python e retorna um texto que é o equivalente binário ao número dado. Ex.: bin(6) retorna ‘0b110’ e bin(99) retorna ‘0b1010’. O prefixo ‘0b’ significa que é uma string binária.
- [2:]: Pega-se do terceiro ao último elemento da string que foi passada. Se x for igual a ‘Yukio’, então x[2:] retornará ‘kio’. No nosso caso, pegaremos tudo que vem após o ‘b’;
- int(): Converte o número que está em formato texto para o formato numérico.
CONVERSOR DE DECIMAL PARA BINÁRIO: USANDO A LÓGICA
Bom, a resposta acima é muito fácil e não tem nenhum desafio em termos de lógica de programação. Para algo um pouco mais desafiador, podemos pensar no passo a passo de conversão de um decimal para binário:
- Divide-se o valor por 2;
- Pega-se o quociente da divisão e divide por 2;
- Repete-se o passo acima enquanto o quociente for maior que zero;
- Une-se os restos das divisões formando um novo número;
- Inverte-se a ordem da união feita no item anterior;
- Temos o número binário.
Difícil entender assim, né? Vejamos um exemplo prático:
Este exemplo foi retirado do vídeo “Como transformar um número decimal em binário” do canal GCFAprendeLivre no Youtube. Veja que 25 na base 10 é equivalente a 11001 na base 2.
Dessa forma, vamos utilizar o while e o for para realizar os passos acima. O while será usado pois faremos a divisão repetidas vezes e o for para organizar as strings:
def decimal_para_binario(x): # Criamos uma lista vazia lista_restos=[] # Dividimos o numero por 2 e vamos guardando o resto da divisao na lista vazia while (x>0): resto = float(x%2) lista_restos.append(int(resto)) x = int(x/2) # cria uma string para receber o número binario numero_binario="" # le a lista dos restos na ordem contraria for j in lista_restos[::-1]: numero_binario=numero_binario+str(j) return numero_binario
Veja quanta coisa você aprendeu com um simples exercício. Você pode se aventurar e criar uma calculadora de decimal para binário e até de outras conversões que você queira se baseando no post Construindo seu primeiro app em Python.
E aí? Gostou do conteúdo? Se inscreva para receber as novidades! Deixe seu e-mail em INSCREVA-SE na barra à direita, logo abaixo de pesquisar. E, por favor, não deixe de comentar, dar seu feedback e, principalmente, compartilhar com seus amigos. De verdade, isso faz toda a diferença. Além disso, você também pode acompanhar mais do meu trabalho seguindo a conta de Twitter @EstatSite ou por alguma das redes que você encontra em Sobre o Estatsite / Contato, como meu canal de Youtube Canal do Yukio. E se você gosta de tecnologia, escute o Pitacotech!
Bons estudos!
ótimo conteúdo
Obrigado!!