Uma str em Python é uma sequência imutável de pontos de código Unicode.
Estes podem incluir letras, sinais diacríticos, carateres de posicionamento, números, símbolos de moeda, emoji, pontuação, carateres de espaço e de quebra de linha, entre outros.
Sendo imutável, o valor de um objeto str em memória não muda; os métodos que parecem modificar uma string devolvem uma nova cópia ou instância desse objeto str.
Um literal str pode ser declarado com aspas simples ' ou duplas ". O caráter de escape \ está disponível sempre que for preciso.
>>> single_quoted = 'These allow "double quoting" without "escape" characters.'
>>> double_quoted = "These allow embedded 'single quoting', so you don't have to use an 'escape' character."
>>> escapes = 'If needed, a \'slash\' can be used as an escape character within a string when switching quote styles won\'t work.'
As strings com várias linhas são declaradas com ''' ou """.
>>> triple_quoted = '''Three single quotes or "double quotes" in a row allow for multi-line string literals.
Line break characters, tabs and other whitespace are fully supported.
You\'ll most often encounter these as "doc strings" or "doc tests" written just below the first line of a function or class definition.
They\'re often used with auto documentation ✍ tools.
'''
As strings podem ser concatenadas com o operador +.
Deves usar este método com moderação, pois não é muito eficiente nem fácil de manter.
language = "Ukrainian"
number = "nine"
word = "дев'ять"
sentence = word + " " + "means" + " " + number + " in " + language + "."
>>> print(sentence)
...
"дев'ять means nine in Ukrainian."
Se precisares de combinar uma list, uma tuple, um set ou outra coleção de strings individuais numa única str, <str>.join(<iterable>) é uma opção melhor:
# str.join() makes a new string from the iterables elements.
>>> chickens = ["hen", "egg", "rooster"] # Lists are iterable.
>>> ' '.join(chickens)
'hen egg rooster'
# Any string can be used as the joining element.
>>> ' :: '.join(chickens)
'hen :: egg :: rooster'
>>> ' 🌿 '.join(chickens)
'hen 🌿 egg 🌿 rooster'
# Any iterable can be used as input.
>>> flowers = ("rose", "daisy", "carnation") # Tuples are iterable.
>>> '*-*'.join(flowers)
'rose*-*daisy*-*carnation'
>>> flowers = {"rose", "daisy", "carnation"} # Sets are iterable, but output order is not guaranteed.
>>> '*-*'.join(flowers)
'rose*-*carnation*-*daisy'
>>> phrase = "This is my string" # Strings are iterable, but be careful!
>>> '..'.join(phrase)
'T..h..i..s.. ..i..s.. ..m..y.. ..s..t..r..i..n..g'
# Separators are inserted **between** elements, but can be any string (including spaces).
# This can be exploited for interesting effects.
>>> under_words = ['under', 'current', 'sea', 'pin', 'dog', 'lay']
>>> separator = ' ⤴️ under'
>>> separator.join(under_words)
'under ⤴️ undercurrent ⤴️ undersea ⤴️ underpin ⤴️ underdog ⤴️ underlay'
# The separator can be composed different ways, as long as the result is a string.
>>> upper_words = ['upper', 'crust', 'case', 'classmen', 'most', 'cut']
>>> separator = ' 🌟 ' + upper_words[0]
>>> separator.join(upper_words)
'upper 🌟 uppercrust 🌟 uppercase 🌟 upperclassmen 🌟 uppermost 🌟 uppercut'
Os pontos de código dentro de uma str podem ser referenciados por um número de índice 0-based index a partir da esquerda:
creative = '창의적인'
>>> creative[0]
'창'
>>> creative[2]
'적'
>>> creative[3]
'인'
A indexação também funciona a partir da direita, começando com um índice -1-based index:
creative = '창의적인'
>>> creative[-4]
'창'
>>> creative[-2]
'적'
>>> creative[-1]
'인'
Não existe em Python um tipo separado de “caráter” ou "rune", por isso indexar uma string produz uma nova str de comprimento 1:
>>> website = "exercism"
>>> type(website[0])
<class 'str'>
>>> len(website[0])
1
>>> website[0] == website[0:1] == 'e'
True
As substrings podem ser selecionadas através da notação de fatiamento, com <str>[<start>:stop:<step>] para produzir uma nova string.
Os resultados excluem o índice stop.
Se não for indicado um start, o índice inicial será 0.
Se não for indicado um stop, o índice stop será o fim da string.
moon_and_stars = '🌟🌟🌙🌟🌟⭐'
sun_and_moon = '🌞🌙🌞🌙🌞🌙🌞🌙🌞'
>>> moon_and_stars[1:4]
'🌟🌙🌟'
>>> moon_and_stars[:3]
'🌟🌟🌙'
>>> moon_and_stars[3:]
'🌟🌟⭐'
>>> moon_and_stars[:-1]
'🌟🌟🌙🌟🌟'
>>> moon_and_stars[:-3]
'🌟🌟🌙'
>>> sun_and_moon[::2]
'🌞🌞🌞🌞🌞'
>>> sun_and_moon[:-2:2]
'🌞🌞🌞🌞'
>>> sun_and_moon[1:-1:2]
'🌙🌙🌙🌙'
As strings também podem ser divididas em strings mais pequenas através de <str>.split(<separator>), que devolve uma list de substrings.
A lista pode depois ser novamente indexada ou dividida, se for preciso.
Usar <str>.split() sem qualquer argumento divide a string pelos espaços em branco.
>>> cat_ipsum = "Destroy house in 5 seconds mock the hooman."
>>> cat_ipsum.split()
...
['Destroy', 'house', 'in', '5', 'seconds', 'mock', 'the', 'hooman.']
>>> cat_ipsum.split()[-1]
'hooman.'
>>> cat_words = "feline, four-footed, ferocious, furry"
>>> cat_words.split(', ')
...
['feline', 'four-footed', 'ferocious', 'furry']
Os separadores de <str>.split() podem ter mais do que um caráter.
Para a divisão é usada a string inteira.
>>> colors = """red,
orange,
green,
purple,
yellow"""
>>> colors.split(',\n')
['red', 'orange', 'green', 'purple', 'yellow']
As strings suportam todas as operações comuns de sequência.
Os pontos de código individuais podem ser percorridos num ciclo com for item in <str>.
Os índices com os itens podem ser percorridos num ciclo com for index, item in enumerate(<str>).
>>> exercise = 'လေ့ကျင့်'
# Note that there are more code points than perceived glyphs or characters
>>> for code_point in exercise:
... print(code_point)
...
လ
ေ
့
က
ျ
င
်
့
# Using enumerate will give both the value and index position of each element.
>>> for index, code_point in enumerate(exercise):
... print(index, ": ", code_point)
...
0 : လ
1 : ေ
2 : ့
3 : က
4 : ျ
5 : င
6 : ်
7 : ့
Estás a ajudar a tua irmã mais nova com os trabalhos de casa de vocabulário de inglês, que ela acha muito maçadores. A turma dela está a aprender a criar palavras novas acrescentando prefixos e sufixos. Dado um conjunto de palavras, a professora procura palavras transformadas corretamente e com a ortografia certa, acrescentando o prefixo ao início ou o sufixo ao fim.
O trabalho tem quatro atividades, cada uma com um conjunto de texto ou de palavras com que trabalhar.
Um dos prefixos mais comuns em inglês é un, que significa "não". Nesta atividade, a tua irmã tem de formar palavras negativas, ou seja, palavras com o sentido de "não", acrescentando-lhes un.
Implementa a função add_prefix_un(<word>), que recebe word como parâmetro e devolve uma palavra nova com o prefixo un:
>>> add_prefix_un("happy")
'unhappy'
>>> add_prefix_un("manageable")
'unmanageable'
Há mais quatro prefixos comuns que a turma da tua irmã está a estudar: en (que significa "pôr dentro de" ou "cobrir com"), pre (que significa "antes" ou "para a frente"), auto (que significa "próprio" ou "mesmo") e inter (que significa "entre" ou "no meio de").
Neste exercício, a turma está a criar grupos de palavras de vocabulário com estes prefixos, para que possam ser estudados em conjunto. Cada prefixo vem numa lista com as palavras comuns com que é usado. Os alunos têm de aplicar o prefixo e produzir uma string que mostre o prefixo aplicado a todas as palavras.
Implementa a função make_word_groups(<vocab_words>), que recebe vocab_words como parâmetro com a seguinte forma: [<prefix>, <word_1>, <word_2> .... <word_n>], e devolve uma string com o prefixo aplicado a cada palavra, com o seguinte aspeto: '<prefix> :: <prefix><word_1> :: <prefix><word_2> :: <prefix><word_n>'.
Aqui não é preciso criar um ciclo for ou while para processar os dados. Pensa bem em que métodos de string (e delimitadores) podes usar em vez disso.
>>> make_word_groups(['en', 'close', 'joy', 'lighten'])
'en :: enclose :: enjoy :: enlighten'
>>> make_word_groups(['pre', 'serve', 'dispose', 'position'])
'pre :: preserve :: predispose :: preposition'
>> make_word_groups(['auto', 'didactic', 'graph', 'mate'])
'auto :: autodidactic :: autograph :: automate'
>>> make_word_groups(['inter', 'twine', 'connected', 'dependent'])
'inter :: intertwine :: interconnected :: interdependent'
ness é um sufixo comum que significa "estado de ser". Nesta atividade, a tua irmã tem de encontrar a palavra raiz original, removendo o sufixo ness. Mas, claro, há regras de ortografia chatinhas: se a palavra raiz terminava originalmente numa consoante seguida de um "y", então o "y" passou a "i". Remover "ness" tem de repor o "y" nessas palavras raiz. Por exemplo: happiness --> happi --> happy.
Implementa a função remove_suffix_ness(<word>), que recebe word e devolve a palavra raiz sem o sufixo ness.
>>> remove_suffix_ness("heaviness")
'heavy'
>>> remove_suffix_ness("sadness")
'sad'
Os sufixos são usados frequentemente para mudar a classe gramatical a que uma palavra pertence. Uma prática comum em inglês é o "verbing" ou "verbifying", em que um adjetivo se transforma num verbo ao acrescentar-lhe o sufixo en.
Nesta tarefa, a tua irmã vai praticar o "verbing", extraindo um adjetivo de uma frase e transformando-o num verbo. Felizmente, todas as palavras que aqui precisam de ser transformadas são "regulares": não precisam de alterações ortográficas para receber o sufixo.
Implementa a função adjective_to_verb(<sentence>, <index>), que recebe dois parâmetros. Uma sentence com a palavra de vocabulário e o index da palavra, depois de a frase ser dividida. A função deve devolver o adjetivo extraído transformado em verbo.
>>> adjective_to_verb('I need to make that bright.', -1 )
'brighten'
>>> adjective_to_verb('It got dark as the sun set.', 2)
'darken'
Inscreve-te no Exercism para aprenderes e dominares Python com 17 conceitos146 exercícios, e mentoria humana real, tudo grátis.