Python 101 (0x0)
Houve um trabalho a ser feito para a FIAP, onde era necessário criar um sistema simples de cadastro com algumas funcionalidades básicas. Vi que muitos não sabiam como dar início no projeto e uma parte teve pouca ou nenhum contato com programação. Pois bem, o trabalho já foi e ficaram algumas dúvidas, pensando nisso, darei início ao pouco que sei de Python e vou mostrar como montar uns scripts simples, voltados para segurança.
Mas antes disso, é necessário saber mais sobre as funcionalidades da linguagem. Python como sabem, é OOP (Object-oriented programming) ou programação orientada a objetos (POO), mas não se enganem, é preciso entender esse conceito. Vejam os posts abaixo para entender essa diretriz:
Tudo em Python é orientado a objetos?
Drastically improve your python undertanding pythons execution model
Tendo em vista que você leu um dos posts acima, vamo ver o início do início, e vamos escrever nosso primeiro código de fato, o hello_h4x0rs.py. Por ser uma linguagem script, não há necessidade de compilar o código, pois existem um cara chamado interpretador e é nele que iremos criar o primeiro code.
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print('Hello H4x0r$!!!')
Hello H4x0r$!!!
O shell interativo do Python é bom para pequenos scripts afim de realizar certos testes, mas sem nenhuma ou pouca complexidade. Por isso é necessário a utilização de um ambiente de desenvolvimento, uma IDE. No momento eu utilizo algumas IDEs, o ATOM é um exemplo que eu já citei por aqui, mas ele pode ser pesado em máquinas mais antigas, caso seja este o caso, recomendaria utilizar o Geany, Sublime Text 3 ou o Vim. Estas serão suficientes para começar a codar de forma bacana.
Variáveis
São utlizadas para guardar algum dado, independente do tipo de dado. Isto é: strings, números inteiros, reais ou complexos e assim por diante. Também é utilizado para armazenar uma lista ou um dicionário, por exemplo. Como toda linguagem de programacao, a maioria que estuda aprende utilizando matemática, como eu não sou muito bom com isso, nós iremos seguir por um caminho diferente depois desse início, mas para não passar batido, vamos ver os operadores aritméticos basicos com o uso de variáveis.
num0 = 1 # Variável que recebeu um valor do tipo inteiro
num1 = 2 # Outro valor do tipo inteiro
sum = num0 + num1 # Variável sum que realiza a soma dos valores dentro da variável num0 e num1
sub = num0 - num1 # Variável de subtração
div = num0 / num1 # Variável de divisão
mul = num0 * num1 # Variável de multiplicação
print('A soma de {} e {} eh: {}'.format(num0, num1, sum))
print('A subtração de {} e {} eh: {}'.format(num0, num1, sub))
print('A divisão de {} e {} eh: {}'.format(num0, num1, div))
print('A multiplicação de {} e {} eh: {}'.format(num0, num1, mul))
Resultado:
~$ python3 opsarits.py
A soma de 1 e 2 eh: 3
A subtração de 1 e 2 eh: -1
A divisão de 1 e 2 eh: 0.5
A multiplicação de 1 e 2 eh: 2
Execute o programa acima, você irá notar que python segue a ordem de precedência para informa o resultado de cada operação. Existem coisas a mais, além das variáveis por ai.
- #: Cerquilha indica que tudo após ela e na mesma linha, é um comentário
- =: o valor de igualdade é para definir um valor, diferente de == que equivale a expressão seguinte (pesquise operadores relacionais). Este iremos ver mais pra frente.
- print: responsável por exibir informações na tela do usuário, um resultado.
- .format: uma formatação que foi embutida na versão 3 de python, facilitando a formatação pra inserir um dado dentro de um resultado que será exibido na tela. Cada chave { } é um valor armazenado dentro do format.
Desafio: Crie um programa que tenha uma variável com valor do tipo real (float) e outra que tenha em seu valor uma string e exiba o resultado na tela seu resultado.
Se você executou o programa acima, viu que foi exibido justamente os resultados de uma conta, mas e se utilizar aspas em cada um dos valores das Variáveis, num0 e num1?
num0 = '1' # Variável que recebeu um valor do tipo inteiro
num1 = '2' # Outro valor do tipo inteiro
sum = num0 + num1 # variável sum que realiza a soma dos valores dentro da variável num0 e num1
sub = num0 - num1 # Variável de subtração
div = num0 / num1 # Variável de divisão
mul = num0 * num1 # Variável de multiplicação
print('A soma de {} e {} eh: {}'.format(num0, num1, sum))
print('A subtração de {} e {} eh: {}'.format(num0, num1, sub))
print('A divisão de {} e {} eh: {}'.format(num0, num1, div))
print('A multiplicação de {} e {} eh: {}'.format(num0, num1, mul))
~$ python3 opsarits.py
Traceback (most recent call last):
File "exemplo.py", line 5, in <module>
sub = num0 - num1
TypeError: unsupported operand type(s) for -: 'str' and 'str'
Houve um retorno de erro, onde informa que a partir da linha cinco, o operador de subtração realiza a ação dentro de uma string, pois não há suporte. Isso ocorre para divisão, mas não para multiplicação, o erro que occore em multiplicação, é o mesmo, mas é possível utilizar este operador para exibir um str (string) diversas vezes.
print('A' * 5)
A letra ‘A’ será exibida 5 vezes, percebar que, ‘A’ é um char (caracter), mas não está sendo concatenado com o número 5, se eu quiser que 5 vire um char e isso é possível, é necessário incluir aspas.
print('A' + '5')
Veja que, não é possível multiplizar string com string, assim como não é possível realizar a divisão delas. Há limitações quanto a isso no começo do aprendizado, mas você pode ir brincando com os operadores e criando variáveis do tipo de quiser.
Input
É legal saber que dá pra fazer umas contas, mas ter que alterar a variável cada vez que há a necessidade de obter um resultado diferente é ums saco. Pra isso, nós podemos solicitar ao usuário que ele informe o número e o programa se encarrega de realizar os cálculos.
num0 = int(input('Informe um número: '))
num1 = int(input('Informe o segundo número: '))
soma = num0 + num1
divisao = num0 / num1
subtracao = num0 - num1
multiplicacao = num0 * num1
print('''
Soma: {}
subtração: {}
divisão: {}
multiplicação: {}'''.format(soma, subtracao, divisao, multiplicacao))
Nosso código não mudou muito, adicionamos apenas duas funções a mais e nosso print está um pouco diferente.
- int: declara que o conteúdo guardado na variável é do tipo inteiro.
- input: função responsável por solicitar ao usuário um dado, que pode depender do tipo da variável.
- print com tres aspas: elimina a necessidade de diversos prints na tela, se assemelha a um texto comum e o pular de linha, é realmente um pular de linha.
~$ python3 opsarits.py
Informe um número: 5
Informe o segundo número: 8
Soma: 13
subtração: -3
divisão: 0.625
multiplicação: 40
Para não ficarmos atolados de informações logo no início o post fica por aqui, seguiremos essa linha, onde haverá um particionamento de informações. Da uma brincada com as informações acima e se quiser, segue um exemplo de trabalho pedido pela FIAP.
# -*- coding: utf-8 -*-
import os
from config import banner as arte
from config.banner import cores
from config.modulos import *
os.system('cls' if os== 'nt' else 'clear') # Limpa a tela considerando o sistema operacional
registros = [] # Realiza o armazenamento das informações
opcoes = 0 # op do menu
try:
while(opcoes <= 6):
descricao = arte.banner()
print(descricao)
print('{amarelo}[1]{finale} - Modo de cadastro para adicionar um novo usuário.'.format(**cores))
print('{amarelo}[2]{finale} - Modo de busca, procura um usuário a partir do apelido inserido.'.format(**cores))
print('{amarelo}[3]{finale} - Exibir quantidade de usuários cadastrados.'.format(**cores))
print('{amarelo}[4]{finale} - Modo de exclusão, capaz de excluir um usuário.'.format(**cores))
print('{amarelo}[5]{finale} - Nível de acesso no sistema'.format(**cores))
print('{amarelo}[6]{finale} - Data de ultimo acesso.'.format(**cores))
opcoes = (int(input('\nDigite uma das opções, de 1-6: ')))
if( opcoes == 1 ):
cadastrar(registros)
elif (opcoes == 2 ):
buscar(registros)
elif (opcoes == 3):
sudos(registros)
elif (opcoes == 4):
excluir(registros)
elif (opcoes == 5):
acesso(registros)
elif (opcoes == 6):
horaData(registros)
else:
print('Op invalida padawan')
except KeyboardInterrupt:
print('\n{verde}{italic}Saindo do sistema{finale}'.format(**cores))
exit()
# -*- coding: utf-8 -*-
from config.banner import cores
import os
def cadastrar(lista): # Este def realiza o cadastro do usuário
# os.system('cls' if os== 'nt' else 'clear')
addUser = 'S'
validacao = [] # Armazena os dados de cadastro
while addUser == 'S':
validador = False
while validador != True:
apelido = input('\nDigite um apelido ou nome abreviado: ').upper()
if apelido not in validacao:
usuário=[
input('Informe o nome completo: ').upper(),
apelido,
input('Informe o cargo do usuário: ').upper(),
input('Nível de acesso, exemplo: Visitante, usuário, administrativo, tecnico, super-usuário:\n').upper(),
input('Informe a data do último acesso, por exemplo: 06/05/2019\n').upper()
]
print('{verde}\nCadastro realizado com sucesso.{finale}'.format(**cores))
validacao.append(apelido)
lista.append(usuário)
validador = True # Caso esteja tudo ok, será validado as informações e o programa dará prosseguimento no seu fluxo
else:
print('{amarelo}\nO usuário já se encontra registrado, tente novamente.{finale}'.format(**cores)) # Caso o validador seja diferente de verdadeiro, será exibido essa mensagem
addUser = input('\nDeseja continuar com outro cadastro (S)im? Para prosseguir aperte qualquer tecla: ').upper()
def buscar(lista): # Sistema de busca
# os.system('cls' if os== 'nt' else 'clear')
procurar = input('Digite o apelido escolhido pelo usuário: ').upper()
for registro in lista:
if procurar == registro[1]:
print('{amarelo}\nNome...: {finale}{}'.format(registro[0], **cores))
print('{amarelo}Apelido: {finale}{}'.format(registro[1], **cores))
print('{amarelo}Cargo..: {finale}{}'.format(registro[2], **cores))
else:
print('{amarelo}\n§ Usuário não encontrado §{finale}'.format(**cores))
def sudos(lista): # Exibi a quantidade de usuários no sistema
# os.system('cls' if os== 'nt' else 'clear')
início = 0
for registro in lista:
if registro[3] == registro[3]:
print('\nO nível de acesso do usuário {} é {}.'.format(registro[0], registro[2]))
início = início + 1
print('\nTotal de usuários: '+ str(início))
def excluir(lista): # Exclui um usuário do registro
# os.system('cls' if os== 'nt' else 'clear')
procurar = input('\nInforme o apelido do usuário que deseja realizar a exclusão: ').upper()
for registro in lista:
if registro[1] == procurar:
lista.remove(registro)
print('{verde}Exclusão bem sucedida.{finale}'.format(**cores))
else:
print('{amarelo}\nUsuário não consta mais no sistema.{finale}'.format(**cores))
#return "{verde}Exclusão bem sucedida.{finale}"
def acesso(lista): # Exibir os usuários a partir do nível cadastrado
# os.system('cls' if os== 'nt' else 'clear')
procurar = input('\nInforme o nível de acesso para encontrar usuários setados com o mesmo nível, exemplo: Visitante, usuário, administrativo, tecnico, super-usuário:\n').upper()
for registro in lista:
if procurar == registro[3]:
print('{amarelo}\nNome.:{finale} {}'.format(registro[0], **cores))
print('{amarelo}Cargo:{finale} {}'.format(registro[2], **cores))
def horaData(lista): # Exibi as informações de ultimo acesso
# os.system('cls' if os== 'nt' else 'clear')
dta = []
for registro in lista:
if registro[4] not in dta:
dta.append(registro[4])
print('Datas disponiveis: {}'.format(str(dta)))
procurar = input('\nInforma a data de registro: ')
for registro in lista:
if registro[4] == procurar:
print('O usuário {} acessou o sistema nesta data'.format(registro[1]))
else:
print('{amarelo}Não foi encontrado nenhum outro registro{finale}'.format(**cores))
cores = {
'italic':'\033[3m',
'verde':'\033[92m',
'amarelo':'\033[1;93m',
'finale':'\033[0m',
}
exibir = """
{verde} __
|__) _ _ |_ . | _
| \ (- |_) |_ | | (-
|{finale}{amarelo} version-beta 0.0 {finale}
Gerenciador de usuários desenvolvido como trabalho academico para a FIAP
Author: Henrique Galdino {italic}a.k.a{finale} Achilles
Author: Iohan Pereirá
{verde}{italic}Blog{finale}: achilles0x01.github.io
Para sair: CTRL + C
""".format(**cores)
def banner():
return(exibir)
Repositorio Reptile.py