In [1]:
# ignore esse código inicial, é apenas para preparar a página
from IPython.display import YouTubeVideo, HTML, Image, display
css_file = './modelo.css'
HTML(open(css_file, "r").read())
Out[1]:
Vamos lembrar das aulas de Natureza da Informação quando aprendemos a converter um número decimal para binário.
Começando com o exemplo de dec = 14.
dec | dec/2 | dec%2 | bin |
---|---|---|---|
14 | 7 | 0 | 0 |
7 | 3 | 1 | 10 |
3 | 1 | 1 | 110 |
1 | 0 | 1 | 1110 |
0 | - | - | 1110 |
O número binário é 1110.
Vamos descrever o processo que realizamos:
Os 3 últimos itens podem ser resolvidos com nosso conhecimento atual.
Vamos fazer um rascunho desses itens:
In [5]:
def DivResto(num, base):
"""
Retorna o quociente e resto da divisão de num por base
"""
return num//base, num%base
In [6]:
dec = 14
bin = "" # string vazia
div, resto = DivResto(dec,2)
dec = div
bin = str(resto) + bin
print(bin)
In [7]:
# repete mais uma vez, pois temos outro dígito
div, resto = DivResto(dec,2)
dec = div
bin = str(resto) + bin
print(bin)
Para resolver o primeiro item, utilizamos o comando while
que significa enquanto:
while condicao verdadeira:
faça alguma coisa
Esse comando instrui o Python a repetir o bloco de instruções abaixo enquanto certa condição for verdadeira.
No nosso caso a condição é que dec
seja maior que zero.
In [8]:
def Converte(dec,base):
num = ""
while dec > 0:
div, resto = DivResto(dec,base)
dec = div
num = str(resto) + num
return num
print(Converte(14,2))
Reparem que substituindo $2$ por qualquer outro número, convertemos o número para outras bases menores do que $10$.
Nota: Podemos indicar para uma função um valor padrão para sua variável.
In [9]:
def Converte(dec,base=2):
num = ''
while dec > 0:
div, resto = DivResto(dec,base)
dec = div
num = str(resto) + num
return num
print(Converte(14)) # usará a base 2
print(Converte(14, 3)) # usará a base 3
print(Converte(14, base=3)) # usará a base 3
Como podemos adaptar nossa função para que possamos converter também para bases maiores que 10?
In [8]:
def Converte(dec,base):
num = ''
while dec > 0:
div, resto = DivResto(dec,base)
dec = div
num = ??? + num
return num
print(Converte(14,16), hex(14)) # hexadecimal
In [11]:
import string
print(dir(string))
print()
print(string.digits, string.ascii_uppercase)
In [12]:
digitos = string.digits+string.ascii_uppercase
print(digitos[0], digitos[10])
In [13]:
def Converte(dec,base):
digitos = string.digits+string.ascii_uppercase
num = ''
while dec > 0:
div, resto = DivResto(dec,base)
dec = div
num = digitos[resto] + num
return num
print(Converte(14,16), hex(14)) # hexadecimal
Faça um programa que sorteie um número e peça para o usuário adivinhar.
Informe o usuário se o número sorteado é maior ou menor que o chute dele e repita a operação até que ele adivinhe.
Para sortear um número use a função randint(a,b)
da biblioteca random
, ele sorteia um número inteiro entre a e b.
In [2]:
import random
def Adivinhe():
x = random.randint(0,100)
Adivinhe()
A multiplicação Etíope é um método de multiplicação que utiliza apenas a divisão e multiplicação por $2$.
Dado $m$ e $n$, faça:
In [4]:
def Etiope(m, n):
print(Etiope(12,13), 12*13)
print(Etiope(22,18), 22*18)
Existem algumas sintaxes no Python conhecidas como Syntactic sugar que são formas de reduzir longas sequências de instruções de uma forma mais simples para leitura.
Um exemplo são instruções if-else
que contém apenas uma instrução a serem executadas:
variavel = valor1 if condicao else valor2
A variável irá receber o valor1
caso a condição seja verdadeira, caso contrário receberá o valor2
.
Outra Syntactic Sugar é atribuição de valores para múltiplas variáveis em uma linha:
variavel1, variavel2 = valor1, valor
A variavel1
receberá o valor1
, enquanto a variavel2
receberá o valor2
.
In [5]:
def Etiope(m, n):
print(Etiope(12,13), 12*13)
print(Etiope(22,18), 22*18)
Crie uma função para calcular a soma dos dígitos de um número.
Primeiro, faça o procedimento sem auxílio do computador e tente abstrair a solução do problema.
DICA: Utilize a nossa função DivResto()
criada anteriormente.
In [14]:
def SomaDigitos(num):
print(SomaDigitos(12345))
Crie uma função para verificar se um número é primo!
Pense na condição de repetição e quando podemos retornar o resultado para fazer o menor número de repetições.
In [9]:
def Primo(num):
# ele não pode ser divisível por nenhum número de 2 a num-1
print(Primo(10))
print(Primo(13))
print(Primo(131))