Introdução

Python é uma linguagem de programação versátil, poderosa e fácil de aprender. Neste artigo, exploraremos alguns conceitos básicos de Python, juntamente com exemplos práticos para ajudar a compreender como a linguagem funciona. Se você é um iniciante na programação ou está apenas começando com Python, este artigo é para você.

Sintaxe Simples e Legibilidade

Uma das características mais marcantes do Python é a sua sintaxe simples e legibilidade. Em comparação com muitas outras linguagens de programação, o código Python é muito mais fácil de entender. Aqui está um exemplo simples de um programa "Hello, World!" em Python:

print("Hello, World!")

Observe como não há necessidade de especificar uma nova linha ou usar ponto e vírgula para encerrar a linha. O código Python é mais "limpo", bem parecido com a liguagem natural e mais fácil de ler.

Variáveis e Tipos de Dados

Python é uma linguagem fracamente tipada, o que significa que você não precisa especificar explicitamente o tipo de uma variável. O tipo é inferido automaticamente com base no valor atribuído à variável. Por exemplo:

x = 42  # x é um inteiro
name = "Alice"  # name é uma string
is_valid = True  # is_valid é um booleano

Aqui, x é uma variável inteira, name é uma variável de string e is_valid é uma variável booleana.

Estruturas de Controle

Python oferece estruturas de controle familiares, como condicionais e loops. Por exemplo, podemos usar uma declaração if-elif-else para tomar decisões com base em condições:

x = 10
y = 20

if x < y:
    print("x é menor que y")
elif x > y:
    print("x é maior que y")
else:
    print("x é igual a y")

Observe que Python usa recuo (indentação) para definir blocos de código, em vez de chaves, como em algumas outras linguagens.

Estruturas de dados

Em Python, as estruturas de dados são componentes fundamentais que permitem armazenar, organizar e manipular informações em programas. Python oferece várias estruturas de dados integradas e também suporta a criação de estruturas de dados personalizadas. Aqui estão algumas das estruturas de dados mais comuns em Python:

Listas Uma lista é uma coleção ordenada de elementos. Os elementos de uma lista podem ser de tipos diferentes, incluindo números, strings, listas aninhadas e outros tipos de dados. As listas são mutáveis, o que significa que você pode adicionar, remover ou modificar elementos.

minha_lista = [1, 2, 3, "python"]

Tuplas Uma tupla é semelhante a uma lista, mas é imutável, o que significa que você não pode alterar seus elementos depois de definidos.As tuplas são frequentemente usadas para representar dados que não devem ser modificados (constantes).

minha_tupla = (10, 20, 30)

Dicionários Um dicionário é uma coleção não ordenada de pares chave-valor. Os dicionários são eficientes para recuperar valores com base em chaves.

meu_dicionário = {"nome": "João", "idade": 30, "cidade": "São Paulo"}

Conjuntos Um conjunto é uma coleção não ordenada de elementos exclusivos. Os conjuntos são úteis para verificar a unicidade de elementos e realizar operações de conjunto, como união e interseção.

meu_conjunto = {1, 2, 3, 3, 4}

Strings Uma string é uma sequência de caracteres. As strings são imutáveis em Python, o que significa que você não pode alterar os caracteres em uma string.

minha_string = "Python é incrível!"

Listas Aninhadas e Estruturas de Dados Complexas Python permite criar estruturas de dados mais complexas, como listas aninhadas, dicionários de dicionários e assim por diante. Isso oferece flexibilidade para organizar informações em estruturas personalizadas.

matriz = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Coleções Especiais Python oferece bibliotecas padrão para coleções especiais, como deque (fila dupla), namedtuples (tuplas nomeadas), Counter (contagem de elementos em sequências) e outros. Essas coleções podem ser úteis para tarefas específicas.

Orientada a objetos

