đ ExercĂcios â CapĂtulo 6#
Strings e Arquivos#
6.1 Strings#
ExercĂcio 6.1 â Romani ite domum#
Escreva uma função que escreva na tela 100 vezes a frase ‘Romani ite domum’.
Ver solução
ExercĂcio â Romani ite domum#
# Escreve 100 vezes a frase 'Romani ite domum'
def escreve_frase(frase, vezes):
for i in range(vezes):
print(frase)
escreve_frase('Romani ite domum', 100)
ExercĂcio 6.3 â Contando espaços#
Escreva um programa em Python que conte a quantidade de espaços em branco de uma string.
Ver solução
ExercĂcio â Contando espaços#
# Conta a quantidade de espaços em branco de uma string
def conta_espacos(texto):
contador = 0
for caractere in texto:
if caractere == ' ':
contador += 1
return contador
texto = input('Digite uma string: ')
print(f'A string possui {conta_espacos(texto)} espaço(s) em branco.')
6.2 Fatianto Strings#
ExercĂcio 6.4 â String invertida#
Escreva uma função que receba uma string como parĂąmetro e escreva-a invertida, usando apenas o fatiamento. Ex.: ‘celacanto provoca maremoto’ imprime ‘otomeram acovorp otnacalec’. Dica: o passo pode ser negativo.
Ver solução
ExercĂcio â String invertida#
# Recebe uma string e escreve-a invertida usando fatiamento
def inverte_string(texto):
return texto[::-1]
texto = input('Digite uma string: ')
print(inverte_string(texto))
ExercĂcio 6.5 â PalĂndromo com fatiamento#
Tente outras formas de testar se uma palavra Ă© um palĂndromo. Tente outro fatiamento.
Ver solução
ExercĂcio â PalĂndromo com fatiamento#
# Testa se uma palavra Ă© palĂndromo usando fatiamento
def eh_palindromo(palavra):
return palavra == palavra[::-1]
palavra = input('Digite uma palavra: ')
if eh_palindromo(palavra):
print(f'"{palavra}" Ă© um palĂndromo.')
else:
print(f'"{palavra}" nĂŁo Ă© um palĂndromo.')
ExercĂcio 6.6 â PalĂndromo com lower()#
O teste de palĂndromo desta seção tem um grande problema: ele nĂŁo diferencia
maiĂșsculas de minĂșsculas. Desse modo, ‘Ovo’ nĂŁo seria identificado como
palĂndromo. Como se pode consertar isso? Pesquise a função de Python
lower() que transforma maiĂșsculas em minĂșsculas.
Ver solução
ExercĂcio â PalĂndromo com lower()#
# Testa se uma palavra Ă© palĂndromo, ignorando maiĂșsculas/minĂșsculas
def eh_palindromo(palavra):
palavra = palavra.lower()
return palavra == palavra[::-1]
palavra = input('Digite uma palavra: ')
if eh_palindromo(palavra):
print(f'"{palavra}" Ă© um palĂndromo.')
else:
print(f'"{palavra}" nĂŁo Ă© um palĂndromo.')
6.3 OperaçÔes sobre Strings#
ExercĂcio 6.7 â PalĂndromo em frases#
Escreva uma função que receba uma string como parĂąmetro e diga se se trata de um palĂndromo ou nĂŁo. Na string devem ser ignorados os espaços em branco e as letras maiĂșsculas e minĂșsculas nĂŁo sĂŁo diferenciadas. Por exemplo, a frase ‘Seco de raiva coloco no colo caviar e doces’ deve ser considerada um palĂndromo.
Ver solução
ExercĂcio â PalĂndromo em frases#
# Testa se uma frase Ă© palĂndromo, ignorando espaços e maiĂșsculas/minĂșsculas
def eh_palindromo(texto):
texto = texto.lower().replace(' ', '')
return texto == texto[::-1]
frase = input('Digite uma frase: ')
if eh_palindromo(frase):
print(f'"{frase}" Ă© um palĂndromo.')
else:
print(f'"{frase}" nĂŁo Ă© um palĂndromo.')
ExercĂcio 6.8 â Nome composto#
O Programa 6.10 sĂł funciona bem com um nome composto de trĂȘs partes. Modifique o programa para que seja possĂvel trabalhar com um nĂșmero maior de partes.
O Programa 6.10 original:
nome = 'JoĂŁo Araujo Ribeiro'
lista = nome.split(' ')
print(lista)
lista[1] = lista[1][0] + '.'
print(lista)
lista[0], lista[1], lista[2] = lista[2], lista[0], lista[1]
lista[0] += ','
print(lista)
nome = ' '.join(lista)
print(nome)Ver solução
ExercĂcio â Nome composto#
# Reformata nome com nĂșmero arbitrĂĄrio de partes:
# "JoĂŁo Araujo de Souza Ribeiro" â "Ribeiro, JoĂŁo A. de S."
nome = input('Digite o nome completo: ')
lista = nome.split(' ')
# Abreviar partes intermediĂĄrias (exceto primeira e Ășltima)
for i in range(1, len(lista) - 1):
lista[i] = lista[i][0] + '.'
# Mover sobrenome para o inĂcio
sobrenome = lista[-1] + ','
lista.pop()
lista.insert(0, sobrenome)
nome_formatado = ' '.join(lista)
print(nome_formatado)
ExercĂcio 6.9 â Nome com duas partes#
Prepare seu programa do exercĂcio anterior para aceitar tambĂ©m nomes compostos de apenas duas partes.
Ver solução
ExercĂcio â Nome com duas partes#
# Reformata nome com duas ou mais partes:
# "JoĂŁo Ribeiro" â "Ribeiro, JoĂŁo"
# "JoĂŁo Araujo Ribeiro" â "Ribeiro, JoĂŁo A."
nome = input('Digite o nome completo: ')
lista = nome.split(' ')
if len(lista) < 2:
print(nome)
elif len(lista) == 2:
nome_formatado = lista[1] + ', ' + lista[0]
print(nome_formatado)
else:
for i in range(1, len(lista) - 1):
lista[i] = lista[i][0] + '.'
sobrenome = lista[-1] + ','
lista.pop()
lista.insert(0, sobrenome)
nome_formatado = ' '.join(lista)
print(nome_formatado)
6.4 Arquivos#
ExercĂcio 6.10 â Arquivo em maiĂșsculas#
Escreva um programa que converta todas as letras de um arquivo em maiĂșsculas e escreva o resultado na tela.
Ver solução
ExercĂcio â Arquivo em maiĂșsculas#
# Converte todas as letras de um arquivo em maiĂșsculas
nome_arquivo = input('Digite o nome do arquivo: ')
with open(nome_arquivo, 'r') as arquivo:
conteudo = arquivo.read()
print(conteudo.upper())
ExercĂcio 6.11 â Arquivo em minĂșsculas#
Escreva um programa que converta todas as letras de um arquivo em minĂșsculas e escreva o resultado na tela.
Ver solução
ExercĂcio â Arquivo em minĂșsculas#
# Converte todas as letras de um arquivo em minĂșsculas
nome_arquivo = input('Digite o nome do arquivo: ')
with open(nome_arquivo, 'r') as arquivo:
conteudo = arquivo.read()
print(conteudo.lower())
ExercĂcio 6.12 â Primeira letra maiĂșscula#
Escreva um programa que converta a primeira letra de cada palavra de um arquivo em maiĂșscula e escreva o resultado na tela.
Ver solução
ExercĂcio â Primeira letra maiĂșscula#
# Converte a primeira letra de cada palavra de um arquivo em maiĂșscula
nome_arquivo = input('Digite o nome do arquivo: ')
with open(nome_arquivo, 'r') as arquivo:
conteudo = arquivo.read()
print(conteudo.title())
6.5 Escrevendo em Arquivos#
ExercĂcio 6.13 â Tabela Celsius-Fahrenheit em arquivo#
Escreva um programa que salve uma tabela em um arquivo com a conversĂŁo de temperaturas Celsius para Fahrenheit de 0 a 300.
Ver solução
ExercĂcio â Tabela Celsius-Fahrenheit#
# Salva em arquivo a tabela de conversĂŁo Celsius â Fahrenheit de 0 a 300
def celsius_para_fahrenheit(celsius):
return celsius * 9 / 5 + 32
with open('tabela_temperaturas.txt', 'w') as arquivo:
arquivo.write(f'{"Celsius":>10} {"Fahrenheit":>12}\n')
arquivo.write('-' * 24 + '\n')
for c in range(0, 301, 10):
f = celsius_para_fahrenheit(c)
arquivo.write(f'{c:>10} {f:>12.1f}\n')
print('Tabela salva em tabela_temperaturas.txt')
ExercĂcio 6.14 â CĂłpia de arquivo#
Escreva um programa que copie o conteĂșdo de um arquivo para um novo arquivo. Seu programa deve testar se o arquivo de destino jĂĄ existe e, se afirmativo, deve perguntar ao usuĂĄrio se ele quer sobrescrevĂȘ-lo.
Ver solução
ExercĂcio â CĂłpia de arquivo#
# Copia o conteĂșdo de um arquivo para outro, verificando se o destino jĂĄ existe
import os
origem = input('Digite o nome do arquivo de origem: ')
destino = input('Digite o nome do arquivo de destino: ')
if os.path.exists(destino):
resposta = input(f'O arquivo "{destino}" jĂĄ existe. Sobrescrever? (s/n): ')
if resposta.lower() != 's':
print('Operação cancelada.')
else:
with open(origem, 'r') as arq_origem:
conteudo = arq_origem.read()
with open(destino, 'w') as arq_destino:
arq_destino.write(conteudo)
print(f'Arquivo copiado para "{destino}".')
else:
with open(origem, 'r') as arq_origem:
conteudo = arq_origem.read()
with open(destino, 'w') as arq_destino:
arq_destino.write(conteudo)
print(f'Arquivo copiado para "{destino}".')
ExercĂcio 6.15 â Pontos de pi em arquivo#
Escreva um programa que guarde os pontos gerados pelo Programa 4.16 em um arquivo, um ponto por linha. Ao final, escreva nesse arquivo o resultado do cĂĄlculo para pi.
Ver solução
ExercĂcio â Pontos de pi em arquivo#
# Gera pontos aleatĂłrios para cĂĄlculo de pi e salva em arquivo
import random as r
import math as m
def gera_coordenadas_aleatorias():
x = r.random()
y = r.random()
return x, y
def coordenadas_dentro_circulo(x, y):
"""Testa se coordenadas estĂŁo dentro do cĂrculo de raio 1."""
return m.hypot(x, y) < 1
def calcula_pi(n, arquivo):
"""Calcula pi, salva pontos no arquivo e retorna pi e erro."""
conta_circulo = 0
for i in range(n):
x, y = gera_coordenadas_aleatorias()
arquivo.write(f'{x:.6f} {y:.6f}\n')
if coordenadas_dentro_circulo(x, y):
conta_circulo += 1
pi = 4 * conta_circulo / n
erro = m.fabs(pi - m.pi)
return pi, erro
num = int(input('Quantos pontos devem ser sorteados? '))
with open('pontos_pi.txt', 'w') as arq:
pi, erro = calcula_pi(num, arq)
arq.write(f'\nResultado: pi = {pi}, erro = {erro}\n')
print(f'Com {num} pontos, o valor de pi Ă© {pi} com erro {erro}')
print('Pontos salvos em pontos_pi.txt')
Quer ir além?#
Se vocĂȘ quiser se desafiar com novos problemas, sem solução disponĂvel: