{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "7a7891be",
   "metadata": {},
   "source": [
    "# Lab 14: Ciphers\n",
    "In this lab, you will write a program that implements a cipher, which allows you to encrypt and decrypt secret messages. You'll get practice with string processing tasks like iterating through strings and calling new string methods. Create a Python file for this lab called `caesarcipher.py`.\n",
    "\n",
    "## Encryption and the Caesar cipher\n",
    "\n",
    "Encryption is the proceses of transforming a message into a new form that obscures its meaning. Encryption is important in many computer applications where sensitive information is involved - e.g., accessing your bank account over the Internet, databases that store customer Social Seurity Numbers, etc. A message that has not been encrypted is called _plaintext_ whereas a message that has been encrypted is called _ciphertext_.\n",
    "\n",
    "The Caesar cipher is an early encryption algorithm that was famously used by Julius Caesar. It works by substituting every letter with the letter that is three positions before it in the alphabet. For instance, the plaintext message\n",
    "\n",
    "`\"i came i saw i conquered\"`\n",
    "\n",
    "would be encrypted as\n",
    "\n",
    "`\"f zxjb f pxt f zlknrboba\"`\n",
    "\n",
    "Note that it wraps around the alphabet, so `\"c\"` becomes `\"z\"` and `\"a\"` becomes `\"x\"`. The full substitution table is as follows:\n",
    "\n",
    "<table>\n",
    "<tr> <td>plaintext character </td><td> a </td><td> b </td><td> c </td><td> d </td><td> e </td><td> f </td><td> g </td><td> h </td><td> i </td><td> j </td><td> k </td><td> l </td><td> m </td><td> n </td><td> o </td><td> p </td><td> q </td><td> r </td><td> s </td><td> t </td><td> u </td><td> v </td><td> w </td><td> x </td><td> y </td><td> z </td><td></td></tr>\n",
    "<tr><td>ciphertext character </td><td> x </td><td> y </td><td> z </td><td> a </td><td> b </td><td> c </td><td> d </td><td> e </td><td> f </td><td> g </td><td> h </td><td> i </td><td> j </td><td> k </td><td> l </td><td> m </td><td> n </td><td> o </td><td> p </td><td> q </td><td> r </td><td> s </td><td> t </td><td> u </td><td> v </td><td> w </td><td></td></tr>\n",
    "    </table>\n",
    "\n",
    "To decrypt the message, you would reverse this process, and substitute each ciphertext character with the character that is three positions later in the alphabet.\n",
    "\n",
    "In order for the encrypted message to be private, only the intended receiver should know the secret of how it was encrypted."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6f592a94",
   "metadata": {},
   "source": [
    "## Unicode character codes\n",
    "\n",
    "In the lecture, you saw that each character in a string is represented by a numerical code. Modern character codes are defined by the Unicode standard. You can find a list of a whole bunch of characters and their equivalen codes here: https://en.wikipedia.org/wiki/List_of_Unicode_characters (see the Decimal column in these tables to find the number). (Note that this is similar to encyption - there is a number that represents every letter; however, it is not actually encrpytion because the table of substitutions is public knowledge.)\n",
    "\n",
    "Python provides a built-in function called `ord()` (short for \"ordinal\"), which will tell you the Unicode number for any given character."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "id": "a1ac2a4f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "33"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ord(\"!\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9945a8a4",
   "metadata": {},
   "source": [
    "Similarly, the `chr()` function will let you do the reverse - look up the character for a Unicode number:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "08519949",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'x'"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "chr(120)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e8bd0e35",
   "metadata": {},
   "source": [
    "__Exercise 1:__ Try `ord()` and `chr()` with several different characters (e.g., \"a\", \"b\", \"c\", \"q\", \"A\", \"B\", \"C\", \"Q\", \"?\", \":\", \" \", etc.) and several different numbers (97, 98, 99, 120, 65, 66, 67, 88, 33, etc.). Convince yourself that `ord()` and `chr()` really do the inverse operation (looking up the code for a character and a character for a code). Answer the following in your notes.\n",
    "\n",
    "* Are all of the lowercase letters in a row?\n",
    "* Are all of the uppercase letters in a row?\n",
    "* What is really happening when you do comparisons like `\"a\" < \"b\"` and `\"a\" < \"B\"`?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "56adeafc",
   "metadata": {},
   "source": [
    "## Using `ord()` and `char()` to implement the Caesar cipher\n",
    "\n",
    "To implement the Caesar cipher, we need to be able to convert a plaintext character into a unicode character. One way we might do that in several steps is like this:\n",
    "\n",
    "\n",
    "Let's say we have a plaintext character, `\"i\"`. We start by getting its unicode number like this:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "e7901b21",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "105\n"
     ]
    }
   ],
   "source": [
    "plaintext_character = \"i\"\n",
    "plaintext_unicode = ord(plaintext_character)\n",
    "print(plaintext_unicode)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1681864e",
   "metadata": {},
   "source": [
    "We can then figure out what position in the actual alphabet this number is by subtracting the Unicode number for `\"a\"` since `\"a\"` is first, and they're all in order."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "b08fd254",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "8\n"
     ]
    }
   ],
   "source": [
    "plaintext_alphabet_position = plaintext_unicode - ord(\"a\")\n",
    "print(plaintext_alphabet_position)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0404278c",
   "metadata": {},
   "source": [
    "Now we are going to convert this into a ciphertext character by subtracting 3. We'll also take the result modulo 26 - this will make sure that if we have `\"a\"`, `\"b\"`, or `\"c\"`, it will wrap around to the other side of the alphabet instead of giving us a negative number (i.e., because `-1 % 26` is 25, `-2 % 26` is 24, and `-3 % 26` is 23)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "id": "8e474467",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5\n"
     ]
    }
   ],
   "source": [
    "ciphertext_alphabet_position = (plaintext_alphabet_position - 3) % 26\n",
    "print(ciphertext_alphabet_position)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9ea1c531",
   "metadata": {},
   "source": [
    "We then add the Unicode number for `\"a\"` back on to get an appropriate Unicode number for our ciphertext character."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "id": "733ed30d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "102\n"
     ]
    }
   ],
   "source": [
    "ciphertext_unicode = ciphertext_alphabet_position + ord(\"a\")\n",
    "print(ciphertext_unicode)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8e507aa7",
   "metadata": {},
   "source": [
    "And, then we convert that into an actual character with `chr()`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "id": "27ec7561",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "f\n"
     ]
    }
   ],
   "source": [
    "ciphertext_character = chr(ciphertext_unicode)\n",
    "print(ciphertext_character)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "91f5a0a0",
   "metadata": {},
   "source": [
    "Putting it all together..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "id": "607ab37b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "f\n"
     ]
    }
   ],
   "source": [
    "plaintext_character = \"i\"\n",
    "plaintext_unicode = ord(plaintext_character)\n",
    "plaintext_alphabet_position = plaintext_unicode - ord(\"a\")\n",
    "ciphertext_alphabet_position = (plaintext_alphabet_position - 3) % 26\n",
    "ciphertext_unicode = ciphertext_alphabet_position + ord(\"a\")\n",
    "ciphertext_character = chr(ciphertext_unicode)\n",
    "print(ciphertext_character)"
   ]
  },
  {
   "attachments": {
    "encrypt_letter.png": {
     "image/png": "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AxUQFKPlHoH33ntPTjrpJK1Y37595f7778+Kkk2bNpXFixfrvEvSQEUtf9T0WYEdl+kff/yhu7iwdE/t2rVl2bJlUrZs2bhY/xwWl4E68sY2smH9OqlabVf5bMicfzKM2wuaf5AWFETfd999ctNNN+lcHnnkEbnmmmvicszvQxqo/L5/Ba19rjxgaaCyVw2ff/55ueKKK7QCQVrRQQ0EBIZpQQUlEDT/oAYKTiH16tXT2e+///4yZ05q4xhUx1yKF8pAzZ+4SBofuZ+U3ymzJTGynT6XwFOX6ARooKK1IHOFX5SacPTRR8tnn32mRcycOVPatGmTVlxQAwEh+WCgoOcxxxwjn3zyCXZl+vTp2ptRH5SCf6EM1IAGg6RchfLS9rQ20uHSg6ROi1qhEGQ7fShlA0RGpRg5cqTMnj1bZs2apb1oDjjgAOnYsaPceOONUqVKlQQpY8eOlTfe2OEp1Lt3b90t8cwzz8ikSZNkypQpeukRyBg4cKAceOCBCenjT2Dxx5dfflmvTPz111/rdbb23XdfadGihVxyySVy2mmnSbly5eKTydKlS+W2227T57EO15VXXql/6A888ICu5PBS22uvvbQO1157rXTu3FnQhfDll1/qNN27d5fDDz88Qa5/Al0tAwYM0IeQM2TIEL0PL7cJEybofTBavXq1vPDCC/oHhlWuDz74YD3QjW6L3Xff3Rent1988YXApdYPP/74o8DdFqFhw4aau3/N3958883SvHlz/7BYtpm2oMLWn6jlj5o+Hl5Y/e30mdQ/Oz320b236667CrpVMfaCNebgfZcuuDJQD40bIit+27Equ51f1cq7yi1nDbRPxewHzT9oCwrCb7/9doGTBALGYdGSLDUBq5njT93kIv9urv/fXv86A8zfg52He5Ofm+5t3vBHkWkhP9vpg5QxSBz1w/D69euHz5Sk/FOfEfDUG10Cl3//+98mzbBhw7wmTZqYY1uecln21IBvQnpfv02bNnmqIiZNa8u56KKLkspQDyuT9oILLvAmTpxoju302N955521jIcfftjEOf3005PK9fVTBtbEvfzyy01cZZTNeeyrBSrNsZ1v48aNvYULF5p0kPvss88mjWuni99XrYQYGb5+Lre4136+QeRmWn+ilj9qer9smervp8c2k/pnp8e+XWePPfbYQPe533O9vOaX1dJ/Jw48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"
    }
   },
   "cell_type": "markdown",
   "id": "475939bb",
   "metadata": {},
   "source": [
    "__Exercise 2:__ Write a function that does all this called `encrypt_letter()` that takes a string with one letter as an argument and returns the equivalent ciphertext character.\n",
    "\n",
    "\n",
    "<p>\n",
    "<div>\n",
    "<img src=\"attachment:encrypt_letter.png\" width=\"300\"/>\n",
    "</div>\n",
    "</p>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "28304014",
   "metadata": {},
   "source": [
    "## Encrypting a whole message\n",
    "\n",
    "Recall that you can loop through a string just like you can a list."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "id": "0f14f562",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "i\n",
      " \n",
      "c\n",
      "a\n",
      "m\n",
      "e\n",
      " \n",
      "i\n",
      " \n",
      "s\n",
      "a\n",
      "w\n",
      " \n",
      "i\n",
      " \n",
      "c\n",
      "o\n",
      "n\n",
      "q\n",
      "u\n",
      "e\n",
      "r\n",
      "e\n",
      "d\n"
     ]
    }
   ],
   "source": [
    "my_string = \"icameisawiconquered\"\n",
    "\n",
    "counter = 0\n",
    "while counter < len(my_string):\n",
    "    print(my_string[counter])\n",
    "    counter += 1"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5dea0240",
   "metadata": {},
   "source": [
    "__Exercise 3:__ Write a new function that encrypts a whole message by doing the following:\n",
    "* take the message to be encrypted as an argument \n",
    "* loop through each letter in the message\n",
    "* use the function you wrote above to convert that letter to its ciphertext equivalent\n",
    "* add the ciphertext letter on to an accumulator variable\n",
    "\n",
    "Note that string accumulator variables work just like numeric ones, except the string grows in size. E.g., "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "f2991fdc",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "hello\n"
     ]
    }
   ],
   "source": [
    "str_accum = \"\"\n",
    "str_accum += \"h\"\n",
    "str_accum += \"e\"\n",
    "str_accum += \"l\"\n",
    "str_accum += \"l\"\n",
    "str_accum += \"o\"\n",
    "print(str_accum)"
   ]
  },
  {
   "attachments": {
    "encrypt_message.png": {
     "image/png": "iVBORw0KGgoAAAANSUhEUgAAAVcAAAAyCAYAAADof5hFAAAKumlDQ1BJQ0MgUHJvZmlsZQAASImVlwdQk9kWgO//pzdaQpUSekd6lRJ6AKVXGyEJSSghJgQVOyKuwFpQEUFF0aWIgqtSZK2IYlsUFEFFF2RRUdbFgg2V9wOPsPvevPfmnZkz95uTc0+5c+8/JwBQ0CyRKA1WACBdmCmOCPCmx8Un0HFDAAZkQAT6wJLFlogYYWEhAJGZ9e/y4T6AJte7lpOx/v33/yqKHK6EDQAUhnASR8JOR/g0oi/ZInEmAKiDiF1/eaZoktsQpomRAhHunWTeNI9MctIUo8GUT1SED8I0APBkFkvMA4BMR+z0LDYPiUP2QthayBEIERYh7MHmszgIn0DYIj09Y5L7EDZJ+ksc3t9iJslislg8GU/3MiV4X4FElMZa+X8ex/+W9DTpTA4jRMl8cWAEsiohZ9abmhEsY2HSgtAZFnCm/KeYLw2MnmG2xCdhhjks32DZ3rQFITOcLPBnyuJkMqNmmCvxi5xhcUaELFey2IcxwyzxbF5parTMzucyZfGz+VGxM5wliFkww5LUyOBZHx+ZXSyNkNXPFQZ4z+b1l/WeLvlLvwKmbG8mPypQ1jtrtn6ukDEbUxInq43D9fWb9YmW+YsyvWW5RGlhMn9uWoDMLsmKlO3NRC7k7N4w2RmmsILCZhgEgjBAR9QW2ANrkAVYAGRyV2RONuKTIVopFvD4mXQG8sK4dKaQbWVBt7W2tQFg8r1OX4d3vVPvEFLBz9oEiwFwQO4tZDtrYysCcEoOADnmrM2MD4BqPQCXT7Kl4qxp29RbwiBfAXlAA+pAG/kamABLpD5H4Aa8gB8IAqEgCsSDJYAN+CAdiMFysBpsAHmgAGwHu0EpKAeHQTU4Dk6CJnAWXAJXwU1wB3SDR6AfDIFXYBR8AOMQBOEgCkSF1CEdyBAyh2whZ8gD8oNCoAgoHkqEeJAQkkKroY1QAVQElUKHoBroZ+gMdAm6DnVCD6ABaBh6C32BUTAZpsFasBE8F3aGGXAwHAUvhnnwMjgbzoW3wiVwBXwMboQvwTfhbrgffgWPoQCKhFJB6aIsUc4oH1QoKgGVjBKj1qLyUcWoClQdqgXVjrqL6keNoD6jsWgqmo62RLuhA9HRaDZ6GXotuhBdiq5GN6Lb0HfRA+hR9HcMBaOJMce4YpiYOAwPsxyThynGVGIaMFcw3ZghzAcsFquCNcY6YQOx8dgU7CpsIXY/th57EduJHcSO4XA4dZw5zh0XimPhMnF5uL24Y7gLuC7cEO4TnoTXwdvi/fEJeCE+B1+MP4o/j+/CP8ePExQIhgRXQiiBQ1hJ2EY4Qmgh3CYMEcaJikRjojsxiphC3EAsIdYRrxD7iO9IJJIeyYUUThKQ1pNKSCdI10gDpM9kJbIZ2Ye8iCwlbyVXkS+SH5DfUSgUI4oXJYGSSdlKqaFcpjyhfJKjylnJMeU4cuvkyuQa5brkXssT5A3lGfJL5LPli+VPyd+WH1EgKBgp+CiwFNYqlCmcUehRGFOkKtoohiqmKxYqHlW8rvhCCadkpOSnxFHKVTqsdFlpkIqi6lN9qGzqRuoR6hXqEA1LM6YxaSm0AtpxWgdtVFlJ2V45RnmFcpnyOeV+FZSKkQpTJU1lm8pJlfsqX1S1VBmqXNUtqnWqXaof1eaoealx1fLV6tW61b6o09X91FPVd6g3qT/WQGuYaYRrLNc4oHFFY2QObY7bHPac/Dkn5zzUhDXNNCM0V2ke1rylOaalrRWgJdLaq3VZa0RbRdtLO0V7l/Z57WEdqo6HjkBnl84FnZd0ZTqDnkYvobfRR3U1dQN1pbqHdDt0x/WM9aL1cvTq9R7rE/Wd9ZP1d+m36o8a6BjMN1htUGvw0JBg6GzIN9xj2G740cjYKNZos1GT0QtjNWOmcbZxrXGfCcXE02SZSYXJPVOsqbNpqul+0ztmsJmDGd+szOy2OWzuaC4w32/eaYGxcLEQWlRY9FiSLRmWWZa1lgNWKlYhVjlWTVav5xrMTZi7Y2773O/WDtZp1kesH9ko2QTZ5Ni02Ly1NbNl25bZ3rOj2PnbrbNrtntjb27PtT9g3+tAdZjvsNmh1eGbo5Oj2LHOcdjJwCnRaZ9TjzPNOcy50PmaC8bF22Wdy1mXz66OrpmuJ13/dLN0S3U76vZinvE87rwj8wbd9dxZ7ofc+z3oHokeBz36PXU9WZ4Vnk+99L04XpVezxmmjBTGMcZrb2tvsXeD90cfV581Phd9Ub4Bvvm+HX5KftF+pX5P/PX8ef61/qMBDgGrAi4GYgKDA3cE9jC1mGxmDXM0yCloTVBbMDk4Mrg0+GmIWYg4pGU+PD9o/s75fQsMFwgXNIWCUGboztDHYcZhy8J+CceGh4WXhT+LsIlYHdEeSY1cGnk08kOUd9S2qEfRJtHS6NYY+ZhFMTUxH2N9Y4ti++Pmxq2JuxmvES+Ib07AJcQkVCaMLfRbuHvh0CKHRXmL7i82Xrxi8fUlGkvSlpxbKr+UtfRUIiYxNvFo4ldWKKuCNZbETNqXNMr2Ye9hv+J4cXZxhrnu3CLu82T35KLkFzx33k7eMN+TX8wfEfgISgVvUgJTylM+poamVqVOpMWm1afj0xPTzwiVhKnCtgztjBUZnSJzUZ6of5nrst3LRsXB4koJJFksac6kIYPRLamJdJN0IMsjqyzr0/KY5adWKK4Qrri10mzllpXPs/2zf1qFXsVe1bpad/WG1QNrGGsOrYXWJq1tXae/Lnfd0PqA9dUbiBtSN/yaY51TlPN+Y+zGllyt3PW5g5sCNtXmyeWJ83o2u20u/wH9g+CHji12W/Zu+Z7Pyb9RYF1QXPC1kF1440ebH0t+nNiavLVjm+O2A9ux24Xb7+/w3FFdpFiUXTS4c/7Oxl30Xfm73u9euvt6sX1x+R7iHume/pKQkua9Bnu37/1ayi/tLvMuq9+nuW/Lvo/7Ofu7DngdqCvXKi8o/3JQcLD3UMChxgqjiuLD2MNZh58diTnS/pPzTzWVGpUFld+qhFX91RHVbTVONTVHNY9uq4VrpbXDxxYdu3Pc93hznWXdoXqV+oIT4IT0xMufE3++fzL4ZOsp51N1pw1P72ugNuQ3Qo0rG0eb+E39zfHNnWeCzrS2uLU0/GL1S9VZ3bNl55TPbTtPPJ97fuJC9oWxi6KLI5d4lwZbl7Y+uhx3+V5beFvHleAr1676X73czmi/cM392tnrrtfP3HC+0XTT8WbjLYdbDb86/NrQ4djReNvpdvMdlzstnfM6z3d5dl2663v36j3mvZvdC7o770ff7+1Z1NPfy+l98SDtwZuHWQ/HH63vw/TlP1Z4XPxE80nFb6a/1fc79p8b8B249TTy6aNB9uCr3yW/fx3KfUZ5Vvxc53nNC9sXZ4f9h++8XPhy6JXo1fhI3h+Kf+x7bfL69J9ef94ajRsdeiN+M/G28J36u6r39u9bx8LGnnxI/zD+Mf+T+qfqz86f27/Efnk+vvwr7mvJN9NvLd+Dv/dNpE9MiFhi1tQogEIUTk4G4G0VAJR4AKh3ACAunJ6npwSa/g8wReA/8fTMPSWOAFStByAa0cnRqNwLAGOEacgahmiUF4Dt7GT6T5Ek29lOxyI1IaNJ8cTEO2R2xJkC8K1nYmK8aWLiWyVS7EMALn6YnuMnRW8UADvcJPWQKeBf5R828QwKij56TwAAAZxpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MzQzPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Ckj6aM8AAB1uSURBVHgB7V0HXBRHF//riYCi2FGM2AUrdgUs2GvUGFuMMSaxRNRYotHPjl1jxVhiJCqKvWPvPSp2RQUExB5RsYAUxf3mzbnLHVfhMLYZf3c7O6/Mm//uvX3zZnAzJCUlSRBFICAQEAgIBNIVgYzpqk0oEwgIBAQCAgGOgHCu4kZ4rwgEBgZi1rxZ79UG0blAILUIbNu2DZs3bzYqJpyrUXgE8V0j4OXlhaDgq1rd9Fo9AF/7duVtt6PvovacFlh4zFeLRz6pM6cl/APXyKcf3PF92/e++//gLogeg67cv4oyk2vh6oPrnKrv/hv210gtyefPn6NLly54/PixVrvmiXCummikYz0sLAwqlQp79+5NR62flqqdO3fi3LlzGOQ1UGtgx26exebQU7wtNjEWJ66dRujDMC0e+eR45GXcfXZfPv3gju/bvvfd/wd3QfQYFJMQg+DIYMQmxHKqvvsvJDJUS7J9+/awt7fHnDlztNo1TzJpnlA9PjoO1jlskCFDhpQkfm4pXa/ST7BRktTrhG/evPkER5c+Q5oyZQqaNWuGMi5l0qwwaWZkmmX/C8H3bd/77v+/wPh99GFlZYXevXtj+vTpGDp0KLJmzapjhk7kev6P01iYaw5OjDuEmLvPdQQspeso1NNAjmnWrFkoU6YMbGxsULlSZezbt0/h7NmzJwYOHAg65smTB56enjoR4o0bN9CmTRs4ODjwgderVw/Xrl1TdIwfPx4dO3aEv78/10/9NGnSBKdPn0bFihVx4sQJhZcqgwYNQuvWrXnb999/D5rOtmzZkuuuUKECDhw4wGkhISFcnmhU6AKQPvrcvXuXtxn7okjX1dUVderUQa5cuUB2lixZElWqVMHZs2e5qCl8iD5hwgS4ubkhc+bMcHJywsSJE5VuTdHXrFmDGjVqwM7ODjlz5kSDBg1w6dIlRZ6mRJ07d0b27Nnh7OyMSZMmoWbNmrh+XT2tMmUfKXr16hXHuFatWore1FQ857ZC+al1+cfv1Eod0dCoMDRb0B6q30pA1f8L1JzZRJn2rTqzDuWm1IFqQCGoBhWG++xmuHj3Mtex+9p+FJ9QE1VnNITq1yIYs3MS8o52hfMkd5y5dY7z0Pim7/dBIe8qUPVzRKmJ7thzXX39ZUOM2UfyY3dMhus0T6j6FoD18NLw3jlFFoUh+14lvYLLZA+sPrte4ZUrSW+S+JhkLIz1TzLG8El8nYj+64dxuwgjwu7SvStyV/jB3wt91w7hR9XgYqgxszEIN7mQfO/Vg6AaVgqOYytj8p6Z/DodD/+Hs3T374fBG0fI7Ih4HMnHdTryDG8zB1+6Lm0Wd4Hf6VUcf7oOdX2+NEv+edxztPP9nl/7fGMqYv25LYotqanUrl0bL1680PptaMrrONdsTvZ4/vwFDnkfwlynWVjXzB83tlzHmyR1BGYpXbNzQ3VyBIMHD+bOYdGiRcidJzd3ZE+fPuUi5Dh9fHwQGRnJnUh0dDR69eqlqKM8CDkHcpA9evTAihUrULBgQVy5knyD3L59GwEBAdz5uVZ05eF9pkyZULlyZTx8+BCLFy9W9D179gwLFizgTo8ayYH++eefoPbff/+dO4rmzZvjwYMHyJ8/P0aPHo2+ffty+W+//ZafUxs5KlOFxkJ2kkNzcXHB2LFj0b17d0hvJEydOpWLm8Jn1apVGDNmDJo2bQpKvP/vf/9j1zT5QWmKfuHCBZDTW758OWbOnMll6VzW4e3tjQ0bNuCnn35Chw4d+PhoYSomJsYs+4gpNDQUFNXTgyNl6eDaAv2rteXNOW1z4DuPdqhZtJoWW99aP2JYfS9cvR2MOynSAo9jnsBlSkPsCT+HIR7fYu0P8+CU0xGX7wVxHeduX0T94m5Y2+0P/NluHJ7GvUDl6S1AP7rol9G4eYc5ZmdPlHcoiglbZmGAx3dg/hDjd8/g8uQIh26YAM+iVbH422lwsMuJZvO64OlL9f1JTMbsW3FmDcZvnYnWZRphe5/lmNF0IO+bK2dfhuyLS4xjmEnYdTXZkckylDe8dvMaiuR24k3G+jeFz/Ct3vjjwN9oW8odk1v+isCHN1FpVitl2nz9YTgWHFiK8Me34dNqGB69fI6O/gNkUzAiYBwWHVmBTmXq4ruKLTFy6zRcjbiKJ2/xCXoYipBHEQp/3Ks4hEaGsOugvkfNwffWkzsIuHwIP6waimqFymJuB29kyqjiOk3Jd1/dH5su7MUvHp3xnWtzzNr3l2ILVfTdfx6ublo8dCLfu1evaq8ZKIy0zzXlJy76pXR+UaC03M1XGo9R/DMLU6X9g3ZyXkP0o6P3m0VP2Z/meVxcnGRtbS2xnIZiF/vRSiy/Ic2fP5+31a1bl/MQL8muXLmS5uBSREQEP2eOjJ8fPXpU0UF8LFpSzplj4Dzr169X2mQ7hg0bJrFIVmLOk9MWLlzIeZlT5+fVq1eXWD5VevnyJT9nzojTmfNTdAUHB/O2HTt2KG2yfmNH5vi4XHx8vMSmzdwO4h8+fLhUrVo1yRx82INJYtMWiT1V9fZtip7Svl27dnGb9u9XX18WrUo//vijort///6cfurUKbPsI/1r167lMiznquhJ2a855+hbQBq/c5qWjhFbxknokUs6EnpMq13z+mvq3nFlD+ffe+2g5H96Da/HJ8ZLE3b+LpF+4v1t4yipzKRaUlxCHG9r/WdnRXdMXIyEAYWkuYcWKm2yfn32DVg3VIKXg/QiTv/1kWXlo6Z9Pf37S05jq/B+tl7aIQ3eMILX5x1eJKF3Pik2PlbLBn39m8IHvxSUas9uoejZdCGAY/LX8aW8rfr0RhwDwoJsXHFqNaeHR93k5+j/hVTPp5UiL/e3+eI2Rb7Fgo4K/fLdIC6/M2iv2fh29evFZdae3ajoIVtMXZ/omGgJvfJI3/v9rMj1WPkL13Uy/LTSJmNv6ki+is1q9crpRK7kdTNnt0aFnyqj87Fu6HnJC/mc8iKG/Ts/8zx3yoboZ8YFmkXnTAa+aCEoISEB69atA0WS9KHpKUWJFGnKhSIpmvJSKVeuHD9SREslKCgIOXLk4NErb3j7lTGj9nBpwalRo0aaLLzOHAeYc+M2UMOyZctAaYWiRYsqvJUqVQIDlp/L6Yvw8HCFbkmF7KKcDuVxsmXLxlXZ2tryKYg5+LRr145H06VKlQKNhaJMmmrJxRSdpvetWrXiKRWyhSJgKnQNKOJnDw6eBpD1MacvV2GOfcRM15RKbGwsP6bn10UWxSGrHWoWqa6lVr7+1/4NRpP5X6tTBl750HxOJ873LO6Zmp/dc1YqK9hZZwGsbXmbbWZbPGMLHjcesWvM7s8tZ3ZB5eXAP3YDitBAsPHSDrW8ie+OVVhUnpSEbGMqo4tfT6w7v0nr+hizr04JN9y6fxMx8TGYdWghpu9awKfVJyPOwLUwS6NZ2ZjoHTCGz6OYx0BcHGoXTcbOo2hNrjNMI9r0KFYRmTOpf3/lC5bldEo1UFSMly/hXriqYkfKWYdC0FNJFb7sOjVxaaClxZR8xBOWo2czphpFqihy7kWS71+l0YwKpbYSExOVezmliM6CFjEkJSYhbFswgvwuIyQgBEnsnzX7V7p7aS5viF6uf3mz6JzJwBc5Vio03aaptmbRTBrTSp1c5B+NvHhEOoiXHIOxQvlC+UeuyVe8eHHUr18fS5cu5dPjf/75h6cWNHmyZGE/vLeF+iFHL9sut6f1KI+HFhXlOh1pfHIfxvAhZ0cO0tfXlz+Q6OFA+eKNGzdyk4zRyQlTTpnSE5SGoFwvpUFo+s+e4nj9+jXXQQ89ucg20rk59hEfPZCoUHrA3d2d19PrK+F1AjJZ20D1dpqoqZfG135JDzxkU9BFX41GtcKVEfxvKDr92ROUt+Tl7WJuhgzsYZxRvbBLY0xisqSbypR2I9GyvPqhwxvYV1Yr3UUNmaZ5rM4cz7Wxx7Ho2BKsvbIbq05sQtNKq7G91xruZI3ZV6s4w4qlBo6EncDBkEBUKumKHUG7cZjtsPi6rG6goNmvXDeGTwLLl1Khh4lcbKxYEMFwSHylplF7DtvsMpmR1EHLG+kNXrIpPhVNeTsb47jEv4pXdKUGXyeHQrCzUT+kZQWm5KNiozirbabkh1CWzMm/ZVmPOUc2U+bXq3RptV9MKZP8C3lLub7mCnZ03oZ49o9K4WpOcO1dGc4dysLK1gqW0t92Y/Ag5zEov0c5x7QUitgo10i5Szmq1afH0I4I4qV8IuVLR40axbdcfPXVV1oqKMdIzo5+dBSxkr20cCQX2fnIeWK53dKjufgQH63G04cW42jLCNlCET0VQ/SoqCicOXMG8+bNQ7du3Tiv5oyBond6+NADh5wwFeKXi7n2FSpUCPSAkmcbsnx6HEvnK4m9Fw/zHGt5R3VUJeul6Ipykz6dJ+Int668efPF7TLZ5LFU3hLc0Txjzrm0g7NJfkMMpfKVwPS2E/mn37rfMP/gMp6zfRjzyKh9hXIWhE3ufJi8bw6c8xdBb/euWHJqNY9ma7c27yFlDJ8C2R3Apos4ERGomH4q8ix36IXf5nMVgp6Ko31+Jq/CWZbXlstp5vg1S6EcBVj0HKw0HQv7R6mnBl99v19T8lnePjQCb11A1xqdeb8nNcaqGGJGhQIDKnKgkFJEx7lGhzxGRvbPbYAbXHtWQS7nPFoyltK1lOk5oYiTHBstpJCD6tSpE5ulxPGoq2rVqmjRooUeKe0m2kVAzoQWgoYMGQKK1OivKegJoy8NoC2tPiNnSgtQlJ6gnQG0m0CzkE20aEUOhlbLqdDeN7k4OjryqT0tyBUoUIDvaiDHQ9N9S4o5+LDcNHeiLDfNp/IXL14E2UOpBSrG6OQ4yfHRw8nT0xPHjx/X2ctHaQKKimlctGOAHLFczLFP5iW8KGVBOyJSU2j6HhXLpq9U2APuMZvK0nSQIqhiuZnDqf0TfA4uReflXhjdeAAoUtx4cSvK5HdBI+d63DlturwT9Z3r4uiNE/A+qL2goVas/zurdVZ0ZQtskw/8xXxIJnxbrQNoQWbduc2ozqaaX5ZrBlP2zT28EDmy5EC9EnU471m2U0FlnxO2VrYokaeYSftalqiB9acCMKxlP7Qs2xQ9l/3Kja1VzI0fTfVvDJ8mpRugfdXmLFWxGzP2z0VlJ1f8umUs2I2Ltq6t9IOi0UqzhdYVG2FT0CH8fXI5Cto7YtqRvzU4AM8S7tgQuB3+Z9Yim7UdvA8sUOjm4Ksw66mYI+9RugbmB25iaSOWGmCzlFmn1urRZLqJ7l0K5Aw5V5rqaSVjn999JiXGJ2q1afJYStfUZajOIiyJRU18wYMNkR+Zc5D27NnD7WI/eunrr79WbGQ5Vs4j00kvi7YkkpHlWcQmaS5wMccrsahW0aHPFuZUuTzbnqXFRwtaLOcqsW1enM6eoBJ7GGjxkD6WVpCKFCmi2MCedDo8KftdvXq1xFIMnI85LYntPuB15sAlWkgiflP40IIeS1Uo/bKHkrR9+3alb1N0tktAYg6Wy9PCGC3wEY7y4h/bTSGx/akSi9q5fX369OF0tlXMLPvkMbOtcVxuU8AmxTaZZuw4efcMvgBBi1Zan36Oip4tF7dLqt9KJtMHOCkLXEtP+ks2w1zUNLawRItCpIcWR1YGsoW2PmrMfQ4ukDCkBNc5bsdUyXF0RfX4Yp9KnZd05wsjcv/U166gfZxuyr7hW7z54pMsW3qihxRwSb1YTOM2Zh/RuV3M3mM3TvD+XCa6K7YR3VT/xGMMn3vR96VqvzdMxo4tUBEuJEefGjMaSy0XdlLOr9y7ynnl8UdERUqFvasq8nVmt+R1eUHr1uM7fMGMj5/h//OqgVryT03gSzbQglQR72qKDbJtdDQlf/1BiOQwylVtX6/cUv25rXn9VESgXn2auuU62xkkseCP/8bltpTHDNRg2ke/Hw5aVKIpN+VXKfLSNw0wZRntLaUtQjSdlRfATMnIdIpyaZpMW5M0C+0fpQjPz8+P5wzlKa4mz39RN4YPRda0VS137tzImzevjjmm6JSbpGkP4WYo2qaEPtEmT56MkSNHcqxob65cjNkn81Dq5cGLf7F/6z65KV2Pd6LvISYxhke08gIMdUDjC4m6wdtp8SothXKFYVERsLe1R0E21U3N/Unbqm5G30KeLOz6ZNOeHaaXfeaMyRA+JBv14hGexEXzaFpf/tqYfsI3mG25ym6TnUf2pUZWx+a+fjyyl+Uin9yGQ7a8BhfhLMGX+jAlT7OdvFlz8+sn22TukfaRs+CJL+4aWtv5oJ2ruQNNb77Dhw+DRXqYMWMGaFpPaQrNIjtX2j+bmkKLRJTaMFZGjBjBV/iN8bxvGtuaBbbtii/60c4MyutSyiMtf+pLOxDuPbiH0s76FwXe91hF/5YjQLsM9DlXyzW/Pw0UtJFTpX3thopOztUQ4+fUTpvkb926Bba3VMexEg4UDcoLQ6nBhXKeP//8s1ER+muvD71QtEp/iEB/zEBbxWhnBf1RR1oKzUo0d36kRYeQ+bAR4FEvW7zMrFJv3fqwrTXPOvqjJFNFRK6mEBJ0gYBAQCCQBgS0d9WnQYEQEQgIBAQCAgFdBIRz1cVEtAgEBAICAYsREM7VYgiFAoGAQEAgoIuAcK66mIgWgYBAQCBgMQLCuVoMoVAgEBAICAR0ERDOVRcT0SIQEAgIBCxGQDhXiyEUCgQCAgGBgC4CwrnqYiJaBAICAYGAxQgI52oxhEKBQEAgIBDQRUA4V11MRItAQCAgELAYAeFcLYZQKBAICAQEAroIGHWuPjMDUaXYEkTefPtuoRTycXGvsOCPc2hWl72K2WUp9uxi7xdK5+JRYTlW+Qdpae3VbQdGDTuk1abv5L+wT1+/clta+/dbegnl8v/FPxUKJr+FVtZLdLeyy+TTdD+ai6+hji2Vl/Wauv9kPnEUCHyICBh1rvfuvkBQZBR7WZ/6vUkpB7BlUwgG99+PStXz4Yd+FVC8RM6ULBafhwY9QfTj5HfskMLrl58gLCT5NcaGOnmX9oXdiIaNahr27o4w1D3S2n/tOk6YtNATtZp9gZAHT3T0378bi/PX/9VpT68Gc/E11J+l8rJeU/efzCeOAoEPEQGL/svBnVvDUal8fkz6vd47G9vDpP5p1v0u7aP/DJgKvUfeUElr/0WL5QB9bkeyGYOfIe2iXSAgEPiQETAauRoynKZ9lC7Ytu4Grl5+xOt0vnunOi1A0znXL3x1PsHXH+P+vRd8Sjt98klFPUWB1Z2XYt4c9Yvubt96rugkvf5+VxReufL0SQJaN16HXKqZvJ9dO8JkEkzZ1+2bAPTpsQtfNlTLVyr8Nw7su8nlTdkXEvyE29baYwPn79t2j2Lr3TvPeZup/o3hwxWk8uvwoUhUK7kEs6efVvof1HcvxyG/ygf1qvvrRNgTxhxHpzabObZVSyyBvWoGmtZZrfRsDN9E9nbgIf33oZhqPnKrZqF+jZW4fOmhIksVY/JrVl3j90AuJptPNQcN3Vbh0kVteS1l4kQg8BEiYNS5VqvpiK5dyiFHTvZqXY3S5cdyGDHNnacBihXNwet0Xrac+nUV9RsVwYjp7sonU+aMuHn/KXvbpxUKOGbDN93LYPTIozh65BZevUpCl9Zb8Sr+DX7s6cp7yZXbVtF5laUloqJeavSurh44GonHD+MxcY4n3rA31bT7chPIKVMxZV/olWj4/n0Jz5iDnjC7Ll4lJOGrJhvw4EGMSfvyF8jKbfMaUYn39c0AF8XWnLnULwA01b8xfLjSVHxRnrt1gw2o5O6AXwZV45I3rj/F/AXnERn+HGN9auFZVAK82uzW0kpR8e6AcPT/YR8q1MiLaXPrIZNV8u1gDN8xww/jD5Zrr9OhEIZPdkfYmWg0Zq+Gjo19pfRhTP7iuQfwaFAQvmubY9qfnngRnYD6lVeyN+gmKPJUMXT/aTGJE4HAh4pAypdqpea8Rf3VUtM6q4y+1MtvyUWJvWVJ8l10Xovvq2brJCfMlXp03SbZ43cp6MpDLbpshy2mSjOm/aNFq1VxmWSDKVJMTDxvJ1nqY9yoI1p8huyrWWaJlIXpffkygfNfOH+fy0+dqH7hG/Vtyr7g61FcZsc2wy8dNNS/PDY6GsKHaD4zT/E+NPmpPmncMd6+eeN1KSumSf167ZRev36tjN2z2nIpO8M0Lk79osmVK65w/ojwJwpP9+8CeNv6tVeVNrkfU/jmxAypca2VityWTcFc15K/1NfYlLzcj3zcteMGl9+/L1zRKdPEUfsFogKPjweP5FDlHXj/8+f+RZ8f9qBXz4ro9pP260sWr2iODOzfUr/LmO3bEC6lc6fKgrIl8rJXRatfLOfskgt2yIxwll4wt5RzyQtra3XKuUzZPMiCTIgIS5a31D5z7DCGjzny37TdgldIQs8+lXVejlfd3ZG9kFHF1ZQrr55R3AhNHh8RrNgr1Bs1Kaq3K0P4Pnr0EjFIhFsdR0XOzUNdDw9LXmQ0JE9C16895imdgqq5sGWLgl82X8d1PXuqHbkqHYiKQOAjROCdOVf6EbarsRGVqjhgxtyGOtA8f5aAl8w1ULl3O0aHbqrBJmvyWhy9dTMzVGDBmykxhW5rl/zGT5UqI3OtKiTEJyl0S+1TFBmomMLHgJhW89ARNeGU1R7fNt+qs6PDXiOVkzFjBi6XcvGteMGcsLPT/14jQ/gmshQKFfnBRnUbGyv2mAQoFysXQ/K0EPhDu20IYamEiYvq4vT5bvBf3YqLsaBcFhdHgcBHj8A7ca5JSW/wTastfCV9zbY2yJRJuxvKs37z5VbkzZcFI0a4Y9zY4zhy6FaqwLzMFkBev37DZW6x/OETxMGpSDazdVw486+y0h/OItbnSEDhovZc3hz75DE9TUO0ZQofeRD58tvxKm1J0ldGjauF5XtbIuTOYwz+JfWvpjb2KmhD+OYvYMcj3lMn7ikmBZ6+B3KLhQqr8SOCIXmKnmkbWf/xVflspnyFfAi5prvdTFEuKgKBjxQBba+XToMYP/oYjp66jRHz3XHvbgwunP+Xf+T9ssMHH8SVoIfw39UKI7094FnbCd81CGALV7FmWxCH1+jXazdOnbyLgV5qx9Khcxmz5SlqluUHee3ncl93dOFHc+xzLJgN1iza/cvnAn8wXA16xBfnzDHAFD6yjsZNi7KIOiNGDDmM48dug3YqpCzVaxTEyDEeWOx7CRvXB6ckp/ncEL4UBbdt74wDO29i9ozToJ0KIwce4Vi0aVtS6c+QPO2FLpgxG7ZvCuPpAd9FF/CH91lFTlQEAp8KAslz6zSMiM3GkUGPe750Lopr6+u1R0vryTPf4+6dF5jLVppnzmqACq75OH3p2paoUmAJvm+/DTsOddSSkXhMpNXE84sVSuTDrqURWLL0MnNxGTB5iicoCtIshuwjHpIP+DuM7xog+Wlsry7lXrcH3DDLPspn/uHbGOP7nEDjBuotTFdDeqBY8eQ/pDDUvzF8KlZyUIZgb2+N+ayP2d5n0GDNKjRrVAybdrXjdPVEX806dKQb9m6/id4dd6HmLUeOD/UtFzlClY/UTnV9106mGcN32px6uB3xAsN+O0TsyMaSMotXtuA7LeicdBuTH/93bYz68SgqlvPlTrnf4CqYzraRadpMekQRCHzMCHzQr9amfaPFCy/EilWt0K6DOqrUBJtyiKEhT1DIKTvf5qVJM1b3KO+HYi45sGzNl2mSN6b7U6KZwpdmGtFsO1vxEjlAeeuUxZg85V5DQ6LZH0vYw8pKvfCWUl6cCwQ+ZgQsilzf1cAPHWR7WB/FYYXvFT4tpumxvkJTVGeX1O0y0NRjqbymrk+xbgqfvHmzgj6GijF5im5LOecyJCraBQIfPQIfpHOdNOoEgv55hDI18mDlhtbInl37jxgsRT2Xgy1y5EpfnZbaJOQFAgKBTwuBDzot8GlBLUYjEBAIfE4I6CbKPqfRi7EKBAQCAoF3hIBwru8IWKFWICAQ+LwREM71877+YvQCAYHAO0JAONd3BKxQKxAQCHzeCAjn+nlffzF6gYBA4B0hIJzrOwJWqBUICAQ+bwT+D9ZSzptJqD3hAAAAAElFTkSuQmCC"
    }
   },
   "cell_type": "markdown",
   "id": "c811070f",
   "metadata": {},
   "source": [
    "Call your function `encrypt_message()`. It should work like this.\n",
    "\n",
    "<p>\n",
    "<div>\n",
    "<img src=\"attachment:encrypt_message.png\" width=\"500\"/>\n",
    "</div>\n",
    "</p>"
   ]
  },
  {
   "attachments": {
    "improved_encrypt.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "id": "c8cd1ed0",
   "metadata": {},
   "source": [
    "__Challenge Exercise 4:__ As is, your function doesn't handle uppercase letters or things like spaces or punctuation - it will incorrectly convert them to some lowercase letter or cause an error. We want to instead convert any uppercase letters to lowercase and ignore any character that isn't a letter - simply include the same plaintext values in the ciphertext. The result should look like this:\n",
    "\n",
    "\n",
    "<p>\n",
    "<div>\n",
    "<img src=\"attachment:improved_encrypt.png\" width=\"550\"/>\n",
    "</div>\n",
    "</p>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "549705d6",
   "metadata": {},
   "source": [
    "In order to support this, you will need to change your `encrypt_message()` function to \n",
    "* convert the plaintext string to all lowercase before finding its ciphertext\n",
    "* while converting to ciphertext, only call `encrypt_letter()` on letters; otherwise, just add the non-letter character onto your accumulator variable\n",
    "\n",
    "_Hint:_ There are string methods for both of these things. Look to see what you can find at https://www.w3schools.com/python/python_ref_string.asp\n",
    "\n",
    "When you are finished, submit your solution to the __Lab 14: Caesar cipher__ assignment on codePost where they will be unit tested. You _must_ submit a .py file with the exact name `caesarcipher.py` and your function has to have the exact name `encrypt_message()`."
   ]
  },
  {
   "attachments": {
    "encrypt_key.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "id": "d573a374",
   "metadata": {},
   "source": [
    "## Optional extra\n",
    "\n",
    "Most encryption algorithms don't require the algorithm itself to be secret. Instead, they rely on encryption _keys_. For the Caesar cipher, you could add a key to the algorithm by using a different alphabet shifting amount (other than 3), and you can agree to this _key_ value ahead of time with the person you want to communicate with privately.\n",
    "\n",
    "__Optional Exercise 5:__ Change your algorithm so that it supports using a key. For the Caesar cipher, this can also allow you to decrypt the message by using the negative version of the key. For example:\n",
    "\n",
    "\n",
    "<p>\n",
    "<div>\n",
    "<img src=\"attachment:encrypt_key.png\" width=\"550\"/>\n",
    "</div>\n",
    "</p>"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
