Olá, estudante, tudo bem?
Agora que você já avançou um pouco mais em programação no desenvolvimento de sistemas aprendendo sobre recursividade em sua última lição, você chegou na Lição 10 desta disciplina. O objetivo desta lição é explorar o tópico fundamental de entrada e saída (I/O) em Python 3. A entrada e saída são partes essenciais de qualquer programa, pois permitem que os programas interajam com os usuários, leiam dados de arquivos e executem uma série de tarefas de comunicação. Vamos nos aprofundar em como Python 3 lida com operações de entrada e saída e como você pode aplicar esses conceitos em seus programas.
Você aprenderá os conceitos básicos de entrada (input) e saída (output) em Python 3, e isso inclui a capacidade de ler dados do teclado, exibir informações na tela e manipular arquivos. Exploraremos as funções built-in do Python que são amplamente usadas para operações de I/O, como input(), print() e open(). Descobriremos como abrir, ler, escrever e fechar arquivos em Python e aprenderemos como lidar com exceções relacionadas a I/O, como erros de arquivo não encontrados ou permissões insuficientes. Além disso, conheceremos as melhores práticas ao lidar com operações de I/O, como o uso de gerenciadores de contexto (with statement), para garantir que os arquivos sejam fechados adequadamente após o uso.
No final desta lição, você terá uma compreensão sólida de como Python 3 trabalha com entrada e saída, permitindo que você crie programas mais interativos e eficazes. Além disso, você estará preparado para aplicar esses conhecimentos em uma variedade de projetos de programação, desde simples scripts até aplicativos mais complexos.
Um problema típico de software que pode ser resolvido com o uso de I/O (entrada e saída) em Python 3 é a necessidade de processar e manipular dados armazenados em arquivos. O I/O em Python é uma ferramenta essencial para lidar com dados persistentes, e muitas aplicações do mundo real envolvem a leitura e escrita de informações em arquivos.
Imagine que você está desenvolvendo um sistema de gerenciamento de estoque para uma loja. A loja mantém um registro de seus produtos em um arquivo de dados. Cada linha do arquivo representa um produto e contém informações, como nome, preço, quantidade em estoque e outros detalhes relevantes. Nessa situação, você poderia usar operações de leitura de arquivo para ler o conteúdo do arquivo de dados e carregar as informações dos produtos em uma estrutura de dados interna, como uma lista ou dicionário.
Com os dados do estoque carregados em sua estrutura de dados, você pode realizar uma série de operações, como adicionar novos produtos, atualizar os preços, verificar a disponibilidade de produtos ou calcular o valor total do estoque. Depois de fazer as atualizações necessárias, você pode usar operações de escrita de arquivo para salvar as informações de volta no arquivo de dados. Isso garante que as alterações sejam persistidas para uso futuro. O uso de I/O, também, permite que você lide com possíveis erros, como tentar abrir um arquivo que não existe ou não ter permissão para escrever nele.
Além disso, o seu programa pode interagir com o usuário por meio da entrada e saída padrão (como o terminal). Em resumo, o uso de I/O em Python 3 é fundamental para criar aplicativos que manipulam dados armazenados em arquivos, como sistemas de gerenciamento de estoque, bancos de dados simples, processadores de texto e muito mais.
No case fictício desta lição, irei lhe apresentar um restaurante local popular chamado Sabores Deliciosos. Eles desejavam melhorar a eficiência do gerenciamento de pedidos e a comunicação entre os garçons e a cozinha, pois o restaurante enfrentava problemas de pedidos perdidos, confusão na cozinha e atrasos no atendimento. Diante disso, a equipe de desenvolvimento que foi contratada para a digitalização de processos do restaurante criou uma solução usando conceitos de I/O usando a linguagem de programação Python.
Para a leitura do menu, foi criado um arquivo de texto que continha o menu do restaurante com todos os itens disponíveis, seus preços e números de identificação únicos. O arquivo é lido pelo programa Python para carregar o menu. Para o registro dos pedidos, os garçons usam um aplicativo simples em Python que permite que eles escolham os itens do menu para criar pedidos. Os pedidos são registrados em um arquivo de texto separado, que atua como uma “fila de pedidos”. A partir disso, os chefs na cozinha têm acesso a um terminal onde podem ver os pedidos à medida que são registrados. O sistema atualiza automaticamente quando novos pedidos são adicionados à fila. Isso ajuda a evitar pedidos perdidos e confusão na cozinha. Outro ponto importante é que os garçons podem verificar o status dos pedidos em seus terminais. Quando um pedido é preparado e servido, o status é atualizado para “concluído”. Isso ajuda a garantir que todos os pedidos sejam atendidos prontamente. Mais itens foram criados nessa digitalização do processo, como a geração de contas e os registros de ações.
O importante é que, com esse case, conseguimos validar que o uso de Python 3 com I/O, no sistema de gerenciamento de pedidos, resolveu os problemas de comunicação e eficiência do restaurante Sabores Deliciosos. Vamos compreender ainda mais sobre esse assunto?
O I/O, que significa Entrada/Saída, é um conceito fundamental em programação que se refere à comunicação de um programa de computador com o mundo exterior, seja para receber dados (entrada), seja para enviar dados processados (saída). Agora, você conhecerá alguns pontos-chave sobre I/O em programação que tornam o assunto essencial:
Comunicação com o ambiente externo: os programas de computador, frequentemente, precisam interagir com o mundo exterior. Isso pode incluir a leitura de dados de sensores, teclado ou arquivos bem como a exibição de informações na tela, gravação em disco ou envio pela rede. O I/O é o meio pelo qual essa comunicação ocorre.
Entrada de dados: os programas, frequentemente, precisam receber dados de entrada do usuário ou de fontes externas. Isso pode incluir dados inseridos pelo usuário, como informações digitadas no teclado, ou dados lidos de sensores, dispositivos de armazenamento ou outras fontes.
Saída de dados: uma vez que um programa processa dados, ele, frequentemente, precisa exibir os resultados ou armazená-los para uso futuro. Isso pode incluir a exibição de resultados na tela, impressão em papel, gravação em arquivos ou envio de dados pela rede.
Interação com o usuário: a maioria dos programas interage, de alguma forma, com os usuários. Eles exibem menus, caixas de diálogo, mensagens de erro e outras informações na tela. O I/O é responsável por todas essas interações.
Manipulação de arquivos e dados: o I/O desempenha papel crucial na leitura e gravação de arquivos de dados. Isso é fundamental para a maioria das aplicações, pois permite que os programas armazenem e recuperem informações de maneira persistente.
Essencial para aplicações do mundo real: em aplicações do mundo real, como sistemas operacionais, bancos de dados, jogos, aplicativos da web e muito mais, o I/O desempenha papel central. Ele permite que esses sistemas interajam com hardware, usuários e outros aplicativos.
Gerenciamento de fluxo: o I/O, também, está relacionado ao conceito de fluxo de controle em um programa. O programa frequentemente precisa tomar decisões com base nos dados de entrada e realizar ações específicas com base nesses dados. O I/O permite que o programa processe essas informações de maneira adequada.
Fundamental para a comunicação de dados: a capacidade de ler e escrever dados é fundamental para a comunicação de dados em uma variedade de contextos, desde troca de informações entre componentes de hardware até transações em sistemas distribuídos.
Em programação, “entrada” (input) e “saída” (output) são dois conceitos fundamentais que se referem à comunicação de um programa com o ambiente externo. No entanto eles têm propósitos diferentes e envolvem diferentes tipos de interações:
Menezes (2017) diz que chamamos de entrada de dados o momento em que seu programa recebe dados ou valores por um dispositivo de entrada de dados (como o teclado do computador) ou de um arquivo em disco.
Definição: refere-se aos dados ou às informações que um programa recebe do ambiente externo. Eles podem ser inseridos pelo usuário, lidos de arquivos, obtidos de sensores ou de qualquer outra fonte externa.
Fontes de entrada: incluem teclado, mouse, dispositivos de toque, sensores, câmeras, microfones, arquivos, dispositivos de redes, entre outros.
Propósito: permitir que um programa obtenha informações relevantes para sua execução. Isso pode incluir dados de configuração, comandos do usuário, informações do ambiente, etc.
Definição: refere-se aos dados ou às informações que um programa gera e os envia para o ambiente externo. Esses dados podem ser exibidos na tela, impressos em papel, gravados em arquivos, enviados pela rede ou de qualquer outra forma comunicados para fora do programa.
Destinos de saída: incluem tela do computador, impressoras, arquivos de log, dispositivos de rede, entre outros.
Propósito: permitir que um programa comunique os resultados de suas informações processadas, resultados de cálculos, mensagens de erro, relatórios etc.
Em Python, duas funções básicas de I/O são amplamente utilizadas para entrada de dados do usuário e exibição de dados na tela:
Função input(): é usada para receber entrada de dados do usuário por meio do teclado. Ela aguarda até que o usuário digite uma linha de texto (seguida pela tecla “Enter”) e retorna essa linha como um string. Menezes (2017) explica que ela recebe um parâmetro, que é a mensagem a ser exibida, e retorna o valor digitado pelo usuário, que pode ser armazenado em uma variável para uso posterior. Ex.: nome = input(“Digite seu nome: “).
Função print(): segundo Menezes (2017), é uma função utilizada para enviar dados para a tela do computador. Ela aceita um ou mais argumentos que podem ser strings, variáveis, números ou expressões, e exibe esses valores no console. Você pode usar formatação de strings para combinar variáveis e texto em uma saída formatada. Ex.: nome = “Alice” idade = 30 print(f”Nome: {nome}, Idade: {idade}”).
Em Python, os arquivos são usados para realizar operações de I/O (entrada e saída) em dados armazenados em dispositivos de armazenamento, como discos rígidos, SSDs ou unidades de rede. Os arquivos são essenciais para a manipulação de dados persistentes, como leitura e escrita em arquivos de texto, binários, CSV, JSON e outros formatos. Mas, afinal, o que é um arquivo? Menezes (2017) nos explica que um arquivo é uma área em disco em que podemos ler e gravar informações.
Para interagir com um arquivo, você, primeiro, precisa abri-lo. Isso é feito com a função open(). Segundo Menezes (2017), ela utiliza os parâmetros nome e modo. O nome é o nome do arquivo em si, por exemplo, “exemplo.txt”. O modo indica as operações que você pode realizar. Modos de abertura comuns incluem “r” (leitura), “w” (escrita), “a” (anexação), “rb” (leitura binária) e “wb” (escrita binária), entre outros. Exemplo de abertura de um arquivo para leitura:
arquivo = open(“exemplo.txt”, “r”).+
Após abrir um arquivo para leitura, você pode ler seu conteúdo. Isso pode ser feito usando vários métodos, como read(), readline(), readlines() e outros. O método read() lê todo o conteúdo do arquivo de uma vez, enquanto readline() lê uma linha por vez, e o readlines() lê todas as linhas em uma lista. Veja, a seguir, um exemplo de leitura de um arquivo linha por linha:
with open(“exemplo.txt”, “r”) as arquivo:
for linha in arquivo:
print (linha)
Para escrever em um arquivo, você precisa abrir o arquivo no modo de escrita (“w”, para substituir o conteúdo existente, ou “a”, para anexar ao conteúdo existente). Você pode usar o método write() para escrever dados em um arquivo. Veja, a seguir, um exemplo de escrita em um arquivo:
with open(“saida.txt”, “w”) as arquivo:
arquivo.write(“Este é um exemplo de escrita em arquivo.”)
É fundamental fechar um arquivo após concluídas as operações de leitura ou escrita. Isso é feito automaticamente quando você usa a declaração with. Caso contrário, você pode usar o método close() para fechar explicitamente um arquivo. Exemplo de fechamento de arquivo:
arquivo.close()
O uso da declaração with é altamente recomendado para se realizar o gerenciamento de contexto (With statement), pois garante que o arquivo seja fechado corretamente após o término das operações, mesmo se ocorrerem exceções. Veja, a seguir, um exemplo de uso da declaração with:
with open(“exemplo.txt”, “r”) as arquivo:
dados = arquivo.read()
Ao lidar com arquivos, é importante considerar exceções, como FileNotFoundError ou PermissionError. É aconselhável usar blocos try…except para lidar com possíveis erros ao abrir, ler ou escrever em arquivos.
Certifique-se de praticar o uso de arquivos com atenção, pois a manipulação incorreta de arquivos pode levar a problemas de perda de dados e erros de execução. O gerenciamento adequado de arquivos, incluindo abertura, leitura, escrita e fechamento adequados, é fundamental para desenvolver aplicativos Python robustos e seguros.
Compreender como Python manipula a entrada e saída de dados é muito importante, pois isso forma a base para interações eficazes entre o usuário e o software. O conhecimento desses conceitos permite a você, técnico em desenvolvimento de sistemas, criar aplicativos interativos e funcionais, capazes de receber dados do usuário, processá-los e fornecer resultados significativos. Além disso, esses conceitos são fundamentais para criar scripts e programas que possam ler e escrever arquivos, acessar banco de dados, interagir com dispositivos externos e comunicar-se com outros sistemas.
Agora, você implementará comandos de I/O em Python, mais precisamente uma versão simples do cadastro de um pedido no restaurante Sabores Deliciosos, sim, o restaurante do nosso case de hoje. Siga o passo a passo, a seguir, para a implementação:
Abra seu navegador web e acesse o site OnlineGDB em https://www.onlinegdb.com/.
Escolha a linguagem de programação que deseja usar. Selecione “Python” na lista suspensa.
No editor de código, você pode escrever o código Python para calcular o fatorial de forma recursiva, conforme a Figura 1:
Após escrever o código, você pode clicar no botão “Run”, na parte superior do editor. Isso executará o código Python e mostrará o resultado na janela de saída. Segue algumas explicações sobre o código da Figura 1.
No primeiro bloco do código, foi criado um dicionário chamado “menu” que contém os itens do menu do restaurante. Cada item do menu é representado por um número (chave) associado a uma tupla contendo o nome do item e seu preço.
No segundo bloco do código, o menu é exibido para o usuário. Item sobre o dicionário menu usando o loop for, descompactando a tupla (nome, preco) para cada item. isso exibe o número do item, o nome e o preço formatado.
No terceiro bloco do código, é onde solicitamos ao usuário que faça seu pedido. Usamos um loop while True para permitir que o usuário faça várias escolhas até que ele digite zero para encerrar.
O usuário digita o número do item do menu desejado (“escolha”).
Verificamos se a escolha é zero para encerrar o pedido ou se a escolha está no menu.
Se a escolha for inválida, exibimos “Opção inválida” e continuamos o loop.
Se a escolha for válida, pedimos ao usuário que digite a quantidade desejada e armazenamos no dicionário pedido.
No último e quarto bloco de código, finalmente, exibimos o pedido registrado, percorrendo o dicionário pedido mostrando cada item e a quantidade pedida.
Esse código em Python 3 permite ao usuário escolher itens do menu, registrar a quantidade desejada e, em seguida, exibir o pedido final. Ele demonstra a interação básica com o usuário, o uso de dicionários para rastrear pedidos e a exibição de informações formatadas.
MENEZES, N. N. C. Introdução à Programação com Python: algoritmos e lógica de programação para iniciantes. São Paulo: Novatec, 2017.