Cracking Codes with Python: An Introduction to Building and Breaking Ciphers has two goals. The book aims to teach the novice how to program in Python while also providing a good foundation in ciphers, encryption, and cryptography.
There is nothing in the book that will help the reader replace the excellent open source implementations currently available. That is not the goal. Rather, the reader has a chance to learn the foundations underlying classic and modern attempts to secure communication between parties.
The classics are all here, from simple reverse cipher and transposition all the way through to one-time pad ciphers and public key ciphers. The book starts simply from both a programming and a code perspective, gradually adding complexity while explaining first how a cipher works, then how it is coded, then what its weaknesses are and why you would want to move on to something better.
If learning Python while studying basic cryptography is of interest, you will find this book useful and well worth your time.