Caesar cifrado escrito en Python -- python campo con python-3.x campo con caesar-cipher camp codereview Relacionados El problema

Caesar Cipher written in Python


2
vote

problema

Español

He escrito un simple Caesar cifrado en Python en mis esfuerzos por aprender un idioma que no es C. Funciona mucho como cualquier otra implementación de César y toma varios argumentos de línea de comandos para especificar opciones, como el espaciado de la salida, ya sea para cifrar o descifrar la entrada, y si desea intentar o no para lograr brutar el cifrado. < / p>

Este es mi primer programa de Python, así que estoy buscando principalmente aprender algunas mejores prácticas para el idioma, así como para eliminar cualquier ineficiencia o redundancias en mi código.

¡Gracias!

  BigDecimal orderPrice = order.getSide() == Side.ASK ? calcAskPrice(order) : calcBidPrice(order) 4  

Original en ingles

I have written a simple Caesar Cipher in Python in my efforts to learn a language that isn't C. It works much like any other Caesar implementation and takes various command line arguments to specify options such as the spacing of the output, whether to encrypt or decrypt the input, and whether or not to try and bruteforce the cipher.

This is my first ever Python program so I'm primarily looking to learn some best practices for the language as well as remove any inefficiencies or redundancies in my code.

Thanks!

import argparse import re  def caesar(string, shift):     output = ''     for char in string:         if char.isspace():             output += ' '         else:             output += chr(((ord(char) - 65 + shift) % 26) + 65)     return output  def main():     parser = argparse.ArgumentParser(description = "Encrypt or decrpyt a string using the Caesar Cipher")      parser.add_argument("--bruteforce", "--brute", "-b", help = "bruteforce mode", action = "store_true")     parser.add_argument("--encrypt", "--enc", "-e", help = "encryption mode (default)", action = "store_true")     parser.add_argument("--decrpyt", "--dec", "-d", help = "decryption mode", action = "store_true")     parser.add_argument("--no-spacing", "--no-space", "-n", help = "no spacing in output (default)", action = "store_true")     parser.add_argument("--preserve-spacing", "--preserve", "-p", help = "use same spacing as original string", action = "store_true")     parser.add_argument("--shift", "-s", help = "value for the Caesar shift", type = int, choices = range(1, 26))     parser.add_argument("--spacing", "-x", help = "specify the spacing in output", type = int)      args = parser.parse_args()      if args.bruteforce:         bruteforce = True     else:         bruteforce = False         shift = args.shift      if args.decrpyt:         shift = -shift      if args.preserve_spacing:          regex = re.compile('[^A-Z\s]')     else:         regex = re.compile('[^A-Z]')      string = regex.sub('', input().upper())      if args.spacing:         string = ' '.join([string[i:i + args.spacing] for i in range(0, len(string), args.spacing)])      if bruteforce:         for shift in range(1, 26):             print("%d: %s" %(shift, caesar(string, -shift)))     else:         print(caesar(string, shift))  if __name__ == "__main__":     main() 
        

Lista de respuestas

2
 
vote

La función César

primero El parámetro Exception7 debe ser renombrado ya que tiene el mismo nombre que el módulo estándar Exception8 . Seguro que no lo usas, pero es un mal hábito entrar y puede resultar en problemas más adelante. Independientemente, ya que estamos tratando con criptografía y enviando mensajes, y tales, ¿no sería una mejor palabra Exception9 ?

Tampoco hay documentación. Exception0 no es un nombre descriptivo si aún no sabe lo que es un cifrado de Caesar. Debe tener una Docstring que describe que este cifrado Caesar y al menos Enlace a Wikipedia para obtener una descripción del cifrado César si no lo describe usted mismo.

El Exception1 FUNCIÓN

Exception2

  Exception3  

El indicador Exception6655443324 indica que Exception5 es 99887776655443326 Cuando se especifica el indicador y Exception7 cuando no está especificado. Olvídate del 99887766555443328 variable y solo se preocupa con Exception9 .

if (values == null || procents == null) throw new Exception("Input parameters are null"); 0

