Exercicios Python
Exercicios Python
1. Faça um programa que leia um número e diga se ele é perfeito. Um número perfeito é aquele
que é igual à soma dos seus divisores. Por exemplo, 28 = 14 + 7 + 4 + 2 + 1.
2. Faça um programa que leia um número e liste todos os seus fatores primos. Por exemplo, o
número 28 tem como fatores primos 2, 2 e 7. Números primos, obviamente, só têm um fator primo.
Opcionalmente, imprima a lista dos fatores primos usando notação de potenciação para escrever os
fatores que aparecem mais de uma vez. Por exemplo, 54 = 2 * 3**3.
3. Escreva um programa para converter números escritos em algarismos arábicos para romanos,
mas evite escrever mais do que 4 ou 5 "if"s. A idéia é usar um comando while para analisar cada casa
decimal e gerar os caracteres romanos diferentemente para cada iteração. Use uma string para
armazenar as letras usadas para cada casa: por exemplo, na string "IVXLCDM", as letras nas posições 0
a 2 são usadas no processamento das unidades, as letras nas posições 2 a 4 são usadas no
processamento das dezenas, etc.
4. Faça um programa que leia uma palavra e diga se é palíndroma. Uma palavra é palíndroma se é
idêntica quando lida de trás para diante. Por exemplo, "reler" é um palíndromo.
5. Faça um programa que leia duas palavras e responda se são palíndromas mútuas. Uma palavra
é palíndromo de outra se é igual a esta escrita de trás para frente. Por exemplo, "roma" e "amor" são
palíndromos.
6. Repita os exercícios acima, mas agora com frases palíndromas. A única dificuldade a mais deste
exercício reside em desconsiderar os espaços em branco. Por exemplo, a frase "SOCORRAM ME SUBI
NO ONIBUS EM MARROCOS" é palíndroma de si própria.
7. Repita os exercícios acima, mas agora testando se palavras e frases são anagramas. Um
anagrama de uma palavra é outra palavra escrita com os mesmos caracteres. Por exemplo, "porta" e
"tropa" são anagramas. Obs.: claro está que todas as palindromas são também anagramas.
1. Escreva um programa que leia duas cadeias de caracteres A e B e diga se A é uma
subsequência de B. A é uma sub-seqüência de B se todos os elementos de A podem ser encontrados
em B na mesma ordem que aparecem em A (possivelmente separados por elementos de B que não
aparecem em A). Assim, por exemplo, "abc" é uma sub-seqüência de "xaycbxadc", mas não é
subsequência de "ybazcxd".
2. Escreva um programa que leia um texto e imprima ao final uma estatística onde constem:
número total de caracteres, número total de linhas, número total de palavras, maior palavra (isto é,
palavra com mais caracteres) e palavra mais freqüente.
3. Suponha que você vai fazer um sistema de banco de dados (em memória) para um banco
comercial. Assuma que o banco tem uma lista de clientes, sendo que cada cliente pode ter várias contas
e, em cada conta, vários lançamentos podem ser feitos (débitos ou créditos). Pede-se:
1. Que estruturas de dados você usaria para implementar o banco de dados desse banco?
2. Ilustre como usar essas estruturas de dados escrevendo trechos de código para as
seguintes operações:
1. Cadastrar um novo cliente com nome dado por Nome.
2. Cadastrar uma nova conta para o cliente Nome. O resultado deve ser um
número inteiro ainda não usado por cliente nenhum e que será usado para identificar a nova conta.
3. Fazer um lançamento de Valor na conta Conta.
4. Obter o extrato da conta Conta, isto é, uma listagem com todos os
lançamentos e o saldo.
5. Obter o saldo de todas as contas pertencentes a Nome
4. Escreva um programa para gerenciar diagramas de palavras cruzadas. A entrada para o
programa deve ser lida do teclado numa lista de tuplas onde cada tupla contém:
Coordenadas x e y da primeira letra da palavra, onde as coordenadas x=1, y=1
correspondem ao canto superior esquerdo do diagrama.
Tipo da entrada: 'H' para horizontal e 'V' para vertical.
A palavra armazenada como uma string.
O seu programa deverá:
1. Fazer a leitura dos dados e colocá-los na forma de uma lista de tuplas como descrito
acima.
2. Dizer se os dados são consistentes para um diagrama de palavras cruzadas, isto é,
entradas não devem ser superpor no diagrama e, caso o façam (uma entrada horizontal e outra vertical,
por exemplo), devem ter letras coincidentes nas casas comuns. Também deve verificar se duas entradas
horizontais na mesma linha ou duas entradas verticais da mesma coluna possuem ao menos uma casa
vazia entre elas.
3. Imprimir os dados na forma de um diagrama de palavras cruzadas usando caracteres
ascii para emoldurar as casas. Uma casa em branco não deve ser emoldurada, a menos que seja vizinha
a casas com letras dos 4 lados. Nesse caso, deve ser preenchida com asteriscos. Por exemplo, a entrada
A entrada dada por:
2 1 V AMA
4 1 V MARTE
1 2 H IMPAR
3 4 H ITA
Gera a saída:
+---+ +---+
|A| |M|
+---+---+---+---+---+
|I|M|P|A|R|
+---+---+---+---+---+
| A |***| R |
+---+---+---+---+
|I|T|A|
+---+---+---+
|E|
+---+
1. Suponha que a Python não dispusesse da função sqrt ou do operador de exponenciação. Então,
uma maneira de obter a raiz quadrada seria através de busca binária. Assuma que a raiz quadrada de x
está entre 0 e x. Então, se quisermos saber se um palpite y é a raiz quadrada de x, basta testar se y*y é
igual a x ou, pelo menos, se está próximo dentro de uma tolerância. Caso contrário, podemos restringir a
busca entre 0 e y ou entre y e x. Escreva uma função raiz(x) que implemente este algoritmo.
2. Crie uma classe Data para implementar datas.
O construtor deve ser flexível e aceitar datas com anos com 2 dígitos ou 4, meses em
forma numérica ou alfabética. Deve também testar se a data é válida.
Deve ser possível comparar datas com os operadores ==, !=, <, >, <=, >=, que são
implementados pelos métodos __eq__, __ne__, __lt__, __gt__, __le__, __ge__
Duas datas devem poder ser subtraídas resultando no número de dias entre elas.
Escreva um método __repr__ para escrever datas.
3. Estenda a classe Data escrevendo uma classe Instante que represente tempo medido em
milésimos de segundo. Em particular, dois instantes também podem ser comparados ou subtraídos (o
resultado é dado em milésimos de segundo).
4. Escreva uma classe chamada FuncaoAmostrada que representa uma função de uma variável
definida a partir de pares (x,y). Então, se fa é um objeto dessa classe,
1. fa[x]=y # acrescenta uma amostra ao objeto
2. y = fa[x] # avalia a função em x
3. fa.dominio() # retorna o domínio da função como uma tupla (xmin, xmax), ou seja, os valores de
x para os quais a função está definida
2. Escreva uma função recursiva que dê uma solução para o problema das oito rainhas: como
colocar nove rainhas num tabuleiro de xadrez de tal forma que nenhuma rainha possa ser atacada por
nenhuma outra. Lembre que uma rainha é uma peça do jogo de xadrez capaz de se mover
horizontalmente, verticalmente e diagonalmente um número qualquer de casas.
Escreva uma função em Python, e teste-a na console com pelo menos três exemplos, que:
2) Calcule a área da coroa circular (anel) formada por dois círculos de raios r1 e r2 (r1 > r2 e Pi
= 3.14).
Teste pelo menos para os seguintes pares de entrada:
2 e 1; resposta esperada é 3.14
15 e 5; resposta esperada é 628
100 e 0; resposta esperada é 31400
3) Calcule o resultado e o resto da divisão de dois números inteiros (a função deve retornar os
dois valores).
4) Calcule a ordenada de uma função de segundo grau dados os parâmetros a, b, c e a
abscissa.
8) Calcule a distância que a correnteza arrasta um barco que atravessa um rio. São
conhecidas: a velocidade da correnteza, a largura do rio e a velocidade do barco perpendicular
à correnteza.
9) Calcule o saldo final de uma conta, dado o saldo inicial, o número de meses e a taxa de
juros mensal (juros simples).
10) Calcule o erro entre o valor da soma de uma PG infinita a partir de 1.0 e a soma dos n
primeiros termos dessa PG.
A soma dos termos de uma PG é 1/(1-q), onde q é a razão e 0 <= q < 1.
11) Calcule o tempo total de prova de um corredor de maratona em horas, minutos e segundos,
dados: o tempo de partida (hh,mm,ss), e o tempo de chegada (hh,mm,ss).
12) Calcule o valor da gorjeta (10%) e o quanto cada pessoa de um grupo deve pagar (divisão
equalitária).
São dados o valor total da conta do restaurante e o número de pessoas na mesa.
Escreva uma função em Python, e teste-a na console com pelo menos três exemplos, que:
((divisão inteira))
1) Calcule a média entre quatro números (use a função de média de dois números).
2) Uma pessoa quer comprar o maior número possível de computadores com o dinheiro que
tem.
Calcule o número de computadores e o troco, dados a quantia disponível e o preço do
computador.
Calcule quanto a pessoa terá que pedir emprestado para comprar um computador a mais,
usando a função anterior.
(( math.sqrt ))
7) Calcule a distância que um barco percorreu ao atravessar um rio, dadas a largura do rio, a
velocidade do barco perpendicular à correnteza e a velocidade da correnteza. Nete caso, use
duas funções que você já escreveu.
8) Calcule as raízes reais de uma equação do segundo grau, dados seus parâmetros a, b e c.
9) Calcule a distância percorrida por uma bola, jogada para o alto, dada a velocidade inicial e a
aceleração da gravidade.
10) Calcule a distância percorrida pela bala de um canhão, dados o ângulo de tiro e a
velocidade da bala.
Indique as coordenadas de um plano onde a bala vai cair, dada a direção (o ângulo em relação
ao eixo x), o ângulo de tiro e a velocidade da bala. Considere que o canhão está na origem do
plano (use a função anterior).
A distância percorrida pela bala é função do tempo de vôo e da componente horizontal da sua
velocidade e a sua trajetória é aproximadamente um parábola.
13) Desafio: calcule o valor mínimo entre dois números (sem usar instruções condicionais).
Dica: use a função abs que calcula o módulo de um número.
2. Retorne as soluções de uma equação de segundo grau, dados os valores dos três
coeficientes (lembre-se que as soluções podem ser complexas).
<<< gráfico de uma função com umas 4 partes, pelo menos uma parte é descontínua >>>
Qual o número mínimo de casos de teste para garantir que todas as linhas do programa são
executadas? Crie casos de teste para os pontos de inflexão da função (as fronteiras entre cada
parte).
7. Calcule a média final desse curso, dadas as três notas (lembre-se que a fórmula da média
final é a média aritmética das duas maiores notas).
9. Diga se um polinômio do segundo grau tem raízes reais ou não, dados seus três coeficientes
(retorne True ou False). Pense em casos de teste para sua função.
10. Diga se uma pessoa tem direito à meia entrada, dados a idade da pessoa e se ela tem ou
não carteira de estudante (True se tem, False se não tem). Lembrando que uma pessoa tem
direito à meia-entrada se é maior de 65 anos ou estudante. O que acontece caso uma pessoa
maior de 65 anos tenha carteira de estudante?
Desafio: faça uma função que receba cinco números e os retorne em ordem crescente.
2. Digite uma sequência de números e retorne quantos desses números sâo maiores do que 5.
A entrada de dados termina quando for digitado o número -1.
6. Retorne o valor de uma dívida, dadas a taxa de juros mensal, o montante inicial e o número
de meses. Considere juros compostos.
Desafio: faça uma função para calcular a raiz quadrada pelo método de Newton.
Faça um programa que:
1. Imprima as tabuadas de multiplicação dos números de 0 a 9.
5. Imprima um triângulo reto dada sua altura, usando * para formar o triângulo.
Um exemplo para altura 4:
*
**
***
****
6. Imprima um triângulo isósceles dada sua altura, usando * para formar o triângulo.
Um exemplo para altura 4:
*
**
***
****
***
**
*
7. Faça uma função para calcular a soma de todos os elementos de uma matriz dada sua altura
e largura,
onde cada elemento da matriz é dado pela seguinte função de seus índices:
a[i][j] = (i+j)**2 se i != j
a[i][j] = 0 se i == j