@microwither: Mainly because any mono-alphabetic substitution cipher is vulnerable to letter frequency analysis.
I love how you actually made your own NN instead of just using a module. However, it's limited in the fact that there's so much repetitive code that can be abstracted to make the make the entire thing cleaner.
Also, for some season, it doesn't work right now! No worries about that though.
Have you tried using "ord()-97" to get the numerical value of a letter (eliminates the fact that punctuation is not allowed as well), it seems a lot better than what you have right now!