Quantcast
Channel: User raptortech97 - Code Review Stack Exchange
Viewing all articles
Browse latest Browse all 22

Answer by raptortech97 for Defining functions in Vigenere cipher

$
0
0

I think you're making this a lot more complicated than it needs to be. Forgive my rusty python, but you should be able to do something like

def viginere_encrypt(message, key):    length = len(message)    mnum = [0]*length    for i in range(0, length):        mnum[i] = letter_to_number(message[i])    knum = [0]*len(key)    for i in range(0, len(key)):        knum[i] = letter_to_number(key[i]    result = [0]*length    for i in range(0, length):        result[i] = number_to_letter(mnum[i] + knum[i % len(key])    return resultdef letter_to_num(letter):    return ord(letter) - ord("a")def number_to_letter(number):    return chr(number%alpha + ord("a"))

Using list comprehensions, this can be shortened to

def viginere_encrypt(message, key):    mnum = [letter_to_number(x) for x in message]    knum = [letter_to_number(x) for x in key]    return [number_to_letter(mnum[i] + knum[i%len(key)])for i in range(0, len(message)]

or even further to

def viginere_cipher(message, key):    return [number_to_letter(letter_to_number(message[i]) + letter_to_number(key[i % len(key)])) for i in range(0, len(message)])

though that's probably too mushed together by now.

Also, I don't know python too well; there's probably a better way to convert between "a-z" and 0-25.

Anyways, functions are a Very Good Idea. Output can then be separated from business logic, so if, say, you need to use the cipher elsewhere in your code, you're not tied to the terminal. It also allows for much easier testing.


Viewing all articles
Browse latest Browse all 22

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>