Last active
November 11, 2023 09:16
-
-
Save Revokee/9533538 to your computer and use it in GitHub Desktop.
EP1 - MAC 2166 - 2014
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"""Obs.: No comeco do EP, ele diz que a intencao eh voce aprender a usar numeros inteiros. Problema: | |
O tipo int em Python, por motivos que nao vou me extender, usa a quantidade de bits disponiveis no | |
processador, portanto, se voce rodar esse EP em um computador de 32 bits, o exemplo 3 do EP ira dar | |
errado, por causa de Overflow na quantidade de bits. Entretanto, em uma arquitetura 64 bits, voce | |
nao deve ter nenhum problema. Mas vamos falar a verdade, esses caras do IME ou sao muito sadicos por | |
nao alertar voces bixos, ou muito burros mesmo. Quem quiser ler os motivos de o Python unificar o | |
tipo int e long veja nesse link: | |
http://www.devx.com/opensource/Article/41398 | |
""" | |
#EP1: O código de Vigenère | |
print("O código de Vigenère\n\n") | |
#Como inicio do EP, vamos ler um numero digitado pelo usuario do programa. | |
number = int(input("Digite um número ......: ")) | |
#Voce pode descomentar a linha abaixo para verificar que o numero foi digitado corretamente | |
#print ("Número digitado: %s \n" %(number)) | |
#Vamos agora verificar qual a chave que o usuario deseja. | |
key = int(input("Digite o valor da chave: ")) | |
#Voce pode descomentar a linha abaixo para verificar que a chave foi digitada corretamente | |
#print ("Chave digitada: %s \n" %(key)) | |
#Vamos iniciar o algoritmo do EP agora. | |
#A formula da chave, como dito no enunciado eh Ci = (Ni + K)%10, vou declarar uma variavel cIndex, que sera utilizada diversas vezes | |
cIndex = 0 | |
#Vamos declarar o numero final a ser mostrado ao usuario, que nada mais eh que nosso numero cifrado | |
finalNumber = 0 | |
#Vou usar uma variavel de controle k, para saber em que passo estamos do loop | |
k = 1 | |
#Vou usar uma variavel de controle i, para me manter dentro do loop enquanto meu numero nao acabar | |
i = 1 | |
#Antes de iniciar nosso loop, um ultimo passo, salvar nossa chave primaria! | |
primaryKey = key | |
while i == 1: | |
#Vamos pegar o ultimo digito do numero, este eh nosso Ni | |
lastDigit = (number% 10) | |
#Vamos pegar tambem o ultimo numero da nossa chave | |
lastKey = (key%10) | |
#Voce pode usar a linha abaixo para debuggar o prorama, ou para aprender! | |
#print("\n Chave: ",key,"\n Ultimo Digito da Chave: ", lastKey) | |
#Vamos calcular agora o indice do numero | |
cIndex = (lastDigit + lastKey)%10 | |
#E formar nosso numero final | |
finalNumber = finalNumber + (cIndex*k) | |
#Voce pode usar a linha abaixo para debuggar o prorama, ou para aprender! | |
#print("\n Estamos formando o numero final:" ,finalNumber) | |
#Vamos crescer em 10 nossa variavel de controle, ou seja, andamos um digito na nossa chave final | |
k = k*10 | |
#Vamos verificar se estamos no ultimo digito da nossa chave, se estivermos, vamos ter que comecar tudo novamente | |
if lastKey == key: | |
key = primaryKey | |
else: | |
#Nao estamos no ultimo digito de nossa chave, portanto vamos apenas "descascar" | |
#Python, por padrao, ao fazer uma divisao, retorna um float, vamos transformar em int novamente | |
key = int((key/10)) | |
#Antes de "descascar" nosso numero, vamos verificar se tambem nao estamos no ultimo digito | |
#Voce pode usar a linha abaixo para debuggar o prorama, ou para aprender! | |
#print("\n Numero: ", number ,"\nUltimo Digito do Numero: ", lastDigit) | |
if lastDigit == number: | |
#Se entramos neste loop, estamos no ultimo numero, vamos calcular a chave dele e sair do loop | |
i = 0 | |
else: | |
#Nao estamos no ultimo digito! Vamos "descascar" e continuar nosso programa | |
#Python, por padrao, ao fazer uma divisao, retorna um float, vamos transformar em int novamente | |
number = int((number/10)) | |
#Recomecando o while. Va la pra cima! Hehehe | |
#Voila, nosso numero final | |
print("O valor cifrado é : %s \n:" %(finalNumber)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Dicas para este EP: https://drive.google.com/file/d/0BwH2jng0_Z6YNzM1MklobU5uN2M/edit?usp=sharing