Exercícios da Apostila 0
Ver também
Apostila 0 Exercitando 01
Execute o que se pede. Logo após, cole a solução do exercício neste documento. Lembre-se de salvar seu programa, para estudos posteriores.
Crie uma string com o conteúdo “Ainda que falasse as línguas dos homens e falasse a língua dos anjos, sem amor eu nada seria.”
Implementado em textanalysis.booklet.booklet0.Ex01.text
1 @text.setter
2 def text(self, text: str) -> None:
3 if text is None:
4 text = ''
5
6 if not isinstance(text, str):
7 raise TypeError("'text' deve ser uma string")
8
9 self._text = text
Imprima cada caractere da string
Implementado em textanalysis.booklet.booklet0.Ex01.text_chars
1 @property
2 def text_chars(self) -> iter[str]:
3 """Cria um gerador para os caracteres individuais do texto.
4
5 :return: Iterador dos caracteres de :attr:`text`
6 """
7 for char in self.text:
8 yield char
Segmente a string em uma lista
Implementado em textanalysis.booklet.booklet0.Ex01.text_split
1 @property
2 def text_split(self) -> iter[str]:
3 """Divide o texto em uma lista de palavras
4
5 Divide o texto em uma lista de palavras, separadas por um espaço em
6 branco, e cria um gerador para os itens da lista.
7
8 :return: Iterador das palavras de :attr:`text`
9 """
10 for item in self.text.split():
11 yield item
Quantas palavras há na lista?
Implementado em textanalysis.booklet.booklet0.Ex01.text_split_len
1 @property
2 def text_split_len(self) -> int:
3 """Contabiliza o tamanho da lista do iterador :attr:`text_split`
4
5 :return: Tamanho da lista :attr:`text_split`
6 """
7 return len(list(self.text_split))
Imprima cada palavra da string
Implementado em textanalysis.booklet.booklet0.Ex01.text_split
1 @property
2 def text_split(self) -> iter[str]:
3 """Divide o texto em uma lista de palavras
4
5 Divide o texto em uma lista de palavras, separadas por um espaço em
6 branco, e cria um gerador para os itens da lista.
7
8 :return: Iterador das palavras de :attr:`text`
9 """
10 for item in self.text.split():
11 yield item
Substitua o termo “dos homens” por “do mundo”
Implementado em textanalysis.booklet.booklet0.Ex01.text_replace()
1 def text_replace(self, old: str, new: str) -> str:
2 """Substitui ``old`` por ``new``
3
4 Substitui o trecho de :attr:`text` indicado pelo parâmetro ``old`` pelo
5 texto indicado no parâmetro ``new``
6
7 :param old: Texto original a ser substituído.
8 :type old: str
9 :param new: Texto novo.
10 :type new: str
11
12 :return: O novo valor de :attr:`text`
13 """
14 self.text = self.text.replace(old, new)
15 return self.text
Imprima o fragmento que vai do 21º até o 30º caracteres
Implementado na propriedade
textanalysis.booklet.booklet0.Ex01.text_segment
. O
método deve ser invocado passando os valores 21
e 30
conforme
requisitado neste item.
1 def text_segment(self, first: int, last: Optional[int] = None) -> str:
2 """Retorna o segmento do texto entre ``first`` e ``last``
3
4 Retorna o segmento do texto indicado, da posição inicial ``first``
5 até a posição ``last``, ambos *INCLUSIVO*, ou seja, retorna o caracter
6 das posições indicadas. Se ``last`` for omitido, retorna apenas o
7 caracter indicado por ``first``
8
9 :raises ValueError: Se ``first`` é menor ou igual a zero ou menor que
10 ``last``
11
12 :param first: Posição inicial do segmento (deve ser maior que zero)
13 :type first: int
14 :param last: Posição final do segmento, opcional
15 :type last: int, opcional
16
17 :return: String com o segmento do texto ou uma string vazia se
18 ``first`` for maior que o tamanho do texto
19 """
20 if first <= 0:
21 raise ValueError("'first' deve ser maior ou igual a 1")
22
23 if not last:
24 last = first
25
26 if last < first:
27 raise ValueError("'last' deve ser maior ou igual a 'first'")
28
29 return self.text[first-1:last]
Imprima os últimos 15 caracteres
Implementado em textanalysis.booklet.booklet0.Ex01.text_last()
1 def text_last(self, n: int) -> str:
2 """Retorna os últimos caracteres do texto, de tamanho indicado pelo
3 parâmetro ``n``, que é opcional com valor padrão ``15``.
4
5 :param n: Tamanho do segmento.
6 :type n: int, opcional
7
8 :raises IndexError: se o tamanho do segmento é maior que o texto em si.
9
10 :return: Segmento do texto dos últimos ``n`` caracteres.
11 """
12 return self.text[-n:]
Salve a sentença em um arquivo do tipo txt
Implementado em textanalysis.booklet.booklet0.Ex01.text_save()
1 def text_save(self, filename: str) -> str:
2 """Salva o texto em um arquivo indicado pelo parâmetro ``filename``.
3
4 :param filename: Caminho do arquivo
5 :type filename: str
6
7 :return: Caminho completo do arquivo salvo
8 """
9 filename = dsutils.datadir.join(filename)
10 with open(filename, 'w', encoding='utf8') as f:
11 f.write(self.text + '\n')
12 return filename
Apostila 0 Exercitando 02
Execute o que se pede. Logo após, cole a solução do exercício neste documento. Lembre-se de salvar seu programa, para estudos posteriores.
Crie uma lista com os parágrafos do documento
Implementado no construtor da Classe
textanalysis.booklet.booklet0.Ex02
. O caminho do docx
deve ser passado como parâmetro.
1class Ex02:
2 """Implementa a atividade descrita em :ref:`Apostila 0 Exercitando 02`
3
4 :param docname: Caminho do arquivo ``docx`` a ser carregado.
5 :type docname: str
6 """
7
8 def __init__(self, docname: str) -> None:
9 super().__init__()
10 self._doc = docx.Document(dsutils.datadir.join(docname))
11
Crie uma lista com os parágrafos do documento
Implementado em textanalysis.booklet.booklet0.Ex02.paragraphs_list
1 @property
2 def paragraphs_list(self) -> list[str]:
3 """Cria uma lista contendo cada parágrafo encontrado no documento.
4
5 :return: Lista com os parágrafos.
6 """
7 return list(self.paragraphs)
1 @property
2 def paragraphs(self) -> iter[str]:
3 """Cria um iterador para os parágrafos encontrados no documento.
4
5 :returns: iterador dos parágrafos no documento
6 """
7
8 for paragraph in self._doc.paragraphs:
9 yield paragraph.text
Quantos parágrafos o documento possui?
Implementado em textanalysis.booklet.booklet0.Ex02.paragraphs_len
1 @property
2 def paragraphs_len(self) -> int:
3 """Contabiliza o tamanho da lista do gerador criado por
4 :func:`Exercitando02.paragraphs`.
5
6 :returns: Tamanho da lista.
7 """
8 return len(self.paragraphs_list)
Imprima o conteúdo do 1º parágrafo do texto
Implementado em textanalysis.booklet.booklet0.Ex02.paragraphs_segment()
1 def paragraphs_segment(self, first: int,
2 last: Optional[int] = None) -> Union[list[str], str]:
3 """Retorna os parágrafos do documento, da posição inicial ``first`` até
4 a posição ``last``, ambos *INCLUSIVO*, ou seja, também retorna os
5 parágrafos nas posições indicadas. Se ``last`` for omitido, retorna
6 apenas o parágrafo indicado por ``first``.
7
8 :raises ValueError: Erro gerado quando ``first`` é menor ou igual a
9 zero ou quando ``first`` menor que ``last``.
10
11 :param first: Posição inicial do segmento (deve ser maior que zero).
12 :type first: int
13 :param last: Posição final do segmento.
14 :type last: int, opcional
15
16 :return: Uma lista de string com os parágrafos solicitados, ou uma
17 única string de parágrafo de ``last`` for omitido.
18 """
19 if first <= 0:
20 raise ValueError('first parameter must be greater '
21 'or equal to one')
22
23 if last and first > last:
24 raise ValueError('last parameter must be greater '
25 'or equal to first')
26
27 if last:
28 return self.paragraphs_list[first - 1:last]
29 else:
30 return self.paragraphs_list[first - 1]
Imprima os parágrafos 3 a 6, inclusive
Implementado em textanalysis.booklet.booklet0.Ex02.paragraphs_segment()
1 def paragraphs_segment(self, first: int,
2 last: Optional[int] = None) -> Union[list[str], str]:
3 """Retorna os parágrafos do documento, da posição inicial ``first`` até
4 a posição ``last``, ambos *INCLUSIVO*, ou seja, também retorna os
5 parágrafos nas posições indicadas. Se ``last`` for omitido, retorna
6 apenas o parágrafo indicado por ``first``.
7
8 :raises ValueError: Erro gerado quando ``first`` é menor ou igual a
9 zero ou quando ``first`` menor que ``last``.
10
11 :param first: Posição inicial do segmento (deve ser maior que zero).
12 :type first: int
13 :param last: Posição final do segmento.
14 :type last: int, opcional
15
16 :return: Uma lista de string com os parágrafos solicitados, ou uma
17 única string de parágrafo de ``last`` for omitido.
18 """
19 if first <= 0:
20 raise ValueError('first parameter must be greater '
21 'or equal to one')
22
23 if last and first > last:
24 raise ValueError('last parameter must be greater '
25 'or equal to first')
26
27 if last:
28 return self.paragraphs_list[first - 1:last]
29 else:
30 return self.paragraphs_list[first - 1]
O termo “Machado” está no documento?
Implementado em textanalysis.booklet.booklet0.Ex02.paragraphs_hastext()
1 def paragraphs_hastext(self, text: str) -> bool:
2 """Verifica se a string indicado pelo parâmetro ``text`` existe no
3 documento.
4
5 :param text: Texto a procurar no documento.
6 :type text: str
7
8 :return: Verdadeiro ou falso.
9 """
10 return text in self.paragraphs_text
Crie um texto corrido a partir dos parágrafos lidos
Implementado em textanalysis.booklet.booklet0.Ex02.paragraphs_text
1 @property
2 def paragraphs_text(self) -> str:
3 """Retorna uma string com o conteúdo do documento.
4
5 :return: String do documento.
6 """
7 return '\n'.join(self.paragraphs_list)
Substitua o termo “Batista” por “João Batista”
Implementado em textanalysis.booklet.booklet0.Ex02.paragraphs_replacetext()
1 def paragraphs_replacetext(self, old: str, new: str) -> str:
2 """Retorna uma string com o conteúdo do documento, substiuindo o texto
3 indicado pelo parâmetro ``old`` por ``new``.
4
5 :param old: Texto original a ser substituído.
6 :type old: str
7 :param new: Texto novo.
8 :type new: str
9
10 :return: String com o texto substituído.
11 """
12 return self.paragraphs_text.replace(old, new)