Além das estruturas de dados mencionadas acima, os programadores Python também podem criar suas próprias classes para definir estruturas de dados personalizadas (Artigo que escrevi sobre o assunto), o que oferece uma flexibilidade significativa. Python é conhecido por sua rica variedade de estruturas de dados e pela facilidade de uso para lidar com elas, tornando-o uma linguagem de programação versátil para diversas aplicações.

Estruturas de repetição

Python oferece duas principais estruturas de repetição: o loop for e o loop while. Vamos dar uma breve visão geral de ambos:

For

O loop for é usado para iterar por um conjunto de elementos, como uma lista, uma tupla, uma string ou outros tipos iteráveis. Aqui está um exemplo genérico de um loop for:

frutas = ["maçã", "banana", "laranja"]
for fruta in frutas:
    print(fruta)

Neste exemplo, o loop for itera por cada elemento na lista frutas e imprime cada item na saída. É uma maneira conveniente de realizar tarefas repetitivas, como processar todos os itens em uma lista.

While

O loop while é usado para repetir um bloco de código enquanto uma determinada condição for verdadeira. Aqui está um exemplo genérico de um loop while:

contador = 0
while contador < 5:
    print(f"Contagem: {contador}")
    contador += 1

Neste exemplo, o loop while executa o bloco de código enquanto a variável contador for menor que 5. A cada iteração, o valor de contador é incrementado, e a condição é verificada novamente. O loop continua até que a condição não seja mais verdadeira.

Funções internas

Python fornece várias funções internas (também conhecidas como funções embutidas ou funções integradas) que são parte do núcleo da linguagem. Essas funções são amplamente usadas para realizar tarefas comuns em programação. Abaixo, estão algumas das funções internas mais úteis do Python:

print A função print() é usada para exibir informações na saída padrão (normalmente a tela). Você pode passar zero ou mais argumentos para esta função e eles serão impressos separados por espaços.

print("Olá, mundo!")

len A função len() retorna o número de itens em um objeto, como uma lista, tupla, string, dicionário ou conjunto.É frequentemente usado para determinar o tamanho de uma estrutura de dados.

minha_lista = [1, 2, 3, 4, 5] 
tamanho = len(minha_lista)  # Isso definirá 'tamanho' como 5

input A função input() é usada para obter entrada do usuário a partir da linha de comando. Ela retorna a entrada do usuário como uma string.

nome = input("Qual é o seu nome? ")

str(), int(), float() Essas funções são usadas para converter valores de um tipo de dados para outro.str() converte um valor em uma string, int() converte um valor em um inteiro, e float() converte um valor em um número de ponto flutuante.

numero = 42 
numero_str = str(numero)  # Isso definirá 'numero_str' como "42"

range A função range() é usada para criar uma sequência de números inteiros. Ela é frequentemente usada em laços for para gerar números em um intervalo específico.

for i in range(1, 6):     
    print(i)  # Isso imprimirá números de 1 a 5

max() e min() As funções max() e min() são usadas para encontrar o valor máximo e mínimo em uma sequência de números ou elementos.

numeros = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] 
maior = max(numeros)  # Isso definirá 'maior' como 9 menor = min(numeros)  
menor = min(numeros)  # Isso definirá 'menor' como 1

abs() A função abs() retorna o valor absoluto de um número, ou seja, o número sem o sinal negativo, se existir. Ela é usada principalmente para obter o valor absoluto de números.

x = -5 valor_absoluto = abs(x)  # Isso definirá 'valor_absoluto' como 5

type() A função type() retorna o tipo de um objeto em Python.Ela é útil para verificar o tipo de uma variável ou objeto.

numero = 42 tipo = type(numero)  # Isso definirá 'tipo' como <class 'int'>

sum() A função sum() é usada para encontrar a soma dos elementos em uma sequência (geralmente uma lista ou tupla) de números.

numeros = [1, 2, 3, 4, 5] 
soma = sum(numeros)  # Isso definirá 'soma' como 15

Essas são apenas algumas das funções internas úteis em Python. A linguagem oferece muitas outras funções integradas para uma variedade de tarefas, tornando-a versátil e adequada para diferentes tipos de desenvolvimento de software.

