Percursos
/
Python
Python
/
Exercícios
/
A composição da irmã mais nova
A composição da irmã mais nova

A composição da irmã mais nova

Exercício de aprendizagem

Introdução

A classe str oferece muitos métodos úteis para trabalhar com strings e compô-las. Estes incluem pesquisa, limpeza, divisão, transformação, tradução e muitas outras técnicas.

Strings são sequências de pontos de código Unicode: "carateres" ou pontos de código individuais (strings de comprimento 1) podem ser referenciados por um número de 0-based index a partir da esquerda, ou um número de -1-based index a partir da direita. Strings implementam todas as operações comuns de sequências.

Podem ser percorridas com a sintaxe for item in <str> ou for index, item in enumerate(<str>). Também podem ser concatenadas com <str> + <other str> ou <str>.join(<iterable>).

Strings são imutáveis, o que significa que o valor de um objeto str em memória não pode mudar. Funções ou métodos que operam sobre uma str (como os que estamos a aprender aqui) devolvem uma nova instance desse objeto str, em vez de modificar a str original.

Segue-se uma pequena seleção de métodos de string do Python. Para uma lista completa, consulta a classe str na documentação do Python.

<str>.title() analisa uma string e coloca em maiúscula o primeiro "caráter" de cada "palavra" encontrada. Em Python, isto depende muito do codec de linguagem usado e de como essa língua representa palavras e carateres. Também pode haver regras de locale em vigor para uma língua ou um conjunto de carateres.

man_in_hat_th = 'ผู้ชายใส่หมวก'
man_in_hat_ru = 'мужчина в шляпе'
man_in_hat_ko = '모자를 쓴 남자'
man_in_hat_en = 'the man in the hat.'

>>> man_in_hat_th.title()
'ผู้ชายใส่หมวก'

>>> man_in_hat_ru.title()
'Мужчина В Шляпе'

>>> man_in_hat_ko.title()
'모자를 쓴 남자'

>> man_in_hat_en.title()
'The Man In The Hat.'

<str>.endswith(<suffix>) devolve True se a string terminar com <suffix>, e False caso contrário.

>>> 'My heart breaks. 💔'.endswith('💔')
True

>>> 'cheerfulness'.endswith('ness')
True

# Punctuation is part of the string, so needs to be included in any endswith match.
>>> 'Do you want to 💃?'.endswith('💃')
False

>> 'The quick brown fox jumped over the lazy dog.'.endswith('dog')
False

<str>.strip(<chars>) devolve uma cópia da str com os <chars> iniciais e finais removidos. Os pontos de código especificados em <chars> não são um prefixo nem um sufixo: todas as combinações desses pontos de código são removidas a partir de ambas as extremidades da string. Se nada for especificado para <chars>, são removidas todas as combinações de pontos de código de espaços em branco.

# This will remove "https://", because it can be formed from "/stph:". 
>>> 'https://unicode.org/emoji/'.strip('/stph:')
'unicode.org/emoji'

# Removal of all whitespace from both ends of the str.
>>> '   🐪🐪🐪🌟🐪🐪🐪   '.strip()
'🐪🐪🐪🌟🐪🐪🐪'

>>> justification = 'оправдание'
>>> justification.strip('еина')
'оправд'

# Prefix and suffix in one step.
>>> 'unaddressed'.strip('dnue')
'address'

>>> '  unaddressed  '.strip('dnue ')
'address'

<str>.replace(<substring>, <replacement substring>) devolve uma cópia da string com todas as ocorrências de <substring> substituídas por <replacement substring>.

A citação usada abaixo é de The Hunting of the Snark, da autoria de Lewis Carroll

# The Hunting of the Snark, by Lewis Carroll
>>> quote = '''
"Just the place for a Snark!" the Bellman cried,
   As he landed his crew with care;
Supporting each man on the top of the tide
   By a finger entwined in his hair.

"Just the place for a Snark! I have said it twice:
   That alone should encourage the crew.
Just the place for a Snark! I have said it thrice:
   What I tell you three times is true."
'''

>>> quote.replace('Snark', '🐲')
...
'\n"Just the place for a 🐲!" the Bellman cried,\n   As he landed his crew with care;\nSupporting each man on the top of the tide\n   By a finger entwined in his hair.\n\n"Just the place for a 🐲! I have said it twice:\n   That alone should encourage the crew.\nJust the place for a 🐲! I have said it thrice:\n   What I tell you three times is true."\n'

>>> 'bookkeeper'.replace('kk', 'k k')
'book keeper'

Instruções

Neste exercício, estás a ajudar a tua irmã mais nova a rever a redação dela para a escola. O professor procura pontuação correta, gramática e uma excelente escolha de palavras.

Tens quatro tarefas para limpar e modificar strings.

1. Coloca o título da redação com iniciais maiúsculas

Qualquer boa redação precisa de um título devidamente formatado. Implementa a função capitalize_title(<title>) que recebe um título str como parâmetro e coloca a primeira letra de cada palavra em maiúscula. Esta função deve devolver uma str com as iniciais maiúsculas.

>>> capitalize_title("my hobbies")
"My Hobbies"

2. Verifica se cada frase termina com um ponto final

Queres garantir que a pontuação na redação está perfeita. Implementa a função check_sentence_ending() que recebe sentence como parâmetro. Esta função deve devolver um bool.

>>> check_sentence_ending("I like to hike, bake, and read.")
True

3. Limpa o espaçamento

Para a redação parecer profissional, é preciso remover o espaçamento desnecessário. Implementa a função clean_up_spacing() que recebe sentence como parâmetro. A função deve remover os espaços em branco a mais no início e no fim da frase, devolvendo uma nova str com a frase atualizada.

>>> clean_up_spacing(" I like to go on hikes with my dog.  ")
"I like to go on hikes with my dog."

4. Substitui palavras por sinónimos

Para tornar a redação ainda melhor, podes substituir alguns dos adjetivos pelos respetivos sinónimos. Escreve a função replace_word_choice() que recebe sentence, old_word e new_word como parâmetros. Esta função deve substituir todas as ocorrências de old_word por new_word e devolver uma nova str com a frase atualizada.

>>> replace_word_choice("I bake good cakes.", "good", "amazing")
"I bake amazing cakes."
Editar via GitHub A ligação abre numa nova janela ou separador
Python Exercism

Estás pronto para começar A composição da irmã mais nova?

Inscreve-te no Exercism para aprenderes e dominares Python com 17 conceitos146 exercícios, e mentoria humana real, tudo grátis.