{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "49e4da57",
   "metadata": {},
   "source": [
    "# String Comparison"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "81558057",
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys\n",
    "from pathlib import Path\n",
    "\n",
    "# Find project root by looking for _config.yml\n",
    "current = Path.cwd()\n",
    "for parent in [current, *current.parents]:\n",
    "    if (parent / '_config.yml').exists():\n",
    "        project_root = parent\n",
    "        break\n",
    "else:\n",
    "    project_root = Path.cwd().parent.parent\n",
    "\n",
    "# Add project root to path\n",
    "sys.path.insert(0, str(project_root))\n",
    "\n",
    "# Import shared teaching helpers and cell magics\n",
    "from shared import thinkpython, diagram, jupyturtle, structshape\n",
    "from shared.download import download\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2fa1d3e8",
   "metadata": {},
   "source": [
    "Observe the following operations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "id": "fb653441",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n",
      "True\n",
      "False\n",
      "False\n"
     ]
    }
   ],
   "source": [
    "### check out the comparisons here:\n",
    "\n",
    "print(\"A\" < 'a')\n",
    "print(\"a\" < 'banana')\n",
    "print('Pineapple' > 'pineapple')\n",
    "print('Pineapple' > 'banana')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a7fae2a8",
   "metadata": {},
   "source": [
    "The relational operators work on strings as seen above. String comparisons are based on the ASCII code table (this one is easier to read than the one presented in an earlier chapter). As you can see in the table below, each character has a decimal number that string comparison uses to compare strings. Note that:\n",
    "\n",
    "- `0` is `48`\n",
    "- `A` is `65`\n",
    "- `a` is `97`"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8547eec2",
   "metadata": {},
   "source": [
    "<table border=\"1\">\n",
    "\n",
    "<thead>\n",
    "<tr>\n",
    "<th style=\"max-width:30px;\">Dec</th>\n",
    "<th>Chr</th>\n",
    "<th></th>\n",
    "<th style=\"max-width:30px;\">Dec</th>\n",
    "<th>Chr</th>\n",
    "<th></th>\n",
    "<th style=\"max-width:30px;\">Dec</th>\n",
    "<th>Chr</th>\n",
    "<th></th>\n",
    "<th style=\"max-width:30px;\">Dec</th>\n",
    "<th>Chr</th>\n",
    "<th></th>\n",
    "<th style=\"max-width:30px;\">Dec</th>\n",
    "<th>Chr</th>\n",
    "</tr>\n",
    "</thead>\n",
    "\n",
    "<tbody>\n",
    "\n",
    "<tr>\n",
    "<td>0</td>\n",
    "<td class=\"greycell\">NUL</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>26</td>\n",
    "<td class=\"greycell\">SUB</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>52</td>\n",
    "<td class=\"boldred\">4</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>78</td>\n",
    "<td class=\"boldred\">N</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>104</td>\n",
    "<td class=\"boldred\">h</td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>1</td>\n",
    "<td class=\"greycell\">SOH</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>27</td>\n",
    "<td class=\"greycell\">ESC</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>53</td>\n",
    "<td class=\"boldred\">5</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>79</td>\n",
    "<td class=\"boldred\">O</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>105</td>\n",
    "<td class=\"boldred\">i</td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>2</td>\n",
    "<td class=\"greycell\">STX</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>28</td>\n",
    "<td class=\"greycell\">FS</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>54</td>\n",
    "<td class=\"boldred\">6</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>80</td>\n",
    "<td class=\"boldred\">P</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>106</td>\n",
    "<td class=\"boldred\">j</td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>3</td>\n",
    "<td class=\"greycell\">ETX</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>29</td>\n",
    "<td class=\"greycell\">GS</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>55</td>\n",
    "<td class=\"boldred\">7</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>81</td>\n",
    "<td class=\"boldred\">Q</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>107</td>\n",
    "<td class=\"boldred\">k</td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>4</td>\n",
    "<td class=\"greycell\">EOT</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>30</td>\n",
    "<td class=\"greycell\">RS</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>56</td>\n",
    "<td class=\"boldred\">8</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>82</td>\n",
    "<td class=\"boldred\">R</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>108</td>\n",
    "<td class=\"boldred\">l</td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>5</td>\n",
    "<td class=\"greycell\">ENQ</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>31</td>\n",
    "<td class=\"greycell\">US</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>57</td>\n",
    "<td class=\"boldred\">9</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>83</td>\n",
    "<td class=\"boldred\">S</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>109</td>\n",
    "<td class=\"boldred\">m</td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>6</td>\n",
    "<td class=\"greycell\">ACK</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>32</td>\n",
    "<td class=\"boldred\"></td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>58</td>\n",
    "<td class=\"boldred\">:</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>84</td>\n",
    "<td class=\"boldred\">T</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>110</td>\n",
    "<td class=\"boldred\">n</td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>7</td>\n",
    "<td class=\"greycell\">BEL</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>33</td>\n",
    "<td class=\"boldred\">!</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>59</td>\n",
    "<td class=\"boldred\">;</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>85</td>\n",
    "<td class=\"boldred\">U</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>111</td>\n",
    "<td class=\"boldred\">o</td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>8</td>\n",
    "<td class=\"greycell\">BS</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>34</td>\n",
    "<td class=\"boldred\">\"</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>60</td>\n",
    "<td class=\"boldred\">&lt;</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>86</td>\n",
    "<td class=\"boldred\">V</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>112</td>\n",
    "<td class=\"boldred\">p</td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>9</td>\n",
    "<td class=\"greycell\">HT</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>35</td>\n",
    "<td class=\"boldred\">#</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>61</td>\n",
    "<td class=\"boldred\">=</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>87</td>\n",
    "<td class=\"boldred\">W</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>113</td>\n",
    "<td class=\"boldred\">q</td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>10</td>\n",
    "<td class=\"greycell\">LF</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>36</td>\n",
    "<td class=\"boldred\">$</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>62</td>\n",
    "<td class=\"boldred\">&gt;</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>88</td>\n",
    "<td class=\"boldred\">X</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>114</td>\n",
    "<td class=\"boldred\">r</td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>11</td>\n",
    "<td class=\"greycell\">VT</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>37</td>\n",
    "<td class=\"boldred\">%</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>63</td>\n",
    "<td class=\"boldred\">?</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>89</td>\n",
    "<td class=\"boldred\">Y</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>115</td>\n",
    "<td class=\"boldred\">s</td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>12</td>\n",
    "<td class=\"greycell\">FF</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>38</td>\n",
    "<td class=\"boldred\">&amp;</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>64</td>\n",
    "<td class=\"boldred\">@</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>90</td>\n",
    "<td class=\"boldred\">Z</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>116</td>\n",
    "<td class=\"boldred\">t</td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>13</td>\n",
    "<td class=\"greycell\">CR</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>39</td>\n",
    "<td class=\"boldred\">'</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>65</td>\n",
    "<td class=\"boldred\">A</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>91</td>\n",
    "<td class=\"boldred\">[</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>117</td>\n",
    "<td class=\"boldred\">u</td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>14</td>\n",
    "<td class=\"greycell\">SO</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>40</td>\n",
    "<td class=\"boldred\">(</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>66</td>\n",
    "<td class=\"boldred\">B</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>92</td>\n",
    "<td class=\"boldred\">\\</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>118</td>\n",
    "<td class=\"boldred\">v</td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>15</td>\n",
    "<td class=\"greycell\">SI</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>41</td>\n",
    "<td class=\"boldred\">)</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>67</td>\n",
    "<td class=\"boldred\">C</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>93</td>\n",
    "<td class=\"boldred\">]</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>119</td>\n",
    "<td class=\"boldred\">w</td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>16</td>\n",
    "<td class=\"greycell\">DLE</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>42</td>\n",
    "<td class=\"boldred\">*</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>68</td>\n",
    "<td class=\"boldred\">D</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>94</td>\n",
    "<td class=\"boldred\">^</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>120</td>\n",
    "<td class=\"boldred\">x</td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>17</td>\n",
    "<td class=\"greycell\">DC1</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>43</td>\n",
    "<td class=\"boldred\">+</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>69</td>\n",
    "<td class=\"boldred\">E</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>95</td>\n",
    "<td class=\"boldred\">_</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>121</td>\n",
    "<td class=\"boldred\">y</td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>18</td>\n",
    "<td class=\"greycell\">DC2</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>44</td>\n",
    "<td class=\"boldred\">,</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>70</td>\n",
    "<td class=\"boldred\">F</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>96</td>\n",
    "<td class=\"boldred\">`</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>122</td>\n",
    "<td class=\"boldred\">z</td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>19</td>\n",
    "<td class=\"greycell\">DC3</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>45</td>\n",
    "<td class=\"boldred\">-</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>71</td>\n",
    "<td class=\"boldred\">G</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>97</td>\n",
    "<td class=\"boldred\">a</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>123</td>\n",
    "<td class=\"boldred\">{</td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>20</td>\n",
    "<td class=\"greycell\">DC4</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>46</td>\n",
    "<td class=\"boldred\">.</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>72</td>\n",
    "<td class=\"boldred\">H</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>98</td>\n",
    "<td class=\"boldred\">b</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>124</td>\n",
    "<td class=\"boldred\">|</td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>21</td>\n",
    "<td class=\"greycell\">NAK</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>47</td>\n",
    "<td class=\"boldred\">/</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>73</td>\n",
    "<td class=\"boldred\">I</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>99</td>\n",
    "<td class=\"boldred\">c</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>125</td>\n",
    "<td class=\"boldred\">}</td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>22</td>\n",
    "<td class=\"greycell\">SYN</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>48</td>\n",
    "<td class=\"boldred\">0</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>74</td>\n",
    "<td class=\"boldred\">J</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>100</td>\n",
    "<td class=\"boldred\">d</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>126</td>\n",
    "<td class=\"boldred\">~</td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>23</td>\n",
    "<td class=\"greycell\">ETB</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>49</td>\n",
    "<td class=\"boldred\">1</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>75</td>\n",
    "<td class=\"boldred\">K</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>101</td>\n",
    "<td class=\"boldred\">e</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>127</td>\n",
    "<td class=\"boldred\">DEL</td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>24</td>\n",
    "<td class=\"greycell\">CAN</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>50</td>\n",
    "<td class=\"boldred\">2</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>76</td>\n",
    "<td class=\"boldred\">L</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>102</td>\n",
    "<td class=\"boldred\">f</td>\n",
    "<td></td>\n",
    "<td></td>\n",
    "<td></td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>25</td>\n",
    "<td class=\"greycell\">EM</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>51</td>\n",
    "<td class=\"boldred\">3</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>77</td>\n",
    "<td class=\"boldred\">M</td>\n",
    "<td class=\"borderright\"></td>\n",
    "<td>103</td>\n",
    "<td class=\"boldred\">g</td>\n",
    "<td></td>\n",
    "<td></td>\n",
    "<td></td>\n",
    "</tr>\n",
    "\n",
    "</tbody>\n",
    "\n",
    "\n",
    "</table>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0a2cd659",
   "metadata": {},
   "source": [
    "So we can use the ASCII code table to compare strings."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "id": "b754d462",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "All right, banana.\n"
     ]
    }
   ],
   "source": [
    "word = 'banana'\n",
    "\n",
    "if word == 'banana':\n",
    "    print('All right, banana.')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e9be6097",
   "metadata": {},
   "source": [
    "Other relational operations are useful for putting words in alphabetical\n",
    "order:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "id": "44374eb8",
   "metadata": {},
   "outputs": [],
   "source": [
    "def compare_word(word):\n",
    "    if word < 'banana':\n",
    "        print(word, 'comes before banana.')\n",
    "    elif word > 'banana':\n",
    "        print(word, 'comes after banana.')\n",
    "    else:\n",
    "        print('All right, banana.')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "id": "a46f7035",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "apple comes before banana.\n"
     ]
    }
   ],
   "source": [
    "compare_word('apple')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b66f449a",
   "metadata": {},
   "source": [
    "Python does not handle uppercase and lowercase letters the same way\n",
    "people do. All the uppercase letters come before all the lowercase\n",
    "letters, so:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "id": "a691f9e2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Pineapple comes before banana.\n"
     ]
    }
   ],
   "source": [
    "compare_word('Pineapple')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f9b916c9",
   "metadata": {},
   "source": [
    "This can be problematic sometimes. To solve this problem, we can convert strings to a standard format, such as all lowercase or all uppercase, before performing the comparison. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "id": "d4355b93",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "pineapple comes after banana.\n"
     ]
    }
   ],
   "source": [
    "compare_word('Pineapple'.lower())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "id": "27ca1148",
   "metadata": {
    "tags": [
     "thebe-interactive"
    ]
   },
   "outputs": [],
   "source": [
    "### EXERCISE: String Comparison\n",
    "# Difficulty: Challenge\n",
    "words = ['Apple', 'apple', 'banana', 'Banana', 'cherry']\n",
    "# 1. Print the list sorted as-is\n",
    "# 2. Print the list sorted case-insensitively\n",
    "# 3. Build and print a list of tuples: (word, word.casefold())\n",
    "# 4. Print whether \"Apple\" and \"apple\" are equal under casefold\n",
    "### Your code starts here:\n",
    "\n",
    "\n",
    "### Your code ends here."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "id": "7af7b824",
   "metadata": {
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['Apple', 'Banana', 'apple', 'banana', 'cherry']\n",
      "['Apple', 'apple', 'banana', 'Banana', 'cherry']\n",
      "[('Apple', 'apple'), ('apple', 'apple'), ('banana', 'banana'), ('Banana', 'banana'), ('cherry', 'cherry')]\n",
      "True\n"
     ]
    }
   ],
   "source": [
    "# Solution\n",
    "words = ['Apple', 'apple', 'banana', 'Banana', 'cherry']\n",
    "print(sorted(words))\n",
    "print(sorted(words, key=str.casefold))\n",
    "pairs = [(w, w.casefold()) for w in words]\n",
    "print(pairs)\n",
    "print('Apple'.casefold() == 'apple'.casefold())"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Tags",
  "kernelspec": {
   "display_name": ".venv (3.13.7)",
   "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.13.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