Funções definidas pelo usuário

Você pode criar suas próprias funções em Python para organizar e reutilizar o código. Aqui está um exemplo de definição e uso de uma função:

def miau():
    print("Miau")
for i in range(3):
    miau()

Neste caso, definimos a função miau() que imprime "Miau" e, em seguida, chamamos essa função três vezes em um loop.

Entrada e Saída

Python torna fácil obter entrada do usuário e exibir resultados. Aqui está um exemplo de entrada de usuário:

name = input("Qual é o seu nome? ")
print(f"Olá, {name}!")

A função input() permite ao usuário fornecer informações, que são armazenadas na variável name, e usamos f-strings para incorporar essa informação na saída.

Argumentos de linha de comando

Podemos aceitar argumentos de linha de comando com:

from sys import argv
if len(argv) == 2:
    print(f"hello, {argv[1]}")
else:
    print("hello, world")

Importamos argv do sys, ou módulo do sistema, integrado ao Python. Como argv é uma lista, podemos obter o segundo item com argv[1], portanto, adicionar um argumento com o comando python argv.py David resultará em olá, David impresso. Como em C, argv[0] seria o nome do nosso programa, como argv.py.

Também podemos permitir que o Python itere sobre a lista para nós:

from sys import argv

for arg in argv:
    print(arg)

Também podemos retornar códigos de saída quando nosso programa for encerrado:

import sys
if len(sys.argv) != 2:
    print("missing command-line argument")
    sys.exit(1)
    print(f"ola, {sys.argv[1]}")
sys.exit(0)

Importamos todo o módulo sys agora, já que estamos usando vários componentes dele. Agora podemos usar sys.arg e sys.exit() para sair de nosso programa com um código específico.

Algoritmos

Podemos implementar a pesquisa linear apenas verificando cada elemento em uma lista:

import sys
numbers = [4, 6, 8, 2, 7, 5, 0]
if 0 in numbers:
    print("Encontrado")
    sys.exit(0)
    print("Nao Encontrado")
    sys.exit(1)

Com if 0 in numbers:, estamos pedindo ao Python para verificar a lista para nós. Uma lista de strings também pode ser pesquisada com:

names = ["Bill", "Charlie", "Fred", "George", "Ginny", "Percy", "Ron"]
if "Ron" in names:
    print("Found")
else:
    print("Not found")

Se tivermos um dicionário, um conjunto de pares de chaves-valores, também podemos verificar se há uma chave específica e examinar o valor armazenado para ela.

Os dicionários, assim como os conjuntos, são normalmente implementados em Python com uma estrutura de dados como uma tabela hash, para que possamos ter uma pesquisa de tempo quase constante. Novamente, temos a desvantagem de ter menos controle sobre exatamente o que acontece nos bastidores, como poder escolher uma função hash, com a vantagem de ter que fazer menos trabalho nós mesmos.

A troca de duas variáveis ​​também pode ser feita simplesmente atribuindo os dois valores ao mesmo tempo:

x = 1
y = 2
print(f"x is {x}, y is {y}")
x, y = y, x
print(f"x is {x}, y is {y}")

Em Python, não temos acesso a ponteiros, o que nos protege de cometer erros com a memória.

Arquivos

Vamos abrir um arquivo CSV:

import csv
houses = {
 "Gryffindor": 0,
 "Hufflepuff": 0,
 "Ravenclaw": 0,
 "Slytherin": 0
}
with open("Sorting Hat (Responses) - Form Responses 1.csv", "r") as file:
 reader = csv.reader(file)
 next(reader)
 for row in reader:
 house = row[1]
 houses[house] += 1
for house in houses:
 print(f"{house}: {houses[house]}")