También hay una acción 998877666554433331 que tiene los parámetros opcionales 1 if (values == null || procents == null) throw new Exception("Input parameters are null"); 2 y if (values == null || procents == null) throw new Exception("Input parameters are null"); 33 . Por lo tanto, puede tener if (values == null || procents == null) throw new Exception("Input parameters are null"); 4 y if (values == null || procents == null) throw new Exception("Input parameters are null"); 5 . Esto elimina la necesidad de:

      if (values == null || procents == null)         throw new Exception("Input parameters are null"); 6  

1 El parámetro es un argumento paradójicamente opcional que se requiere

 

The Caesar function

First the parameter string should be renamed as it has the same name as the standard module string. Sure you don't use it, but it is a bad habit to get into and can result in problems later on. Regardless, since we're dealing with cryptography and sending messages and such, wouldn't a better word be message?

There is also no documentation. caesar is not a descriptive name if you don't already know what a Caesar cipher is. You should have a docstring that describes that this a Caesar cipher and at least link to Wikipedia for a description of the Caesar cipher if not describe it yourself.

The main function

store_true

if args.bruteforce:     bruteforce = True else:     bruteforce = False     shift = args.shift 

The 'store_true' flag indicates that args.bruteforce is True when the flag is specified and False when it is not specified. Forget the bruteforce variable and just concern yourself with args.bruteforce.

store_const

There is also a store_const action that has the optional1 parameters const and default. Thus you can have const=re.compile('[^A-Z\s]') and default=re.compile('[^A-Z]'). This removes the need for:

if args.preserve_spacing:      regex = re.compile('[^A-Z\s]') else:     regex = re.compile('[^A-Z]') 

1 The const parameter is a paradoxically optional argument that is required

 
 
   
   

Relacionados problema

8  Caesar cifrado en Ruby  ( Caesar cipher in ruby ) 
Debo implementar un simple Caesar Cipher clase. El inicializador toma dos parámetros: el número de posiciones para cambiar el alfabeto (entero) y el alfabet...

4  Implementación, cifrado CEASER en C ++  ( Implementation ceaser cipher in c ) 
Estoy trabajando en aprender C ++ que viene de Python. Estoy haciendo algunos proyectos para ayudarme a comprender el idioma un poco más. Mis funciones de c...

11  Implementación de ROT47  ( Rot47 implementation ) 
ROT13 ("Girar por 13 lugares", a veces la podrida con guión-13) es un simple cifrado de sustitución de letras que reemplaza una letra con la letra 13 letras ...

1  Envolviendo un código de caracteres para un cifrado Caesar  ( Wrapping a character code for a caesar cipher ) 
Estoy escribiendo un cifrado César. Para tratar con los caracteres que se desplazan hacia fuera de la gama ASCII imprimible "Normal" ( [32 126] ), los estoy t...

2  Aplicación de acortamiento de enlaces: devuelva la cadena "siguiente"  ( Link shortener application return the following string ) 
Estoy trabajando en el desarrollo de una solicitud para acortar enlaces. Parte de eso requiere que pueda obtener la cadena "siguiente" basada en un rangos de ...

-4  Caesar cifrado en C. Mi texto simple no cambiará y el resultado de texto de cifrado es idéntico a él [cerrado]  ( Caesar cipher in c my plaintext wont shift and the cipher text outcome is iden ) 
cerrado. Esta pregunta es off-topic . Actualmente no está aceptando respuestas. ¿Quieres ...

7  Caesar Cypher en Python  ( Caesar cypher in python ) 
¿Qué piensas de este código? Estoy aprendiendo Python e hice esta herramienta para codificar un texto simple o decodificarlo! inp = input('Input the text y...

23  Lectura y escritura de datos para cifrado Caesar  ( Reading and writing data for caesar cipher ) 
Estoy luchando con comentarios y denominación variable. Mi maestra dice que mis comentarios deben ser más explicativos y explícitos. Él dice que mis nombres d...

5  Cracking Vigenere y Caesar Texto cifrado en Python  ( Cracking vigenere and caesar ciphered text in python ) 
He escrito un par de programas en Python que se puede usar para cifrar, descifrar y crack Caesar y Vigenere cifró texto. Soy bastante nuevo en Python y escrib...

1  Rotas y cifras polyalfabéticas en Python 2.7  ( Rot and polyalphabetic ciphers in python 2 7 ) 
Estoy escribiendo una "biblioteca criptografía" y agregando gradualmente AlgortiHMS. Ahora es solo la antigua criptografía, pero voy a expandir la bibliotec...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos