Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update 2020.10.01 #2

Merged
merged 8 commits into from
Oct 1, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# @see: https://docs.github.com/en/github/administering-a-repository/displaying-a-sponsor-button-in-your-repository
github: trekhleb
patreon: trekhleb
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
> This is a collection of Python scripts that are split by [topics](#table-of-contents) and contain
code examples with explanations, different use cases and links to further readings.

_Read this in_ [_Português_](README.pt-BR.md).

It is a **playground** because you may change or add the code to see how it works
and [test it out](#testing-the-code) using assertions. It also allows you
to [lint the code](#linting-the-code) you've wrote and check if it fits to Python code style guide.
Expand All @@ -16,6 +18,8 @@ syntax of [standard Python statements and constructions](#table-of-contents). Al
code is full of assertions you'll be able to see expected functions/statements output right away
without launching them.

> _You might also be interested in 🤖 [Interactive Machine Learning Experiments](https://github.com/trekhleb/machine-learning-experiments)_

## How to Use This Repository

Each Python script in this repository has the following structure:
Expand Down Expand Up @@ -210,3 +214,7 @@ flake8 ./src --statistics --show-source --count
```

[More about Flake8](http://flake8.pycqa.org/en/latest/)

## Supporting the project

You may support this project via ❤️️ [GitHub](https://github.com/sponsors/trekhleb) or ❤️️ [Patreon](https://www.patreon.com/trekhleb).
215 changes: 215 additions & 0 deletions README.pt-BR.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,215 @@
# Playground e Cheatsheet Para Aprender Python

[![Build Status](https://travis-ci.org/trekhleb/learn-python.svg?branch=master)](https://travis-ci.org/trekhleb/learn-python)

> Essa é uma coleção de scripts Python dividida em [tópicos](#índice) que contém
exemplos de código com explicações, diferentes usos e links para outras leituras.

_Ler em_ [_English_](README.md).

É um **playground** porque você pode fazer alterações no código para ver como ele se comporta,
além de [testá-lo](#testando-o-código) usando asserções. Também é possível
[revisar o código](#revisando-o-código) que você escreveu automaticamente e verificar se ele se encaixa
no guia de estilo de código Python.
Isso tudo pode tornar seu processo de aprendizagem mais interativo e ajudar a manter a qualidade
do código bastante alta desde o início.

É um **cheatsheet** porque você pode voltar a esses exemplos de código quando quiser recapitular a sintaxe das
[estruturas padrão do Python](#índice). O código está cheio de asserções, então você poderá ver o retorno das funções sem precisar executá-las.

> _Você pode se interessar também por 🤖 [Interactive Machine Learning Experiments](https://github.com/trekhleb/machine-learning-experiments)_

## Como Usar Esse Repositório

Nesse repositório, cada script Python possui a seguinte estrutura:

```python
"""Lists <--- Nome do tópico

# @see: https://www.learnpython.org/en/Lists <-- Link para outras leituras.

A seguir, uma explicação mais detalhada do tópico atual (ex, informações gerais sobre listas (Lists)).
"""


def test_list_type():
"""Explicação do subtópico.

Cada arquivo contém funções de teste que ilustram subtópicos (ou seja, tipo de lista, métodos de lista).
"""

# Here is an example of how to build a list. <-- Comentários em inglês explicam a ação.
squares = [1, 4, 9, 16, 25]

# Lists can be indexed and sliced.
# Indexing returns the item.
assert squares[0] == 1 # <-- As asserções ilustram o resultado.
# Slicing returns a new list.
assert squares[-3:] == [9, 16, 25] # <-- As asserções ilustram o resultado.
```

Então você pode querer fazer o seguinte:

- [Encontrar o tópico](#índice) que deseja aprender ou recapitular.
- Ler os comentários e/ou a documentação vinculada em cada script (como no exemplo acima).
- Analisar os exemplos e asserções para ver exemplos de uso e saída esperada das funções.
- Alterar o código ou adicionar novas asserções para ver o que acontece.
- [Executar testes](#testando-o-código) e [revisar o código](#revisando-o-código) para ver se ele
funciona e para saber se está escrito corretamente.

## Índice

1. **Começando**
- [O que é Python](src/getting_started/what_is_python.md)
- [Sintaxe Python](src/getting_started/python_syntax.md)
- [Variáveis](src/getting_started/test_variables.py)
2. **Operadores**
- [Operadores Aritméticos](src/operators/test_arithmetic.py) (`+`, `-`, `*`, `/`, `//`, `%`, `**`)
- [Operadores Bitwise](src/operators/test_bitwise.py) (`&`, `|`, `^`, `>>`, `<<`, `~`)
- [Operadores de Atribuição](src/operators/test_assigment.py) (`=`, `+=`, `-=`, `/=`, `//=` etc.)
- [Operadores de Comparação](src/operators/test_comparison.py) (`==`, `!=`, `>`, `<`, `>=`, `<=`)
- [Operadores Lógicos](src/operators/test_logical.py) (`and`, `or`, `not`)
- [Operadores de Indentidade](src/operators/test_identity.py) (`is`, `is not`)
- [Operadores de Associação](src/operators/test_membership.py) (`in`, `not in`)
3. **Tipos de Dados**
- [Números](src/data_types/test_numbers.py) (incluindo boleanos)
- [Strings](src/data_types/test_strings.py) e seus métodos
- [Listas](src/data_types/test_lists.py) e seus métodos (incluindo lista de compreensões)
- [Tuplas](src/data_types/test_tuples.py)
- [Conjuntos](src/data_types/test_sets.py) e seus métodos
- [Dicionários](src/data_types/test_dictionaries.py)
- [Casting de Tipo](src/data_types/test_type_casting.py)
4. **Controles de Fluxo**
- [A declaração `if`](src/control_flow/test_if.py)
- [A declaração `for`](src/control_flow/test_for.py) (e a função `range()`)
- [A declaração `while`](src/control_flow/test_while.py)
- [A declaração `try`](src/control_flow/test_try.py)
- [A declaração `break`](src/control_flow/test_break.py)
- [A declaração `continue`](src/control_flow/test_continue.py)
5. **Funções**
- [Definição de Função](src/functions/test_function_definition.py) (declaração `def` e `return`)
- [Variáveis Dentro das Funções](src/functions/test_function_scopes.py) (declaração `global` e `nonlocal`)
- [Valores Padrão de Argumentos](src/functions/test_function_default_arguments.py)
- [Argumentos de palavras-chave](src/functions/test_function_keyword_arguments.py)
- [Listas de Argumento Arbitrárias](src/functions/test_function_arbitrary_arguments.py)
- [Desfazendo Lista de Argumentos](src/functions/test_function_unpacking_arguments.py) (declaração `*` e `**`)
- [Expressões Lambda](src/functions/test_lambda_expressions.py) (declaração `lambda`)
- [Documentação das Strings](src/functions/test_function_documentation_string.py)
- [Função de Anotações](src/functions/test_function_annotations.py)
- [Função de Decoradores](src/functions/test_function_decorators.py)
6. **Classes**
- [Definição de Classe](src/classes/test_class_definition.py) (declaração `class`)
- [Classes dos Objetos](src/classes/test_class_objects.py)
- [Instância dos Objetos](src/classes/test_instance_objects.py)
- [Métodos de Objetos](src/classes/test_method_objects.py)
- [Variável de Classe e Instância](src/classes/test_class_and_instance_variables.py)
- [Herança](src/classes/test_inheritance.py)
- [Herança Múltipla](src/classes/test_multiple_inheritance.py)
7. **Módulos**
- [Módulos](src/modules/test_modules.py) (declaração `import`)
- [Pacotes](src/modules/test_packages.py)
8. **Erros e Exceções**
- [Tratando Exceções](src/exceptions/test_handle_exceptions.py) (declaração `try`)
- [Levantando Exceções](src/exceptions/test_raise_exceptions.py) (declaração `raise`)
9. **Arquivos**
- [Lendo e Escrevendo](src/files/test_file_reading.py) (declaração `with`)
- [Métodos de Objetos de Arquivos](src/files/test_file_methods.py)
10. **Adicional**
- [A declaração `pass`](src/additions/test_pass.py)
- [Geradores](src/additions/test_generators.py) (declaração `yield`)
11. **Algumas Bibliotecas Padrão**
- [Serialization](src/standard_libraries/test_json.py) (biblioteca `json`)
- [File Wildcards](src/standard_libraries/test_glob.py) (biblioteca `glob`)
- [String Pattern Matching](src/standard_libraries/test_re.py) (biblioteca `re`)
- [Matemática](src/standard_libraries/test_math.py) (bibliotecas `math`, `random` e `statistics`)
- [Tempo e Datas](src/standard_libraries/test_datetime.py) (biblioteca `datetime`)
- [Comprimindo Dados](src/standard_libraries/test_zlib.py) (biblioteca `zlib`)

## Pré-requisitos

**Instalando o Python**

Certifique-se de ter o [Python3 instalado](https://realpython.com/installing-python/) em sua máquina.

Você pode usar a biblioteca padrão do Python [venv](https://docs.python.org/3/library/venv.html)
para criar ambientes virtuais e ter o Python, pip e todos os outros pacotes a serem instalados
a partir do diretório local do projeto para evitar mexer com pacotes externos ou do sistema.

Dependendo da sua instalação, você pode ter acesso ao interpretador Python3 executando `python` ou `python3`. O mesmo vale para o gerenciador de pacotes pip, você pode acessá-lo executando `pip` ou `pip3`.

Você pode ver a versão do seu Python executando:

```bash
python --version
```

Observe que neste repositório sempre que você vê o `python`, será assumido que é o Python **3**.

**Instalando dependências**

Instale todas as dependências necessárias para o projeto executando:

```bash
pip install -r requirements.txt
```

## Testando o Código

Testes são feitos usando o framework [pytest](https://docs.pytest.org/en/latest/).

Você pode adicionar novos testes criando arquivos e funções com o prefixo `test_`
(ex. `test_topic.py` com a função `def test_sub_topic()` dentro).

Para executar todos os testes, execute o seguinte comando na pasta raiz do projeto:

```bash
pytest
```

Para executar testes específicos, execute:

```bash
pytest ./path/to/the/test_file.py
```

## Revisando o Código

A revisão é feita usando as bibliotecas [pylint](http://pylint.pycqa.org/) e [flake8](http://flake8.pycqa.org/en/latest/).

### PyLint

Para verificar se o código está escrito de acordo com o guia de estilo
do [PEP 8](https://www.python.org/dev/peps/pep-0008/), execute:

```bash
pylint ./src/
```

Caso o pylint detecte um erro (ex. `missing-docstring`), convém ler mais sobre erros específicos executando:

```bash
pylint --help-msg=missing-docstring
```

[Saber mais sobre PyLint](http://pylint.pycqa.org/)

### Flake8

Para verificar se o código está escrito de acordo com o guia de estilo
do [PEP 8](https://www.python.org/dev/peps/pep-0008/), execute:

```bash
flake8 ./src
```

Ou, se você quiser uma saída mais detalhada, execute:

```bash
flake8 ./src --statistics --show-source --count
```

[Saber mais sobre Flake8](http://flake8.pycqa.org/en/latest/)

---

Traduzido por [vilmacio22](https://github.com/vilmacio22).