Usamos a função de reader da biblioteca csv, pulamos a linha do cabeçalho com next(reader) e, em seguida, iteramos sobre cada uma das linhas restantes. O segundo item em cada linha, row[1], é a string de uma casa, então podemos usá-la para acessar o valor armazenado em houses para aquela chave e adicionar um a ela. Por fim, imprimiremos a contagem de cada casa.

Podemos usar a palavra-chave with, que fechará o arquivo para nós quando terminarmos:

...
with open("phonebook.csv", "a") as file:
    writer = csv.writer(file)
    writer.writerow((name, number))

Mais bibliotecas

Em nosso próprio Mac ou PC, podemos abrir um terminal após instalar o Python e usar outra biblioteca para converter texto em fala:

importar pyttsx3
engine = pyttsx3.init ()
engine.say("olá, mundo")
engine.runAndWait()

Lendo a documentação, podemos descobrir como inicializar a biblioteca e dizer uma string. Podemos até passar uma string de formato com engine.say (f "olá, {nome}") para dizer alguma entrada.

Podemos usar outra biblioteca, face_recognition, para encontrar rostos nas imagens:

# Encontre rostos na imagem
# https://github.com/ageitgey/face_recognition/blob/master/examples
#/find_faces_in_picture.py
from PIL import Image
import face_recognition
# Carregue o arquivo jpg em uma matriz numpy
image = face_recognition.load_image_file("office.jpg")
# Encontre todos os rostos na imagem usando o modelo baseado em HOG padrão.
# Este método é bastante preciso, mas não tão preciso quanto o modelo CNN 
# e não é acelerado por GPU.
# Veja também: find_faces_in_picture_cnn.py
face_locations = face_recognition.face_locations(image)
for face_location in face_locations:
 # Imprima a localização de cada rosto nesta imagem: cima, direita, 
 # baixo, esquerda
     top, right, bottom, left = face_location
 # Você pode acessar o próprio rosto desta forma:
     face_image = image [top: bottom, left: right]
     pil_image = Image.fromarray(face_image)
     pil_image.show()

Com recognize.py podemos escrever um programa que encontra uma correspondência para um rosto específico.

Podemos criar um código QR, ou código de barras bidimensional, com outra biblioteca:

import os
import qrcode
img = qrcode.make("https://youtu.be/oHg5SJYRHA0")
img.save("qr.png","PNG")
os.system("open qr.png")
Podemos reconhecer a entrada de áudio de um microfone:
import speech_recognition
# Obtenha áudio do microfone
recognizer = speech_recognition.Recognizer()
with speech_recognition.Microphone() como fonte:
    print("Say something:")
    audio = reconhecizer.listen(fonte)
    # Reconhecer fala usando o Google Speech Recognition
    print("Você disse:")
    print(recognizer.recognize_google(audio))

Estamos seguindo a documentação da biblioteca para ouvir nosso microfone e convertê-lo em texto.

Podemos até adicionar lógica adicional para respostas básicas:

words = recognizer.recognize_google(audio)
# Responda ao discurso
if "hello" in words:
    print("Olá para você também :)")
elif "how are you" em palavras:
    print("Estou bem, obrigado!")
elif "goodbye" em palavras:
    print("Tchau pra você também")
else:
    print("Hm?")

Conclusão

Python é uma linguagem de programação poderosa e acessível que oferece uma ampla gama de funcionalidades. É uma linguagem de propósito geral, ou seja, é utilizada para fazer uma infinidade de coisas. Neste artigo, exploramos conceitos básicos, como variáveis, estruturas de controle, listas e funções, além de entrada e saída. A legibilidade e a simplicidade da sintaxe do Python fazem com que seja uma escolha popular para programadores de todos os níveis. Se você está interessado em aprender a programar, Python é um excelente ponto de partida.

Lembre-se de que a prática é fundamental para se tornar um programador habilidoso. Experimente os exemplos deste artigo e comece a criar seus próprios programas em Python para aprofundar seu entendimento. Com o tempo, você se tornará um programador Python confiante e capaz de criar aplicativos úteis e interessantes.

Até a próxima!