📘 Exercícios — Capítulo 6#

Strings e Arquivos#

← Voltar


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:

👉 Exercícios extras do Capítulo 6