Skip to content

Commit

Permalink
feat: continuidade seção strings
Browse files Browse the repository at this point in the history
  • Loading branch information
HenriqueAJNB committed Jul 10, 2024
1 parent 7e398bb commit 47dcfc0
Show file tree
Hide file tree
Showing 2 changed files with 129 additions and 15 deletions.
144 changes: 129 additions & 15 deletions book/06-estruturas-de-dados/01-strings.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"\n",
"Na seção [tipos de dados numéricos](tipos-de-dados-numericos) já começamos a ver um pouco sobre dois tipos de dados bastante comuns: `int` e `float`.\n",
"\n",
"Nesta seção vamos apresentar outro tipo de dado representando textos. Tal estrutura também é chamado de `string` ou simplesmente `str`. Elas são utilizadas para armazenar e manipular texto. Neste capítulo, vamos explorar os conceitos básicos de strings e como trabalhar com elas em Python."
"Nesta seção vamos apresentar outro tipo de dado representando textos. Tal estrutura também é chamado de string ou simplesmente `str`. Elas são utilizadas para armazenar e manipular texto. Neste capítulo, vamos explorar os conceitos básicos de strings e como trabalhar com elas em Python."
]
},
{
Expand All @@ -29,16 +29,24 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Em Python, uma `string` é uma sequência de caracteres. Você pode definir uma string usando aspas simples `'Texto com aspas simples'` ou aspas duplas `\"Texto com aspas dupla\"`. \n",
"Em Python, uma string é uma sequência de caracteres. Você pode definir uma string usando aspas simples `'Texto com aspas simples'` ou aspas duplas `\"Texto com aspas dupla\"`. \n",
"\n",
"Quando não há a presença de `'` ou `\"` na `string`, usar aspas simples ou duplas é indiferente. Agora se o seu texto contiver uma das duas, como por exemplo, o texto *Ela disse \"Olá mundo!\"*, como `\"` faz parte do texto, só é possível criar uma `string` com esse texto entre aspas simples `'`, conforme exemplo abaixo."
"Quando não há a presença de `'` ou `\"` na string, usar aspas simples ou duplas é indiferente. Agora se o seu texto contiver uma das duas, como por exemplo, o texto *Ela disse \"Olá mundo!\"*, como `\"` faz parte do texto, só é possível criar uma string com esse texto entre aspas simples `'`, conforme exemplo abaixo."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Ela disse \"Olá mundo!\"\n"
]
}
],
"source": [
"msg_aspas_dupla = 'Ela disse \"Olá mundo!\"'\n",
"print(msg_aspas_dupla)"
Expand All @@ -48,19 +56,29 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Caso contrário, o Python pode confundir o que é aspas de abertura e fechamento da `string` com aspas do próprio texto. Observem no exemplo abaixo:"
"Caso contrário, o Python pode confundir o que é aspas de abertura e fechamento da string com aspas do próprio texto. Observem no exemplo abaixo:"
]
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 2,
"metadata": {
"tags": [
"raises-exception"
]
},
"outputs": [],
"outputs": [
{
"ename": "SyntaxError",
"evalue": "invalid syntax (1998578200.py, line 2)",
"output_type": "error",
"traceback": [
"\u001b[1;36m Cell \u001b[1;32mIn[2], line 2\u001b[1;36m\u001b[0m\n\u001b[1;33m erro_de_sintaxe = \"Ela disse \"Olá mundo!\"\"\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m invalid syntax\n"
]
}
],
"source": [
"# Erro proposital!\n",
"erro_de_sintaxe = \"Ela disse \"Olá mundo!\"\"\n",
"print(erro_de_sintaxe)"
]
Expand All @@ -69,19 +87,19 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"De forma a evitar tal erro, como recomendação geral, sempre que seu texto contiver `'`, a `string` deve ser iniciar e encerrar com `\"`. Da mesma forma, se o texto contiver `\"`, a `string` deve iniciar e encerrar com `'`."
"De forma a evitar tal erro, como recomendação geral, sempre que seu texto contiver `'`, a string deve ser iniciar e encerrar com `\"`. Da mesma forma, se o texto contiver `\"`, a string deve iniciar e encerrar com `'`."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"É possível definir também uma `string` com multiplas linhas usando três aspas duplas `\"\"\"` ou três aspas simples `'''`."
"É possível definir também uma string com multiplas linhas usando três aspas duplas `\"\"\"` ou três aspas simples `'''`."
]
},
{
"cell_type": "code",
"execution_count": 1,
"execution_count": 3,
"metadata": {},
"outputs": [
{
Expand All @@ -101,6 +119,31 @@
"print(msg_varias_linhas)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"E podemos verificar que uma variável é do tipo string usando a função `type` (lembra dela, [desta seção](a-funcao-type)?)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'str'>\n"
]
}
],
"source": [
"variavel_tipo_str = 'Ela disse \"Olá mundo!\"'\n",
"print(type(variavel_tipo_str))"
]
},
{
"cell_type": "markdown",
"metadata": {},
Expand All @@ -121,14 +164,14 @@
"source": [
"Sabe aquela história de que `1 + 1 = 11`? Pois bem! Isso é, em partes, verdade! Vamos entender melhor.\n",
"\n",
"Aqui vamos fazer uma distinção clara entre operações com `string` de operações com `int`.\n",
"Aqui vamos fazer uma distinção clara entre operações com string de operações com `int`.\n",
"\n",
"Quando somamos dois inteiros, o Python realiza a operação matemática de soma, conforme já vimos anteriormente."
]
},
{
"cell_type": "code",
"execution_count": 1,
"execution_count": 4,
"metadata": {},
"outputs": [
{
Expand All @@ -152,7 +195,7 @@
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 5,
"metadata": {},
"outputs": [
{
Expand All @@ -177,7 +220,7 @@
"\n",
"Já no segundo caso, estamos juntando o caracter `1` com outro caracter `1` (ambos são strings), resultando em `11`. Tal operação de juntar texto é chamada de concatenação.\n",
"\n",
"Agora você entende que `1 + 1` pode ser `11`? No caso em que ambos `1` forem `string`!"
"Agora você entende que `1 + 1` pode ser `11`? No caso em que ambos `1` forem string!"
]
},
{
Expand All @@ -196,7 +239,7 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 6,
"metadata": {},
"outputs": [
{
Expand All @@ -218,6 +261,77 @@
"source": [
"Novamente, não é multiplicação matemática pois não estamos trabalhando com valores numéricos `int` ou `float`, mas sim uma replicação de texto, uma operação diferente!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Métodos de strings"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Nós já aprendemos a trabalhar com algumas funções já, como as funções `print` e `type`, que neste momento do livro você já deve saber como elas funcionam.\n",
"\n",
"Agora vamos aprender outro conceito super importante: métodos."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### O que são métodos?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Antes de falarmos de métodos, vamos acrescentar um outro conceito: objeto.\n",
"\n",
"Nesta altura, falamos muito sobre tipos de dados (`int`, `float`, `str`). No fundo, tipos de dados são objetos. Ao invés de falar tipo de dado `str`, podemos falar objeto do tipo `str`. Absolutamente tudo em Python é um objeto que tem um tipo! Mudar a forma de falar já está o colocando em outro patamar de entendimento sobre programação.\n",
"\n",
"Vamos agora para definição de método. A dfinição que eu mais gosto é: métodos são funções que estão associadas a um determinado objeto e podem ser usadas para realizar operações nestes. Em termos simples, pense em métodos como ações que você pode realizar com um determinado objeto (`int`, `float`, `str`, etc.). \n",
"\n",
"A diferença principal entre métodos e funções é a seguinte:\n",
"\n",
"- **Métodos:** são funções que estão associadas a um objeto e são chamadas usando a notação de ponto `objeto.metodo()`. Eles atuam sobre o próprio objeto ou acessam seus dados internos.\n",
"\n",
"- **Funções:** são blocos de código independentes que realizam uma tarefa específica e podem ser chamadas em qualquer lugar do código, não estando associadas a um objeto em particular, como as funções `print` e `type`.\n",
"\n",
"Talvez seja mais fácil entender melhor com exemplos."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"mensagem = \"Oi, eu sou uma string!\"\n",
"print(mensagem.upper())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"No código acima temos uma notação que não vimos antes, `mensagem.upper()`. Sabemos já que `mensagem` é um objeto do tipo `str` (verifique com a função `type` se tiver dúvidas!). E strings tem várias \"funções\" associadas à ela. Estas \"funções\" são chamadas de métodos. No exemplo acima, estamos usando o método `.upper()` que transforma a string toda para maiúscula.\n",
"\n",
"Portanto, todo método é acionado pelo `.` a partir do objeto. Veja no gif abaixo que quando você digita o `.` na variável `mensagem`, o VSCode abre uma lista de opções para você. Estas opções são todos os métodos disponíveis para `str`.\n",
"\n",
"```{image} ../gifs/06-01-vscode-methods-str-autocomplete.gif\n",
":width: 400px\n",
"```\n",
"\n",
"```{admonition} Nota\n",
":class: note\n",
"\n",
"Strings tem uma lista enorme de métodos disponíveis e aqui serão demonstrados apenas os mais comumente usados. Mas é de extrema importância que você saiba consultar todos os métodos disponíveis na documentação oficial. A lista completa com todos os métodos de string pode ser encontrada [aqui](https://docs.python.org/3/library/stdtypes.html#string-methods).\n",
"```"
]
}
],
"metadata": {
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 47dcfc0

Please sign in to comment.