From 98f773e46504f5d35ef9c0fd582885d4b833f144 Mon Sep 17 00:00:00 2001 From: johoo <57379875+johoo123@users.noreply.github.com> Date: Sat, 22 Feb 2025 19:24:53 +0800 Subject: [PATCH 01/17] Update README.md test --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4bd498a7a..bd0cd2a01 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ > One has no future if one couldn't teach themself[1]. -# 自学是门手艺 +# 自学是门手艺。 > 没有自学能力的人没有未来 From e967a05cd08fa8a77aed50c91a1d7149e1bdc4b3 Mon Sep 17 00:00:00 2001 From: johoo <57379875+johoo123@users.noreply.github.com> Date: Sat, 22 Feb 2025 19:43:21 +0800 Subject: [PATCH 02/17] Update 02.proof-of-work.ipynb test --- 02.proof-of-work.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02.proof-of-work.ipynb b/02.proof-of-work.ipynb index d4fdde1be..b4e3b3c4a 100644 --- a/02.proof-of-work.ipynb +++ b/02.proof-of-work.ipynb @@ -226,7 +226,7 @@ "git checkout study\n", "```\n", "\n", - "如此这般之后,你在本地工作目录中所做的任何修改,都可以提交到 `study` 这个分支之中。\n", + "如此这般之后,你在本地工作目录中所做的任何修改,都可以提交到 `study` 这个分支之中。.\n", "\n", "你每次在 Jupyterlab 中浏览 `ipynb` 文件,按 `^ + Enter` 执行 code cell 中的代码的时候,该文件都会发生一些变化;你也可以随意修改文件中的任何地方,比如,添加一个 code cell,将某段代码从头至尾 “敲” 一遍;也可以修改某个 code cell 中的代码看看执行结果有什么不同;还可以添加或者修改任何 markdown cell —— 就当自己做笔记了……\n", "\n", From 585d6c9f2512ddff263fc63b5edde8710680470a Mon Sep 17 00:00:00 2001 From: johoo <57379875+johoo123@users.noreply.github.com> Date: Sat, 22 Feb 2025 19:46:22 +0800 Subject: [PATCH 03/17] Update 02.proof-of-work.ipynb test2 --- 02.proof-of-work.ipynb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/02.proof-of-work.ipynb b/02.proof-of-work.ipynb index d4fdde1be..f66162e7f 100644 --- a/02.proof-of-work.ipynb +++ b/02.proof-of-work.ipynb @@ -91,7 +91,6 @@ "\n", "当然,为了这么做,你还要多学一样反正你早晚都必须学会的东西,Git —— 请参阅附录《[Git 入门](T-appendix.git-introduction.ipynb)》。\n", "\n", - "时间就是这样,我们没办法糊弄它。而有了 git 这样的工具之后,我们在什么时候做了什么样的工作,是很容易证明的 —— 这对我们来说真是天大的好事。" ] }, { @@ -114,7 +113,7 @@ "source": [ "(1) 使用浏览器访问 https://github.com/selfteaching/the-craft-of-selfteaching\n", "\n", - "(2) 点击右上角的 “Fork 按钮”,将该仓库 Fork 到你的 Github 账户中\n", + "(2) 点击右上角的 “Fork 按钮”,将该仓库 Fork 到你的 Github 账户中..\n", "\n", "![](images/github-fork.png)\n", "\n", From f7e63852efcb22111491bbf12a34dba5bf7cb8f8 Mon Sep 17 00:00:00 2001 From: johoo <57379875+johoo123@users.noreply.github.com> Date: Sat, 22 Feb 2025 19:46:39 +0800 Subject: [PATCH 04/17] Update 02.proof-of-work.ipynb test3 --- 02.proof-of-work.ipynb | 1 + 1 file changed, 1 insertion(+) diff --git a/02.proof-of-work.ipynb b/02.proof-of-work.ipynb index f66162e7f..51148f808 100644 --- a/02.proof-of-work.ipynb +++ b/02.proof-of-work.ipynb @@ -91,6 +91,7 @@ "\n", "当然,为了这么做,你还要多学一样反正你早晚都必须学会的东西,Git —— 请参阅附录《[Git 入门](T-appendix.git-introduction.ipynb)》。\n", "\n", + "时间就是这样,我们没办法糊弄它。而有了 git 这样的工具之后,我们在什么时候做了什么样的工作,是很容易证明的 —— 这对我们来说真是天大的好事。.." ] }, { From 7fc4b689c4c05f850b005a4c9f91c37a04b75b74 Mon Sep 17 00:00:00 2001 From: johoo <57379875+johoo123@users.noreply.github.com> Date: Sat, 22 Feb 2025 20:02:37 +0800 Subject: [PATCH 05/17] Update Part.1.A.better.teachyourself.ipynb test4 --- Part.1.A.better.teachyourself.ipynb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Part.1.A.better.teachyourself.ipynb b/Part.1.A.better.teachyourself.ipynb index 74be6bdea..14abe4d23 100644 --- a/Part.1.A.better.teachyourself.ipynb +++ b/Part.1.A.better.teachyourself.ipynb @@ -44,7 +44,7 @@ "\n", "> 全球范围内都一样,在过去的五十年里,人们的平均寿命预期增长得非常惊人……\n", "\n", - "拿中国地区做例子,根据世界银行的数据统计,中国人在出生时的寿命预期,从 1960 年的 _43.73_ 岁,增长到了 2016 年的 _76.25_ 岁,56 年间的增幅竟然有 **74.39%** 之多!" + "拿中国地区做例子,根据世界银行的数据统计,中国人在出生时的寿命预期,从 1960 年的 _43.73_ 岁,增长到了 2016 年的 _76.25_ 岁,56 年间的增幅竟然有 **74.39%** 之多!!" ] }, { @@ -60,7 +60,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -137,7 +137,7 @@ "outputs": [ { "data": { - "image/png": "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T9nj7twqWHl7exMVFeXqMkRERKSW/PmTDXh7Gh64tLOrS6kVbnUpUEREROqvpZsz+HJjBr+5uCMtmtbPoRQKViIiIlLr9hzMZ/p/fiEqNICJAyJdXU6tcatLgSIiIlL/7Mg8wvg3fiKvsIR/3doPX6+6/TzAU1GwEhERkVqzce9hbpr1E9bCv6ecT7fwQFeXVKsUrERERKRWrN51kFtmr6CRjxfzJvfjvOaNXV1SrVOwEhEREaf7YXsWk99KIqSxL29P7keb4EauLumcULASERERp1q6KYPb562ibXAj5k3uV2/vAKyKgpWIiIg4zSdr93Lv/NVEt2zC3En9CA7wcXVJ55SClYiIiDjF+yt388AHa+ndNojZE+No6ld/Hq5cUwpWIiIictbm/pDKw4vWM/C8UF67uQ+NfBpmxGiYn1pERESc5qXEbTz12WaGdW3BCzf0ws+7/s5TVR0FKxERETljSzdl8NRnmxkVG87T1/bE27NhP9SlYX96EREROSsLVu0hJMBHoaqczoCIiIickdyCYr7cuJ8rerRSqCqnsyAiIiJn5Iv1+yksKWNkbGtXl+I2FKxERETkjCxak05EkD+92zZzdSluQ8FKRERETltmbiHLtx1gVGw4xhhXl+M2FKxERETktC1Zt5fSMssoXQY8joKViIiInLZFyWl0btmETi2auLoUt6JgJSIiIqdlV1Y+P+/KUW9VFRSsRERE5LR8tDYdgCt7tnJxJe5HwUpERERqzFrLwtVpxEUGERHUyNXluB0FKxEREamxTfty2ZpxRHNXnYSClYiIiNTYouR0vDwMl8foMmBVFKxERESkRsrKLB+tSefCjqEEB/i4uhy3pGAlIiIiNbJq10HSco7qbsBTULASERGRGlmUnIaftwfDurZwdSluS8FKREREqlVcWsYna/cyrGtLAny9XF2O21KwEhERkWot23qAg/nFjOoZ7upS3JqClYiIiFRrUXIagf7eXNQpzNWluDUFKxERETml/KISvtiwn8tiWuHjpehwKjo7IiIiclKHjhZz29yV5BeVck1v3Q1YHY0+ExERkSrtyspn4pwV7MrO5+lre9I3MtjVJbk9BSsRERH5lVU7s5kydxUlZZa5k/rRv0OIq0uqExSsRERE5DiL16Rz//trCA/0Y/aEONqHNXZ1SXWGgpWIiIgAYK3ln19v45n/biE+MphXbuqjR9ecJgUrERERobCklD9+sI4PV6cxuldr/nZNDL5enq4uq85RsBIREWngDuYVMXXeKlakZHPfsE78Zsh5GGNcXVadVKPpFowxI4wxm40x24wxD56i3TXGGGuM6eu8EkVERKS27Mg8wuiXlpO8K4fnr4/ltxd3VKg6C9X2WBljPIEXgWHAHiDJGLPYWrvhhHZNgHuAn2qjUBEREXGuH3dkcfu8VXgYwzu39dN0Ck5Qkx6reGCbtXaHtbYIeBcYVUW7x4EngQIn1iciIiK14INVe7hp1k+EBPjwnzsvUKhykpoEq9bA7krLe8rfq2CM6Q20sdZ+cqodGWOmGGNWGmNWZmZmnnaxIiIicnbKyizPfLGZ37+/hrjIYD68YwDtQgJcXVa9cdaD140xHsCzwITq2lprXwNeA+jbt68922OLiIhIzRUUl3L/+2v4eO1exvZtw59Hd8fbU0+3c6aaBKs0oE2l5Yjy945pAnQHEssHu7UEFhtjRlprVzqrUBERETlzB44UMmXuSn7elcMDIzpz+6D2GqReC2oSrJKAjsaYKByB6npg3LGV1tpDQOixZWNMInC/QpWIiIh72Lo/l0lvJZFxuJCXxvfmsphWri6p3qo2WFlrS4wxdwOfA57AbGvtemPMY8BKa+3i2i5SREREzswP27OY8q+V+Hp5Mn9qf2LbNHN1SfVajcZYWWuXAEtOeO/hk7RNOPuyRERE5GytTz/E5LeSaNXMnzkT44gIauTqkuo9zbwuIiJSD6XlHGXim0k09fdm3q39aBno5+qSGgTdCiAiIlLPHDpazMQ3V3C0qJQ3J8YpVJ1D6rESERGpRwpLSpn6r5WkHMjjrYnxdG7Z1NUl1Q5rIT8LDu2GgOYQ2Lr6bc4BBSsREZF6oqzM8ocFa/lxRzZ/H9uTC84LrX4jd1VwGA6nwaE9/3sdWz6cBofToaT8YS9DH4WB97q23nIKViIiIvXEzC82syg5nWnDoxndK8LV5Zza0YNwMBVydlV67Xb0QB3aDQWHjm9vPKFJK0fPVKtY6Hw5BLaBpq2hVQ+XfISqKFiJiIjUA/N+3MnLidu5Ib4tdyZ0cHU5DvnZcGArZG+HrO2Or9kpcDDl18HJtyk0a+sIS237Q2AENGsDTSMcYapxS/B0/9ji/hWKiIjIKX25YT8PL/qFIZ2b8/iobud+RvWjByFjI+xfDxkbIHMzHNgCeZWeC2w8HcEppANE9IWgSMerWTvH+/71Y34tBSsREZE6bM3uHH7z79V0Cw/khRt64VXbz/7Lz4a0VZC+Gvaugb1r4dCu/633DYTmnaHTCAjt5HiFnAdB7cDTu3ZrcwMKViIiInXUrqx8bn0riZDGPsya0JcAXyf/WbfWcSlv53LY9QPsSYLsHf9bH3Keo/ep70Ro0R1adHWMeWrAzyBUsBIREamDDuYVMeHNFRSXWt6dEk/zJk6aq+pQGuxYCtu/hpTvIC/D8X5Ac2gTD71vhtZ9ITwWfJs455j1iIKViIhIHVN2v6CKAAAgAElEQVRQXMrkuSvZk3OUtyf347zmjc98Z6UlsPsn2PIZbP0CMjc53m/cAtonQOQAaDfQMTaqAfdE1ZSClYiISB1SWmb53fxkft51kH/e0Ju4yODT30lhLmz7EjZ94ghTBYfAw9sRonrdCB2GQPOuClJnQMFKRESkDnnik418+ss+pl/ehct7tKr5hkcyYfMS2PQx7EiE0iJoFAKdr3AMNO8wWJf2nEDBSkREpI6YtSyF2ctTmHBBJLcOjKp+g+wdsGmJo2dq949gyxzTG8RPcUyw2aYfeHjWfuENiIKViIhIHfDpur38+ZMNDO/Wgoeu6Fr1XFVlpbBnJWz93BGoMjc63m/eDS6aBl2udNy9p0t8tUbBSkRExM2tTM3mnvnJxLZpxvPX98LTo1IwOrQHUr6FbV/B9q8ck3UaT2h3AfT+K0RfCsE16N0Sp1CwEhERcWPbM48wee5KwgP9eOOmPvjl7oLdKxzzSqV863hMDEBAGHS6FDoOc4yX8g9ybeENlIKViIiIOyorIyt9G7PmfsCddhs3huXQ6JUp/5tXyqeJo1cq7laIGuS4i8+jlmddl2opWImIiLhKaTHk7oWcXXAw1fHK3gEHtmAPbCOk5Ch/AazxwOR1ckyD0CbeMei8eRcNPHdDClYiIiK1oSjfEZpy9zm+Hk7/39fD6Y6xUUf2Oe7UO8Z4QmAEZaGd+G9+NIlZzbhq+CX0O/9C8Gnkus8iNaZgJSIicjqshbxMRzA6nAaH95YHqPLX4fIwVXjo19t6B0DTVtA03DEOqmlrCGztmAIhKBICI7AeXjy08BfeztjFY6O60a9/5Ln+hHIWFKxEREROVHwUslMga5tjcPjBVDi4E3J2OgJVadHx7T28oHFLR2gK6wTtB0GTltAkvPxrK8c636bVTnXwcuI23v5pF1Mvas/NClV1joKViIg0XGWljvC0dy1kbICMjY6vObsA+792jUIcvUqtejpmKg9s4+hpahru6HVqFOqUgeOLktN46rPNXNkznAdGdD7r/cm5p2AlIiINx6E02LMCdidB+s+OQFWc51jn4QUhHaF1H4gdByHnlb86nJNHvXy//QD3v7+GflHBPH1tDzw8NIlnXaRgJSIi9dexyTNTvoWU7+DwHsf7Xn6O3qdeN0J4LLTsAaGdwMvHJWVu3pfL1H+tIjIkgNdu6ouvl+72q6sUrEREpP4oLXZMnLnlc9j6BRzY4ni/UQhEXghtfwNt4qBFjMtC1In2Hy5g4psr8PP25M2JcQQ28nZ1SXIWFKxERKRuKy6A7V/DhkWw+VPH3XiePhA5EPpMcOvJM48UljDhzSQOHS1m/tT+RARpSoW6TsFKRETqnrIy2LkMkv8NGz+ColzwawZdroDOlzvClG9jV1d5SsWlZdwxbxVb9ucye0Ic3VsHurokcQIFKxERqTtydsPPc2HNv+HQbsf0BV1HQbfRjikOPOvGZTRrLf/34Tq+23qAp67pwaBOYa4uSZxEwUpERNxbWZnjUl/SG7D1c8d7HYbA0BmO3ilvf1dWd0ae/2or76/aw28v7sh1cW1cXY44kYKViIi4p+ICWDsfvn8BsrZCQBgMvM8xbqpZ3Q0j763czXNfbmVMnwh+N7Sjq8sRJ1OwEhER91KYCytehx9fhrwMx7QI18yCLiPd5k6+M/Xtlkz+78N1XNgxlL9eHYOpZhZ2qXsUrERExD0U5UPS67D8ecjPclzuG3CPYyB6PQgg69MPcce8VXRs0YSXxvfG29P97lKUs6dgJSIirlVaDKvmwDdPOXqoOlwMg/8EEX1cXZnTpOUcZeKbSTT19+bNCXE08asbg+zl9ClYiYiIa1gLm5fAfx92PK+v3UAY+y9oe76rK3OqQ0eLmfjmCo4Wl7Lg9gtoGejn6pKkFilYiYjIubd/AyyZ5piLKrQT3DAfOg2vF5f8KissKWXqv1aSciCPtybFE92y9p85KK6lYCUiIudOYS4k/s0xMN2vKVz+DPSeAJ71789RWZnlDwvW8uOObJ4bG8sFHUJdXZKcA/XvN1lERNzTpiXwye8hNx163wwXz4CAEFdXVWtmfrGZRcnpTBsezVW9Wru6HDlHFKxERKR25WfDpw/AuvegRXe4bq7jQcj1TGmZZe2eHBI3Z5K4JZM1u3MY168tdyZ0cHVpcg4pWImISO3ZtAQ+ugeOZkPCHx0TfNbxuagqO3CkkO+2ZpK4OZNvt2RyML8YY6BnRDMeGNGZ2y6M0lxVDUyNgpUxZgTwPOAJvGGt/dsJ628H7gJKgSPAFGvtBifXKiIidUVxAXwx3TEvVcsYuOlDx9c6rrTMkrw7h282Z5C4JZN1aYewFkICfBgc3ZxB0WFc1DGMoID6Ex7l9FQbrIwxnsCLwDBgD5BkjFl8QnB6x1r7Snn7kcCzwIhaqFdERNzdgW2wYALsWwf974aLH6nTvVSZuYV8syWTxM0ZfLf1AIeOFuNhoFfbIO4b2olB0WF0Dw/Ew0M9U1KzHqt4YJu1dgeAMeZdYBRQEaystYcrtQ8ArDOLFBGROmLjx/CfqeDp7ZhCIbru/T92SWkZybuPjZXK4Jc0x5+40Ma+DO3SgoToMC7sGEqzRnU3LErtqUmwag3srrS8B+h3YiNjzF3AfYAPMMQp1YmISN1gLfz4Enz+J2jdxzFAPbDu3AmXcbiAxC2ZfLM5k++2ZnK4oARPD0Pvts2YNjyaQZ3C6NqqqXqlpFpOG7xurX0ReNEYMw6YDtxyYhtjzBRgCkDbtm2ddWgREXGlslL47EFY8Rp0uRKufh28/V1d1SkVl5axelcOiZszSNycyYa9jl6p5k18GdG9JYM6NWdgx1AC/fXoGTk9NQlWaUCbSssR5e+dzLvAy1WtsNa+BrwG0LdvX10uFBGp60qKYMFE2PSxYzzVsMfBwz0fLrzvUAHfbHEEqWXbDpBbUIKXh6FPuyD+MCKahE7N6dKqie7ik7NSk2CVBHQ0xkThCFTXA+MqNzDGdLTWbi1fvBzYioiI1G9lpfCfKY5QNeJJOP92V1d0nOLSMlamHiRxSwbfbM5k075cAFo29ePymFYkRIdxwXmhNNUDkcWJqg1W1toSY8zdwOc4pluYba1db4x5DFhprV0M3G2MGQoUAwep4jKgiIjUI2VlsPi3sP4/jl4qNwlV6TlHK+7gW74tiyOFJXh7Gvq2C+aPl3ZmUHQY0S3UKyW1p0ZjrKy1S4AlJ7z3cKXv73FyXSIi4q6sdYypSp4Hgx6AAb91WSlFJWWsTM0msTxMbdl/BIDwQD+u7BlOQnQYA84LpbGv5sOWc0O/aSIicnqWPw8rXoXz73LMpn6O7TmYT+LmTL7Zksn32w6QV1SKt6chPiqYMX0iGBzdnPOaN1avlLiEgpWIiNTctq/gq0eh61Uw/Ak4B+GlsKSUpJSDjjv4tmSyLcPRK9W6mT9X9WpNQnRzLugQQoB6pcQN6LdQRERqJjsFFkyCsC5w1Uu1Gqp2Z+dXTIXw/fYsjhaX4uPpQb/2wVwf14aE6OZ0CAtQr5S4HQUrERGpXlEezL/R8f3188AnwKm7Lykt4/vtWRWzne/IzAOgTbA/Y/pEkBAdRv8OITTy0Z8tcW/6DRURkVOzFj66BzI2wPj3Ibi9U3efk1/E7fNW8eOObHy8PDi/fQg39mtHQnQYUaHqlZK6RcFKRERObe17sO59GDwdzhvq1F2nHshj0pwk9hw8yl9GxzC6V2v8fTydegyRc0nBSkRETu7gTlhyP7TtDxfe59RdJ6VmM2XuSgDmTe5HfFSwU/cv4goKViIiUrWyUvjPVMf3o18FD+f1JC1cncYfFqwlIsif2RPiiAx17pgtEVdRsBIRkaot+zvs+gFGvwZB7ZyyS2stz325lee/2sr57YN55cY+NGvk45R9i7gDBSsREfm19GRI/Ct0uxp6XOeUXRYUl/LAB2tZlJzONb0j+OvVMfh4uecDm0XOlIKViIgcr7QYFt0NjULhimedMl9V1pFCpv5rFSt3HmTa8GjuTOigu/2kXlKwEhGR4y17Dvavg+vfAf+gs97dtowjTJqTxL7DBfxzXC+u6BHuhCJF3JOClYiI/E/GRvjmScclwM6Xn/Xuvt92gNvnrcLHy4N3p5xP77ZnH9RE3JmClYiIOJSVOi4B+jaBy2ae9e7eW7mb//twHVGhAcyeEEeb4EZOKFLEvSlYiYiIw48vQ9pKuGYWBISe8W7Kyiwzv9jMy4nbubBjKC+O701TP28nFirivhSsREQEsrbD149Dp0uh+zVnvJuC4lLuey+ZJev2Ma5fWx4d2Q1vT935Jw2HgpWISENXVgaLfwuevmd1F2BmbiGT565k7Z4cpl/ehVsHRunOP2lwFKxERBq6VbNh5zIY+QI0PbM79jbvy2XSnCSy84p45cY+DO/W0slFitQNClYiIg1Zzi747yPQPgF63XRGu1i6KYPf/ns1/j6evDe1PzERgU4tUaQuUbASEWmorIWP7nV8vfIfp30JcGdWHn9dsonP1u+jc8smzJ4QR3gz/1oqVqRuULASEWmoVs2B7V/BpTNP61mAhwuKefHrbby5PBUvT8Pvh3Xitova4+ftvIc0i9RVClYiIg1R5mb47I/QfjDETa7RJqVllneTdvHsF1vIyitiTJ8Ipg2PpkVTv1ouVqTuULASEWloSgphwa3g0whGvwIe1U+HsHzbAR7/eAOb9uUSHxnMnIldNZZKpAoKViIiDc2XjzqeBXjDfGhy6rv3dmQe4S9LNvLlxgwigvx5aXxvLu3eUtMoiJyEgpWISEOy9Uv48UWInwLRI07a7FB+Mc9/tZW5P6Ti6+XBAyM6M3FApMZRiVRDwUpEpKHI3AwfTILmXWHYY1U2KS4t452fdvH3L7dw6GgxY/u24b5LOtG8icZRidSEgpWISENwJAPeHgOePnDDv8H719MiJG7O4M+fbGRbxhHObx/MQ1d0pVu4xlGJnA4FKxGR+q4oH/59PRzJhImfQFDkcau37s/lz59s5JstmbQLacSrN/Xhkq4tNI5K5AwoWImI1GelJfDhbZD2M1z/NrTuU7GquLSMJz7ZyL9+3Ekjb0/+dFkXbr6gHb5eGkclcqYUrERE6quCQ/D+RMckoCOehM6XH7f6vZW7mfN9KjfEt+X+SzoR0tjXRYWK1B8KViIi9dHBVHhnLGRtczyups8tx60uK7PMXpZC99ZN+cvo7rrsJ+IkClYiIvXN9qXwwWQoK4YbP4T2g37V5NutmWzPzOPvY3sqVIk4kYKViEh9kbYKvnocdiyF4PYw7j0I7Vhl09nLU2nexJfLY8LPcZEi9ZuClYhIXVVWChkbYfePsOUL2Po5NAqB4X+BvpOqnFIBHHcBfrslk/sv6YSPV/WPsxGRmlOwEhGpi756HFa8BoWHHctNWsHg6XD+7eDb5JSbzl7umE19XL9256BQkYZFwUpEpC4KjIDu10Db/tC2HzRrBzUYK5WdV8SHP+/h6t6tCQ7wOQeFijQsClYiInVR34lntNm/V+yisKSMiQOinFyQiADo4rqISANRVFLGW9+ncmHHUDq1OPXlQhE5MwpWIiINxJJ1e8nILWTSQPVWidQWBSsRkQbAWsusZSl0CAtgUMcwV5cjUm8pWImINAArdx5kXdohJg6IwsNDE4KK1JYaBStjzAhjzGZjzDZjzINVrL/PGLPBGLPWGPOVMUb38IqIuJFZ36UQ6O/NNb0jXF2KSL1WbbAyxngCLwKXAl2BG4wxXU9othroa63tASwAnnJ2oSIicmZ2Z+fzxYZ9jOvXFn8fT1eXI1Kv1aTHKh7YZq3dYa0tAt4FRlVuYK1daq3NL1/8EdD/EomIuIk536fiYQw399fFBJHaVpNg1RrYXWl5T/l7J3Mr8GlVK4wxU4wxK40xKzMzM2tepYiInJHcgmLmJ+3msphWtAqs+hE3IuI8Th28boy5EegLzKxqvbX2NWttX2tt37Aw3ZUiIlLb3l+5hyOFJZpiQeQcqcnM62lAm0rLEeXvHccYMxT4EzDIWlvonPJERORMlZZZ5nyfSp92QcS2aebqckQahJr0WCUBHY0xUcYYH+B6YHHlBsaYXsCrwEhrbYbzyxQRkdP15cb97MrO51b1VomcM9UGK2ttCXA38DmwEXjPWrveGPOYMWZkebOZQGPgfWNMsjFm8Ul2JyIi58jsZSm0bubPJV1buLoUkQajRg9httYuAZac8N7Dlb4f6uS6RETkLPySdoifUrL502Vd8PLUXNAi54r+axMRqYdmL0+hkY8n18W1qb6xiDiNgpWISD2TkVvAR2vSua5vGwL9vV1djkiDomAlIlLPzPthJyVllgkXRLq6FJEGR8FKRKQeKSguZd5Pu7i4cwsiQwNcXY5Ig6NgJSJSjyxKTiM7r4hJAyNdXYpIg6RgJSJST1hrmb0slS6tmtK/fYiryxFpkBSsRETqieXbsti8P5dJAyIxxri6HJEGScFKRKSemL08hdDGPoyMDXd1KSINloKViEg9sD3zCF9vyuDG89vh6+Xp6nJEGiwFKxGRemDO8lR8PD248fx2ri5FpEFTsBIRqeNy8otYsGoPo2LDCW3s6+pyRBo0BSsRkTru3aTdHC0uZdLAKFeXItLgKViJiNRhxaVlvPV9Khd0CKFLq6auLkekwfNydQEiIg3Jofxi7nxnFX5eniREh5EQ3Zw2wY3OeH+f/bKPvYcK+PNV3Z1YpYicKQUrEZFzpLCklCn/WsnqXTk0b+rLV5sygPW0DwsgoVNzEqLDiI8Kxs+75nf1zVqWQlRoAIOjm9de4SJSYwpWIiLnQFmZ5f731/JTSjbPXx/LyJ7h7DiQR+LmTBI3ZzDvp53MXp6Cv7cn/TuEMKhTGAnRYbQLOfnz/n7edZDk3Tk8NqobHh6aEFTEHShYiYicA09+vomP1qTzwIjOjIptDUCHsMZ0CGvMrQOjOFpUyo87skjcnEHilky+3pQBQFRoQEXIOr99yHG9WbOWpdDUz4treke45DOJyK8pWImI1LK5P6Ty6jc7uPH8ttw+qH2Vbfx9PBncuTmDOzsu6aUcyOOb8pD17xW7mPN9Kr5eHhW9WV1aNeWzX/YxeWAUAb76p1zEXei/RhGRWvTfDfuZsXg9Q7s0Z8aV3Wr8DL+o0ACiQqOYMCCKguJjvVmZfLMlk0c/2gCAp4fh5gsia7F6ETldClYiIrVk9a6D/ObfPxPTOpB/3NALL88zm+HGz9uThOjmJJQPUN+Zlcc3WzJp4udF62b+zixZRM6SgpWISC3YmZXH5LdW0ryJH7MmxNHIx3n/3LYLCeDm/icf1C4irqMJQkVEnCw7r4gJbyZRZi1zJsbpMTMiDYh6rEREnKiguJTJbyWRnnOUd27rR/uwxq4uSUTOIQUrEREnKS2z3PPualbvzuHl8b3p0y7Y1SWJyDmmS4EiIk5greXxjzfw+fr9PHR5V0Z0b+XqkkTEBRSsRESc4I3vUpjzfSq3Doxi0sAoV5cjIi6iYCUicpY+XpvOE0s2cllMS/50WRdXlyMiLqRgJSJyFlakZHPf/DX0bRfEs9fF6pl9Ig2cgpWIyBnalpHLbXNXEhHsz+s39z3uOX4i0jApWImInIGM3AJumZ2Et6fhrYnxBAX4uLokEXEDmm5BROQ05RWWMGlOEtl5Rcyfej5tghu5uiQRcRPqsRIROQ0lpWXc/c7PbEg/zD/H9aJHRDNXlyQibkQ9ViIiNWSt5aFFv7B0cyZPjO7OxV1auLokEXEzClYiItXYnZ3PouQ0Fiansy3jCHcmdGB8v3auLktE3JCClYhIFbLzivhkbToLk9NZtfMgAHGRQTx5TQzX9W3j4upExF0pWImIlDtaVMoXG/axKDmdb7dkUlJm6dSiMdOGRzMqNpyIIA1SF5FTU7ASkQatpLSMZdsOsCg5nc/X7yO/qJRWgX7cOjCKUbGt6dKqCcZo0k8RqRkFKxFpcKy1JO/OYVFyOh+vTefAkSKa+nkxsmc4o2Jb0y8qWDOoi8gZUbASkQZjR+YRFianszg5jdSsfHy8PLi4c3NGxbZmcOcwfL00c7qInB0FKxGp1zJyC/hozV4WJaexds8hjIH+7UO4M+E8RsS0pKmft6tLFJF6pEbByhgzAnge8ATesNb+7YT1FwHPAT2A6621C5xdqIhITR0pLOHzX/axMDmN5dsOUGahW3hT/nRZF67sGU7LQD9Xlygi9VS1wcoY4wm8CAwD9gBJxpjF1toNlZrtAiYA99dGkSIi1SkqKePbLZksTE7jy437KSguIyLInzsTzuOqXuGc17yJq0sUkQagJj1W8cA2a+0OAGPMu8AooCJYWWtTy9eV1UKNIiJVKiuzrNp1kIWr0/hk3V5y8osJauTNtX3acFWvcHq3DdIdfSJyTtUkWLUGdlda3gP0q51yRESqt2V/LgtXp7EoOZ20nKP4eXtwSdeWXNUrnAs7huHtqcegiohrnNPB68aYKcAUgLZt257LQ4tIHbf30FEWJztmQt+49zCeHoaB54Vy//BOXNK1JQG+uhdHRFyvJv8SpQGVn98QUf7eabPWvga8BtC3b197JvsQkYbj0NFiPl23l4XJafyUko210LNNMx65sitX9AgnrImvq0sUETlOTYJVEtDRGBOFI1BdD4yr1apEpMEqKC5l6aYMFiansXRTJkWlZUSFBnDPxR0ZFduaqNAAV5coInJS1QYra22JMeZu4HMc0y3MttauN8Y8Bqy01i42xsQB/wGCgCuNMY9aa7vVauUiUm8UlZSRlJrNouQ0Pv1lH7kFJYQ29mX8+W25KrY1PSICNQhdROqEGg1KsNYuAZac8N7Dlb5PwnGJUESkRtJyjvLN5kwSN2ewfNsB8opKCfDxZHj3llwV25oLOoTgpUHoIlLHaLSniJwThSWlrEw9SOLmDBI3Z7I14wgArZv5M6pXaxI6hXFhxzD8ffRYGRGpuxSsRKTW7M7OJ3FLJt9szuD77VnkF5Xi4+lBfFQwY+PakBAdRoewxrrMJyL1hoKViDhNQXEpSanZJJZf4tuemQdARJA/V/duTUKn5vTvEKKpEUSk3tK/biJyVvYfLuDz9ftI3JzJD9uzOFpcio+XB/2ighnXrx0J0WG0Dw1Qr5SINAgKViJy2g4XFPPZL/tYlJzG99uzsBbahTTiur4RDIoOo3/7UI2VEpEGScFKRGqksKSUxM2ZLEpO48uNGRSVlNEupBG/GdKRkT3DOa95Y1eXKCLicgpWInJSZWWWFeXzS32ydi+HC0oICfBhXHxbRsWGE9ummS7xiYhUomAlIr+yce9hFian8VFyOumHCmjk48nwbi0ZFRvOwPNCNb+UiMhJKFiJCABHCkv41w87Wbg6jc37c/HyMFzUKYwHLu3MsK4taOSjfy5ERKqjfylFhNW7DnLv/GR2ZuXTp10Qj4/qxmUxrQhprIcci4icDgUrkQastMzy0tJtPPfVVlo29eO9qf2Jjwp2dVkiInWWgpVIA7U7O5/73ksmKfUgI3uG8/hV3Qn093Z1WSIidZqClUgDtCg5jen/+QUL/H1sT0b30jPURUScQcFKpAE5XFDMwwt/YWFyOn3aBfHc2FjaBDdydVkiIvWGgpVIA7EyNZt73k1m3+ECfje0E3cN7qBpE0REnEzBSqSeKykt4x9fb+OfX2+ldZA/703tT592Qa4uS0SkXlKwEqnHdmblce/8ZFbvyuGa3hHMGNmVJn4aoC4iUlsUrETqIWstH/ycxiOLfsHDw/DCDb24sme4q8sSEan3FKwagKNFpezMziP1QB6pWfl4eRiiQgNoFxJAm2B/fL08XV2inKX8ohLSc46SllNA2sGjfLMlg8/X7yc+Kpi/j42ldTN/V5coItIgKFjVE/lFJezMyq8IT46veezMymff4YKTbudhILyZP5EhAUSGNiIyxBG4okIbERHUCD9vhS5XKyuzHMgrJL08NDkClOOVXv46mF983DY+Xh5MGx7N7YM64OmhhySLiJwrClZ1SF5heXjKcoSmyiEqI7fwuLahjX2IDAlgwHmhRIU2ol1IgCM0hTaitNSSkpXHzqw8Ug7ks7N8X4uT0zlcUFKxD2MgPNC/InA5QlcjokIDaBOs0OUsBcWl7D108tCUfqiAopKy47YJ8PGkdZA/rZv5E9umGeHN/IkI8ie8mePVoomv7vgTEXEBBSs3c6SwhNQDef8LUOXfp2Tlkfmr8ORLVGgjLuoUVn5pr1FF+KlugHJQgA+92/76zrCc/CJSjh3zgCN8pWbl88m6veRU6hU5FrrahTSq6OFyfA2grUJXBWstB/P/v707j7errM44/ntCEpILZGBOLpAIIgYBmVRUNIJUKCC1tLQFKvXDUOuAKFiLYCuD1gqCTEVAEEWjILZ8cAIUiYxWCJNMhjFhECEEQkhIyODTP9Z7k5OcmxDJufdN2Ov7T+69m5yzeLPu2Wu/77vXns8fZszhyZbCqadoemrGHJ6bNW+JvyPBhuusSfeIoWzTPZw937Ix3SOHMnp4FE3dI4cybMhApJyJSimlVU0WVhW8NHf+EoXTlJYlvOdmLVk8bbjOmoxdby1222qDRbNOY0sRs/aanf/nG9E1mB02G8wOyyi6pkzvmeFaPHN29b1Pty1FjRo+pG15cez6XYxZdy2GDn79FF3zFvyJZ2bOXVQ0tc84zWXO/IVL/J0hgwbQXWaWxo0atujrnlmnjYYNYfDAnG1KKaXVkWxXeeOdd97ZkyZN6rPXf+DpmVx22xN99vp/rpfmLih7nma3zVBsNGzNmO0pS3VvKIXImPW6WKsPiqe+8OLL85n6/OxFs109e7ymTH+Z52cv+f+78bAhq22RZZvps+ctKqCefekVlv4VWn/twUsUS90tf3aPHMrIrkE525RSSqsZSbfb3vnV/rvV46z9Gjz94hyuuPOp2mEsMnTQGq7kUDUAAA4fSURBVIxZr4s9xm20xNLZmPW66Bq8+v8zDO8axHZdI9hukxFtx16cM5/Hy3Lm1J4ZuumzuW7ys217h1YHI7sGMXrEUN6z5QZRLI1YvEQ3aviQXAZNKaUGe93OWKWUUkopdcqKzljlRo6UUkoppQ7JwiqllFJKqUOysEoppZRS6pAsrFJKKaWUOiQLq5RSSimlDsnCKqWUUkqpQ7KwSimllFLqkCysUkoppZQ6JAurlFJKKaUOycIqpZRSSqlDsrBKKaWUUuqQas8KlDQNmFrlzetYH3iudhCroByXdjkmvctxaZdj0rscl3Y5Jr37c8ZljO0NXu0/qlZYNY2kSSvy8MamyXFpl2PSuxyXdjkmvctxaZdj0ru+GJdcCkwppZRS6pAsrFJKKaWUOiQLq/5zQe0AVlE5Lu1yTHqX49Iux6R3OS7tckx61/FxyT1WKaWUUkodkjNWKaWUUkodkoVVSimllFKHZGHVTySpdgyrqhybtKIyV9KKylxJteQeq7RKkSRnUgI5Fq8mx2exHIvla/L4SFoP2BKYCwwDHrb9h7pR1Sdpc2JchgBrAZNsP9iR125orvUrSVsDGxMzhHOB+20/XzeqeiQNAN4FjAJGADOAW2w/VTWwVVhTTwyZK3++zJXMlR6ShgATgG7gMeCPwMvAPbYvrRlbTZKGAlcCfwLuAQyMJMbom7anrdTrN/D3r19JOgj4B6Jt/iRgIfELf73tX1cMrRpJhwAHArOJMdkI6AJ+Y/vbFUOrStIawD7AJsCmxIfgz2w/XDWwijJXepe50i5zpZ2kjwF72/6gpA2ANwNvBXYGngZOsP1KzRhrkPRR4IO295U0gsiVNwLvJWawjrM9+7W+/sDOhJmW49PAZ23fIKkb2BrYEThWUrftCXXDq+LjwOdtTyzT1KOAccD+kobYPq9ueNV8GDgYuB14ANgeOF3SXcDZK3sVtZrKXOld5kq7zJV2zwLPSRpacmIacKOkNwFfIwqJX9YMsJIHgRckrWd7OjHZMVnSJOAc4K+B773WF88Zqz4kaSDwFeLK4Bzb81qO7Q4cCXzc9tOVQux3ZUPp54gryf+yPafl2HbAqcCRnVrrXp1Iuh44xfbPJK1FXDltTpxEn7B9atUA+1lLrgwlcmVuy7HMlcyVRZb6XPlK5kqQtC5wHjALmAjcBfze9nxJPwF+bPubNWOsofzO/Dcx4zsRuB74P9sLJP0Y+Knt19w4NAurPiZpR+CrwG3E9PQ9th8qx6YBm7UWF00gaSvgLOIq4TfAjbZvL8eeBcbafrliiFVIOhR4E3By6zS0pNHA94mZz0m14quhXFmfTeTKzcBNtu8ox5qcK4cRG28zVwpJWxK58iKRKzfn50qQdASwBbFKtQGxn2htYN+mjgmApD2AXYnl9M2BV4jtOgeszLhkYdUPylXDocQGQhPT9rOAqbaPrBlbLZIGAfsRS6NbADsBDwGP2P7XmrHVImkzYhp6E+BaYs/M9ZKGAZOBLZr4IVhmI/6WyJFR5c8HaXaubAqcCYwBfgX83Pavm54rAJL+jviM7Wbx58rDTcuVsvXkYGKp+EFin+8IYH75+ibbj9eLsA5JGwP/CPzO9i8krQ+MJs7NmxEF+YyVeo8srPpG+cc6kFjD/nfgUeKk8BbiimogcFuTPvwkDQf+AvhLYvr1eWKj6XOAiDG5x/bCakGuAiS9HdiLuJLaArgFeNT2F6sG1o8kjSU2Z98H3G37BUnrsPi28cE0NFckDbD9p/L124A9gXcS+4lupnm5Mhr4F2JT9im2by4btbuJXFkTuLdJuVLy4gxiReBtxDjcDfzE9o01Y6tJ0vbA6cD9wHuAX9k+uuPvk4VV35D0DWJKEaJHxhXAO4AbbF9TLbCKJF1EjMkzwIZE+4lpwHW2r60ZW02lYNgd2B+40PaNkgYTV1CjAWxPrRhiv5N0MnA4ix+Qelf5cwvbX6sTVX2l6P5PYglnbvnZhkSuDAIG255SL8L+J+l8onCYTly4XgtsS9xGf2FDW0+cBrxg+0vl+zcABwD/RGxLOdz2goohViHpLGCa7ZMljQQuBq6w/Z1SoI+3/YOVfp8G5ly/kHQb8H7bMyU9TPTMGEDM2FwNHNu0xJZ0O7Cb7Znl+zcCewOfAC6x/eWa8dUi6Qxi0+18Ij++YfvrdaOqq7QTuAJ4kpjtHcniZY3zgFubdNNHD0lnAi/a/g9JO7C4lcuTwAVN7NlUPmvH235Z0kPAD4lVgfHAE8DRTVoZAJB0NPB2YrVkiu35LccuAc63fXOt+GqRdANwaE9bEkl7AUfY/htJJwKjbR+xsu+Tj7TpA5I2IfrK7C3pr4iryGNsf4ZY+98WWLdmjP2tNGS7BThH0rjSxPBh22cRPVXeVfaiNdF4op/MJ4APAAeUqXwkHSZpfNXo+lnJjYXACUTBcCbwDWL57y5imbSpn11jiIs0gJOJ2+l/SeydOan05GmMsuT3KHCMpI8AXbaPt32K7X2I5dEmfq6cDTxCzFDtKmlTSaPKsXcQF3GNImltYg/rQEUzWYj9iUMkvQ/YpRxf+ffKGau+IWk/4tbnacTdBicAvyX2AXzL9o71oqujfOh/HphHTNM/TpwYNgAutf2GiuFVIWkn4MTSqG5QuQ36k8Cmtv9N0p3AP9u+rXKo/a5sWj+WeGrB/cB+tveRNM72A3Wjq0PSh4g2LV8j2gfs3XLsRuAQ24/Viq+Gsjz6UeAl4u6uS4FriM/db9vevmJ4/apclLh83QUcQezBm07sad0G+KPtg+tF2f9ax2Xpn0nahWi3cJftd3Tk/bKw6ryWE+SGRGE1HjiI6Ge1K9Ejo5FLPaV/yIHENPU8ohPwAqLY/GHN2GooObINcAexxONyN895wOXAQbb3qhljbZI+TRRYn+nE/ofVlaQ1bC+U9CmiLce2RIPQbxG3zn/L9tY1Y6yt9Kw6gthvNg64zPa5daPqP2UJfRfinLMO8APbv5O0LXEB+xSxx6hRj1Qr4/JO4may0cD/2r6u5fjXgYc6lStZWHVYuXraB9gNOL7nDgxJ7yeKieuIu5zmLvtVXl9KL6I3EfuppgEX2X683DI+i3he08wmbjJdWs8dX+XkeQaxF++U2nH1l5Zc2YfoKXOh7Xsljbd9fd3oVh1leXgP4vbwjYmLtkttX101sH5UcmUrYml4FjChFBE7EW1cfkvsL5q3nJd5XSm98A5l8fMBDyqHziF+l2bWiq2mlnH5HnF3/kFEU92LiZ6KC4BX3KGekllYdZika4GfEne+bUdcIRwCfJfYXNrE5zJdSSz9TQS+QDwodRLwJeDqphZU5cTwZuLEMJeYcbi35fi5xN6rZyuF2O9acuU64Dhihvc24CRiPwQ9rQaaZKmCcwZxknxE0mDb8xSPbGnMxRq0fa4cR3yu3EU8521izdhqkXQNcJ7tK1p+thPwKWCS7bOrBVfRMsZlR+CTwJ22z25tY7LS79fQc1qfKJvWr7K9bfl+BrGE8ThwFHBlk6alYdGY/KJniaL0JzqcaGL4PqJweKJWfDX1UkS8G7gX+KrtH0kaafuFmjH2p+XkyoPEFP6JmStMBI4ncuUO4pFZP21asfkqnyu7AV9sWq6UPYmfA4baPmGpYxsRWws+49KNvilWcFyOdgefVNDUO2v6ykDgVkm7SDoGeNz2ebZ/Tmw4/bCi43iTDCDGpLt8PxbY1fZ3ganAx0riN0o5MWxp+wtlrf9w4DRi+W9PSZs2qagqlpUrlxAXJ5kr9q+IJY1TgXOJpxd0L+/vv04t73NlCg3MlTLzfwHwFknXSTqi7C2CaOeyEXETSKOs4Ljc18n3zMKqs6YCvwfOJ/7BbiqbtSEaQD7U2k+kIZ4AHgPuUzw49iPE+j/EvpCxDV0KXNaJYQIxZo07MZC5sizLKyKaWnBmrixF0ddsD6KIuJjocfakpMuBE4kHLjfqubRQZ1wGdvLFmq78Ip9a9sbMJRpfTi63zA8g+vE0ShmTExWNDfcBfu3FTQz3BS6qFlxdrSeGu8vXrSeG3Zp2YshcWabMlaVkriyp7Bc6hdiEPQd40Pb7FX2+tidmZJrYULfKuOQeqw6RdBRxG+f3bd/d8vM3EtP1P7M9uVZ8NZQx6Sbu1rl7qWPdwO7lqruxFL29ljgxlP00F9n+cdXg+lHmyqvLXAmZK+0knUM8I/L00sLlXKLVxOWKR2btb/s7daPsf7XGJZcCO+c4oivyhZImSjq67JN5mNh0umXd8Ko4jrgd/EJJ15cx6VnO2IF4+HLjSDpK0imS3mp7hu0JLSfKbuBHTTpRFpkrvchc6VXmSrsdiSdbUO4ingAcVo4dWY43UZVxyRmrDpC0FTHdeDDxJPXdgQ8R7RYmE1eZ73WDume/ypjcT8zijbd9a7UgK5H0DHF31xbAy8QjSi6z/ZSkfYGFtq+qGWN/ylxZtsyVJWWutCsbsd8NPNZ6J6Sk/yEed3QA8Fnbd1YKsYqa45KFVYdIGgLQ2ktG0jDieV4fsD2uVmy15Ji0yxND7zJX2mWu9C5zpXda3Jm/p8nwlsBVxBMddqodXy01xiU3r3eIl2rOJ0m2Z0paADTyMRw5Ju1sT5b09+XrWUQPlctbTgxTmnaihMyV3mSu9C5zpXeOB5dTioc1bD8k6VKiWXVj1RiXnLHqY5LGAM/bfql2LKuKHJMllRODJZ1GXEWdVDumVUXmypIyV5Ytc6WdpAHQzKcVLE9fj0sWVimtIvLEkFZU5kpKq64srFJKKaWUOiTbLaSUUkopdUgWVimllFJKHZKFVUoppZRSh2RhlVJKKaXUIVlYpZRSSil1yP8DozEKon7n66cAAAAASUVORK5CYII=\n", + "image/png": "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T9nj7twqWHl7exMVFeXqMkRERKSW/PmTDXh7Gh64tLOrS6kVbnUpUEREROqvpZsz+HJjBr+5uCMtmtbPoRQKViIiIlLr9hzMZ/p/fiEqNICJAyJdXU6tcatLgSIiIlL/7Mg8wvg3fiKvsIR/3doPX6+6/TzAU1GwEhERkVqzce9hbpr1E9bCv6ecT7fwQFeXVKsUrERERKRWrN51kFtmr6CRjxfzJvfjvOaNXV1SrVOwEhEREaf7YXsWk99KIqSxL29P7keb4EauLumcULASERERp1q6KYPb562ibXAj5k3uV2/vAKyKgpWIiIg4zSdr93Lv/NVEt2zC3En9CA7wcXVJ55SClYiIiDjF+yt388AHa+ndNojZE+No6ld/Hq5cUwpWIiIictbm/pDKw4vWM/C8UF67uQ+NfBpmxGiYn1pERESc5qXEbTz12WaGdW3BCzf0ws+7/s5TVR0FKxERETljSzdl8NRnmxkVG87T1/bE27NhP9SlYX96EREROSsLVu0hJMBHoaqczoCIiIickdyCYr7cuJ8rerRSqCqnsyAiIiJn5Iv1+yksKWNkbGtXl+I2FKxERETkjCxak05EkD+92zZzdSluQ8FKRERETltmbiHLtx1gVGw4xhhXl+M2FKxERETktC1Zt5fSMssoXQY8joKViIiInLZFyWl0btmETi2auLoUt6JgJSIiIqdlV1Y+P+/KUW9VFRSsRERE5LR8tDYdgCt7tnJxJe5HwUpERERqzFrLwtVpxEUGERHUyNXluB0FKxEREamxTfty2ZpxRHNXnYSClYiIiNTYouR0vDwMl8foMmBVFKxERESkRsrKLB+tSefCjqEEB/i4uhy3pGAlIiIiNbJq10HSco7qbsBTULASERGRGlmUnIaftwfDurZwdSluS8FKREREqlVcWsYna/cyrGtLAny9XF2O21KwEhERkWot23qAg/nFjOoZ7upS3JqClYiIiFRrUXIagf7eXNQpzNWluDUFKxERETml/KISvtiwn8tiWuHjpehwKjo7IiIiclKHjhZz29yV5BeVck1v3Q1YHY0+ExERkSrtyspn4pwV7MrO5+lre9I3MtjVJbk9BSsRERH5lVU7s5kydxUlZZa5k/rRv0OIq0uqExSsRERE5DiL16Rz//trCA/0Y/aEONqHNXZ1SXWGgpWIiIgAYK3ln19v45n/biE+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", "text/plain": [ "
" ] @@ -213,7 +213,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZEAAAGRCAYAAACkIY5XAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3Xl4W/WdLvD3SN7XOPtiRWSDhETZSIGo0BrCEvYl5ZZSWtqOKe1M0+ncTjttp50ytNNeOqWFGgoUk0LZCVC2QhKR4EAiQhKyKftqRY7jTbIly5Ks7dw/jmTLiePYiqXfOdL7eR49to8k6ysT/Pq3S7Isg4iIKBk60QUQEZF2MUSIiChpDBEiIkoaQ4SIiJLGECEioqQxRIiIKGkMESIiShpDhIiIksYQISKipDFEiIgoaQwRIiJKGkOEiIiSxhAhIqKkMUSIiChpDBEiIkoaQ4SIiJLGECEioqQxRIiIKGkMESIiShpDhIiIksYQISKipDFEiIgoaQwRIiJKGkOEiIiSxhAhIqKkMUSIiChpDBEiIkoaQ4SIiJLGECEioqQxRIiIKGkMESIiShpDhIiIksYQISKipDFEiIgoaQwRIiJKGkOEiIiSxhAhIqKkMUSIiChpOaILIEq16pq6HAAlAKSEy9IpD0v82l+7vMqX8sKIMoAky7LoGoiGpLqmLg/AVABTAIwBMBLAqAE+libxMgEA7QBcp9wSrzkBHAdwqHZ5lTP5d0SkXQwRUqVY62EKgBn93CYD0Iurrl/tAA4n3A7FP9Yur2oTWRhRKjFESLjqmroyAJfEbhcDmAXgPGROd2sHgIMAtgL4NHY7WLu8iv/zkeYxRCitqmvqdADmQAmMS2O3mci+SR7tADajN1Q+ZZcYaRFDhFKquqYuH8AXAFwBJTAWIbkximxwGEqgfAxgde3yqnqx5RCdHUOEhl11Td35AJbGbl8EUCS2Is06CGAVgNUA6jhjjNSIIULnrLqmTg/g8wBuAXAzgOliK8pIAQBrAbwN4J3a5VUnBddDBIAhQkmKTbO9HsBtAG6AMpWW0kOGMkj/JoAX2e1FIjFEaEiqa+ouAvANAF8Bg0MNZAAfAXgGwGu1y6u8YsuhbMMQobOqrqkbB+BuAPcAMAkuh86sC8AbAJ4FsI5TiCkdGCLUr1h31U1QWh1LkTlrNrLFcQDPAXi2dnnVIdHFUOZiiFAf1TV10wF8H8BdYHdVprACeBTAytrlVWHRxVBmYYgQAKC6pu4SAD+WZflWSZKybeFftrADeBhALcdOaLgwRLJYdU2dBOBGAD8CcLngcih92gE8CeBPnCpM54ohkoVi4x13A/h3KPtUUXYKAngewO9rl1ftE10MaRNDJItU19SVA/iuLMvflyRpguh6SDVkAO8B+F3t8qqPRBdD2sIQyQLVNXUFAH4gy/JPJEkqF10PqZoFwI9rl1ftEF0IaQNDJIPFdsz9uizLD0iSZBBdD2mGDOAFAD+vXV5lF10MqRtDJENV19RdK8vR30mSbq7oWkizugE8BuB/apdXuUQXQ+rEEMkw1TV182VZ/l9Jkq4SXQtljA4Av4UymysguhhSF4ZIhqiuqZssy/KvAXyV6zwoRRwAfgHgudrlVVHRxZA6MEQ0rrqmLk+W5Z8C+KkkSfmi66GssAVAde3yql2iCyHxGCIaVl1Td2k0EnlGp9dfILoWyjphAP8L4AF2cWU3hogGVdfUFUdCwd/rcnLvkyRJEl0PZbWDAL5du7xqvehCSAyGiMZ86+G1S2U5+ld9Tu540bUQxcgAagH8qHZ5lVt0MZReDBGNqK6pGxUOdT+ek5t/h+haiM6gEcD3apdX/V10IZQ+DBEN+NbDH9wF4DGdPmeE6FqIBuHvAP6FmztmB4aIilXX1JWFg4EXcvIKbhRdC9EQtQH4Wu3yqlWiC6HUYoio1Nd+9+7F+pzct3Jy8zn2QVolA/gdlO1TeBhWhuKiNBW684FXf5mbX2hlgJDGSQD+A8D66po67t2WodgSUZE7//uVEfrcvHcKSysuE10L0TBzAbindnnVu6ILoeHFEFGJ//PLF75QWFrxem5+0WjRtRCliAzgDwB+Wru8KiS6GBoeDBEVuPO/X7m/aMTon+t0er3oWojS4FMAX+Y285mBISLQHb94vjSvsPgfhaUVPN+csk07gK/ULq9aLboQOjccWBfkhu//cUZBcdkeBghlqQoA71bX1H1bdCF0btgSEeDa7/y/68ZPm/tKbkFRqehaiFTgdwB+Uru8ir+MNIghkkZGk1m6wHzTDyddcNH/6HPz8kTXQ6Qir0KZvcUdgTWGIZImRpNZP7vqS4+Onz7v2zqdnt2IRKezArildnlVm+hCaPAYImlgNJkL5y/9+htjJs9cKroWIpU7AuD62uVVB0UXQoPDEEmxhdfdM2bqRUssI8ZNnie6FiKNcAG4rXZ51UeiC6GzY4ik0KW3/8vMKfO/uKa4Yiy3fCAamiCAu2uXV60UXQgNjH3zKbLw+m8smrrwyvUMEKKk5AF4qbqm7suiC6GBMURSYO6SL191weIb3ysqHzVWdC1EGqYH8EJ1Td2doguhM2N31jAymsxSychxy+ZeddfjxSPGcA8souERgXI2yUuiC6HTsSUyTIwms1Q8YsyXGCBEw04P4Lnqmrq7RBdCp2OIDIN4gMy75u4/M0CIUkIP4G/VNXVfFV0I9cUQOUcMEKK00QN4lkGiLgyRc8AAIUq7eIvkbtGFkIIhkiSjySwVlIy4bd41dz/GACFKKx2UFsntogshhkhSjCazpNPn3jj3qq88UjxizBjR9RBlIR2U6b88SlowhsgQGU1mCcD1c6+686HysYZK0fUQZbECAG9X19TNEl1INmOIDN2Vsy679ddjjLNmiC6EiFABYFV1Td1E0YVkK4bIEBhN5oumzK+6v/LCi+eLroWIekwG8F51TV2J6EKyEUNkkIwm84xxU00PTF101WLRtRDRaeZB2WuLv9PSjD/wQTCazJPKxlTef+EXb79Sp9PpRddDRP26EcBDoovINgyRszCazCPyi8t+Ov+au6/Lyc0vEF0PEQ3oB9U1dd8RXUQ2YYgMwGgy50s6/fIFS++5Jb+4rEJ0PUQ0KDXVNXVXiC4iWzBEzsBoMusA3HPh5bfeXjpqAqfyEmlHDoAXq2vqxokuJBswRM7shgkz5n9pwvkLeawtkfaMh7IYkb/jUow/4H4YTeaLCstGfm3mZbeYJUmSRNdDRElZAuAXoovIdAyRUxhN5vGQpPvmX/v1S3Jy84tF10NE5+S/OD6SWgyRBEaTOR/Ad2d/Ydn8koqxk0XXQ0TnTAdlfGS86EIyFUMkJrYn1rLx0+ddPOH8BYtE10NEw4bjIynEH2qvhYWlI2+dddmtl3EchCjjXAngv0QXkYkYIgCMJvM4SNK35y/92sU5efncf4coM/2iuqbuStFFZJqsDxGjyZwH4DuzPn/z3JKKcUbR9RBRyugAPFddU1cuupBMkvUhAmBZ+VjD3IkzF3EchCjzTQTwv6KLyCRZHSJGk3k+gOvmXHHHIp1OnyO6HiJKi+rqmroq0UVkiqwNEaPJXAHg2zMuvW5cUfloTuclyh4SgKeqa+q4oeowyMoQiU3nvbOofHSp4cJLvyi6HiJKu+kA7hddRCbIyhABMBfAYtOSOxfpc3LzRRdDREL8sLqmboHoIrQu60LEaDIXA/iWcd4XystGT5wpuh4iEiYHwNPVNXUcDz0HWRciAG7LKyypmLqgivPFiWgBgB+KLkLLsipEjCbz+QCuNi25c3ZOXgEXFRIRANxfXVM3Q3QRWpU1IRLbXPGfxk+bV1QxYcpC0fUQkWoUAHhMdBFalTUhAmApgLHTL75mMbfGIqJTXF1dU3et6CK0KCtCxGgyGwDcMmXhFWWFpRWTRNdDRKr0IHf6HbqM/4HFz0rX6XOCk+eYq0TXQ0SqNQ/A10QXoTUZHyJQ/mHMOH/xDZPzCopHii6GiFTt11zJPjQZHSJGkzkXwF15BcWeCTPmc2U6EZ1NJYAfiC5CSzI6RACYAYyZefktc3Ny84tEF0NEmvCT6pq6UaKL0IqMDRGjyVwE4I7iirHeMZNnLRZdDxFpRjmAX4guQisyNkQALAFQPPPzNy/W6fW5ooshIk35bnVN3VTRRWhBRoZIbJv3m0dOmhasmHAeN1gjoqHKA/Ab0UVoQUaGCIAbAUjTP3eNWZJ0XFlIRMm4g9uhnF3GhYjRZJ4I4MqyMZW+sjGTZouuh4g0SwduznhWGRciAJYBCE5bdNXFbIUQ0Tm6p7qmbqzoItQso0Iktr3JwoKSER0jJ07lJotEdK4KACwXXYSaSbIsi65h2BhN5n8CcMmcK/7PtAkz5mfkeSEdzcfx4TMP9Hzd2XYSC6//JnzuNhzfbYUuJxdloyfi8rv+A/lFJYN67pwrvoTNbz2Jhn2bMWrSNHzxaz8DABzavAbdPg/mVH0pPW+OSJ1cACbXLq/qEl2IGmXMiV5Gk3kUALM+N79pjHHWV0TXkyojxk3Gbf9RCwCIRiN4+Rd3wDjvMribHVh0073Q6fXY/NaT2Gl5ARffct+gnhv0e9FybA9u/8nTqHv213A1HkXZ6Ek4tHkVln73d2l/j0QqMxLAPwH4k+hC1CiTurOqAMjTLloyJycvPysOnGo8sA2loyeidOR4VM76HHR6PQBg7HkXwtfROujnQtIhGglBlmWEQ0Ho9DmwrX0Zs79wO3T6jPk7g+hc/F8eo9u/jAiR2Lnp1wBS8/gZ882i60mXo9vWYdpFS067fnDT+6i88JJBPzevoAjnzfsC3vzdvSgdNR55BcVoPX4AxrmXpaRuIg0yArhDdBFqlCnJuhhArnHeZVPyC0tGiy4mHSLhEI7vtuJzN93b5/qO1c9Dp9dj2qKrhvTcuVd9BXOvUnoBP37xf7Hw+m/igPUfOLF/CyomTcOCa7lDNmW9HwF4SXQRaqP5lkhsp96bALRWzrw4a1ohDXs/xajK81FY1ru7/aFPV+H4nk9Q9fX/xECnN/b33Lg2xyEAQPnYShzasgZXfut+tJ88BndLw/C/CSJtWVBdU5eRE3bOheZDBMACAOWjKqcXF5WPMoouJl2ObFuHaRf1/ntu2LsZuz54GVff+z/IyRv4OIRTn5to23srsPCGbyIaiUCORgAAkiQhHAoMX/FE2lUtugC10XSIxE4tvBWAyzB78XzR9aRLOBhA4/7PcN68y3uuWV97BKFuH1b9+d/x9wersfGVPwAAutxtWP3ETwZ8blz9rg0YPXkmistHI7+oBGOnzMYbv/0WJEgYNWl66t8YkfrdWl1TVy66CDXR9DoRo8l8IYAfSzq9verr//lvOXkFpaJrIqKMd1/t8qq/iC5CLTTdEgFwJQBf5YWXTGWAEFGafEN0AWqi2RAxmsxlUMZD2iZMn5c1XVlEJNzi6pq680UXoRaaDREA8wFI+cVluaWjJ84UXQwRZZVviC5ALTQZIkaTWQJwFQD3eXMvn63jsmoiSq+vVdfUafL353DT6g9hEgADAPcY4yx2ZRFRulVC+UM262k1RC4GEKmYMGVkYdlIg+hiiCgrfUN0AWqguRAxmsw5AK4A0GaYs3ie6HqIKGvdWl1TVya6CNE0FyIALgBQAiBQMf48Hn9LRKIUAlgqugjRtBgilwMIVEyYMjKvsGSU6GKIKKvdKLoA0TQVIkaTuQTAIgBtE2bM5zxtIhLtumyfpaW1Nz8TSs2REePPmyG6GCLKeqMBDHx4T4bTWogsAhDIKyzJKyrLnh17iUjVsrpLSzMhEjs3ZD4A16SZi6ZKOp1edE1ERABuEF2ASJoJEQDnAcgFEB5VOYPjIUSkFvOqa+oqRRchipZCZDYAGZBQOmoCx0OISE2ytktLEyES2ytrMYD2sVMunJCTV1AiuiYiogQMEZUbDWAMgK5xU+awFUJEanNldU1doegiRNBKiPSMgZSPNfCcViJSm0IAZtFFiKCVELkEQJc+N19fUDJiouhiiIj6sVh0ASKoPkSMJnMBgAsBtI8xzhzPqb1EpFKXii5ABNWHCICpACQA0YoJU7N2Gh0RqV5WrlzXQoicF/+kdNR4hggRqdXo6pq6rJv4o4UQmQ3ACwBFZaMYIkSkZlnXpaXqEDGazHoA0wF4ispHF+UWFI0QXRMR0QAYIiozFkAOgMiY82axFUJEascQUZme4CgfO5khQkRqN7e6pq5IdBHppPYQOR9AGABKKsYyRIhI7XKgHFmRNdQeIhcC8EiSTuIiQyLSiKya6qvaEDGazEUAJgDwjRhvrNDn5OaLromIaBBMogtIJ9WGCIBJAGQActnYytGiiyEiGqRZogtIJzWHiAHKSnWUjBjHECEirbhAdAHppOYQmQHADwCFZRUMESLSitJsOulQzSEyGYAPAPKLyxkiRKQlM0UXkC45ogvoT2yl+jgAjQCQX1gySmxFRESnk+WoHOr2dwQ6O7py8gs2FJWN2gjgEICtomtLF1WGCIAKxHbuzS8qzdfn5mXV4h0iUg9ZluVwMOAJ+r3OQJfHFehsd3Z1tDg9bY0ud7OjPRoJRaGM4b5pt1nfEV1vuqk1REZDmZmFsjGV3C+LiFIuHAx0Bv1eV3dXp9Pf2e7scre6Op0nne7m4+3hYCA8wFP1AKIApqSpVFVRc4joAaBk5LgKwbUQUYYIh7p9IX+Xs9vX6fJ3tjt97jZnp6vJ1dFkd4YCXaEBnqqDcgRu/Nbn20LperelqGxVU2uITAAQAoDC0pEMESIatEg4FAj6u1zdPo8z4O1w+jxOl9fZ5Oxotju7uzzdAzxVQt+g0EFpYUixj80AjgBwxD53AnAB8NhtVjmFb0nV1BoiEwEEAKCgpJzdWUTURzQSDgb9Xa5uf6cz4HW7/B6n0+tqcrqbHS6fx+kb4KkSgHwARVCCIt4VJcXubwFwEIAdQBOUkHACcNtt1miq3o+WqTVExiMWIrkFxaWCayEiAaLRSDgU8Lm6fZ2u7i630+d2Or3tLS5Pq8PpdTV7z/L0xKDIBRCBEhQSlFA4CuA4gJOxr50AOuw2ayRV7ydTqS5EjCazDsAYxKb36nPzTu1/JKIMIUej0VC3r73b53V2d7mdPo/L1dXR4vS0nnB5Wk+4Y/NrziQPSkgUxT5PDIoOKN1ODgAN6O16ctlt1oEGyWmIVBciAMrQ2weJnByGCJGWKWspAh3KzCe30+9pd3Z1tLg8rSec7taGDjkaGSgpctE7RpGP2H56ULqhPFD+2EwMCieUoAim8j0NhcPhyAFwHpRdOGZAOeJiBoCdBoPhxwJLGxZqDJGSxC90ObkMESKVk2UZ8bUU3V0ep7+z3dXlbnV2tjY63S2Ojkg4OFA3UQ56g6IAvUGhg7L10YnY7TiANsTGKew2ayCV72koHA6HDspakcSQiN+mQAnDUxWnrcAUUmOIFCKhDatnS4RINcLBgDfo73J2+zwuf2eH0+dudXa2nXR1NB93hYP+s62lSAwKoDcouqEMYu9Bb1DEWxV+Nc18cjgcE3F6SJwPYCp639dgTRve6sRQa4hIAKDPzdfr9Pr+EpyIUiQSCvqCfq+r29fp9HvbnT53zxRZV9DvHaib6NS1FPFuaQnKeEUTlJlPx6HMgoqPU3hVFhRjcXpIzAAwHcPbehjvcDiKDAbDQLPJVE/VIVJYOoKtEKIUiIRD3aFAl7O7q9MZ6Opw+dxOp9fV5OpotjsDXvdA3UQSlL+44zOfTl1L0QLgGJSgiK+lcEJlaykcDkcFTg+J+K08jaUYAexL4+sNO1WHSH5xOUOEKEnRSDgUDPhcQZ/HGfAqM5+87c1Od/Nxp8/dNpi1FPGZT6eupWiD0qJwoHeKrAvKFFnVrKVwOBwl6D8kzgeglk1dx4EhMuzKoTR9kV9UyhAhGkBsLUV70NfpDHS5XX6Py+ltb3a6WxpcXldT51menhgUOegNivhainooLYpG9C66a1fTWgqHw1GAvgGRGBrjBZY2WONEF3Cu1BoiIQDIKyxhiFDW61lL4fe6urs8Tr/H5fK2tzg9bQ3OztZGjyxHB+omiq+liE+RjaJ3QNsNZWqsA8rsp8S1FAPtI5VWDocjF8ogdH9BUYneFpIWaSHoBqTGECmDsqEZcvOLGCKUFWRZlsPdfne3MkXW5e90Obs6Wp2dbY0ud4ujIxoJD9RNdKa1FDoAXigBEQ+LeIvCZbdZB9pHKq0cDoce/a+lmAFl3EAvrLjUYkskBUoRa4no9PpM/YdDWah3LUWXq9vndvo7O5y+jlZXp7PR2dF0vP0sayn06B3MPnUtRQC9i+4c6J0i67LbrP5UvqehcDgcEpS1FP2NUZxpLUWmY0skBUoRa4kQaVE42N0V9HudsV1kXV0dbc74uRShbt9gthsvwulrKYJQBrH3QhmnaEVvq8KnsplPE9B/UEzD0NdSZDq2RFKgBMDZBgSJhIqEg/74ortAZ0efcykGsZYicYrsqWspmgEchrKLbCt6xyk6VRYUY3DmtRQlAzyV+mKIpEAu4ivWZVk1/9NQ9omtpXB1+5Ttxn3uNmdsiqzL39k+UDdRfC1FvFWRuJZChrKWYi+UrqfE7cY9KpsiOwJnXkvBIxqGx2jRBZwrNYYIUdpEI5FQLChcgS630+dxOrtczS53S4Ozq6Ola4CnJq6lKETfKbKAMi5xGErXUxN6F925VTZFthhnXkuh+V9wGqD5/bMYIpS1fB7n8Y0v/+GvZ9luPDEoTt1uvB3KWgoHlIHteNdTu5q2G4+tpZiO/rufJggsjU4/aldz1Bgi7MKi9JBlOfbPLRe9YxR56LvdeAeUKbLx7cYTp8iqbS3FVPTf/WSAttdSZDKGSArIp31ClALRSCQfwGQAXVBaEsfR9wAjpwrXUhjRf/fTecjctRSZTOdwOPINBoNq/p0NlRpDhCgtCstG1gP4FxWupajEmddS5ImrjlKkCMp2+JrEEKGspc/J7RYVILG1FP2NUUxDBnRx0JAUQRlf0yR1hwin+JKGORyO0eh/jGI6lEW1RIDG/2hQdYiEuv2qOf6SqD8Oh6Mc/Y9RzABQIbA00g5Nr+JXdYgEA12q6aum7JWwlqK/7qcxAkujzKCadUPJUGOIyIhNRwz6PAwREsrhcBRC2QmXKFVUs6YoGTrRBfTDj9hUxUAXQ4SE4/oKSjXVrDdKhhpbIp1QDqYK+D3tmj7AnrTp6quvHglgPoDJJSUlU//0pz+JLokym6ZbImoMEQ9i5x+Hg/5wNBoJ63R6NdZJmasKwFcAtEWj0YF25CUaDpoOETV2Z3mQcDhNNBxilxaJ0A6gWZIkjodQqmm6O0uNIdKBhBCJhIIMESLKZGyJDDM3EvYACoeDHBchokzGlsgw6xMabIkQUQYLGQwGTf+hrMYQ8UM53AcAEO72D3QwEBGRlml2z6w4NYZIn1QOeDs0/0MmIjoDl+gCzpUaQ6RP91WXu80pqhAiohRjiKSADwmrhDvbGjX/QyYiOgPN/35TY4h0xD5KANDRfNwlc0t4IspMDJHhZrdZIwDaENseORLqjoSDAY/YqoiIUoIhkiInkHBQS9Dv5bgIEWUihkiKOKAcGQkACHR5NP+DJiLqR4PoAs6VWkPkJBJqC3S2syVCRJmoXnQB50qtIeJCwoLDLncrWyJElInqRRdwrtQaIk70meZ7kiFCRJkmAnZnpUzfab5Ndlc0GtH0TpdERKdoNBgMmt58EVBpiMSm+bYgNkMrGglFu73uk2KrIiIaVvWiCxgOqgyRmD7TfLs6WjXf7CMiSlAvuoDhoOYQOYaEab7uFgdDhIgySb3oAoaDmkOkPvGLNsfBE4LqICJKhX2iCxgOag6RBiTM0PK0NrjDwUCnwHqIiIbTLtEFDAc1h4gHyiytgvgFn8fF1ggRZYIggAOiixgOqg0Ru80qQ2nulcWveV3NHBchokywz2AwZMSyBdWGSMw+JLREOpqOMUSIKBNkRFcWoP4QaQDQc5ZIy7G9jbIc5dkiRKR1DJE0aYx91AFAqNsX6u7qbBZYDxHRcLCJLmC4qDpE7DZrEIAdQEn8Wqez8Yi4ioiIhgVbImm0B0Bp/IuW+n2HBNZCRHSuHAaDIWO2cdJCiBxBQp0nD20/HgmHAgLrISI6FxtEFzCctBAix6AsOpQAQI5GZK+r6bDYkoiIksYQSSe7zeqGMi7S06XlOnGEXVpEpFUMEQE2ARgR/6LxwGeHZVnmVF8i0poOALtFFzGctBIifTYq83mcvkBnO7dAISKtsRoMhujZH6YdWgmRBgBdAPLjFzqajx8UVw4RUVIyqisL0EiI2G3WKIDNAEbGrzUftTFEiEhrGCIC7QCQG/+i1b6vOdTt9wish4hoKDqhjO9mFC2FyGEo+2j11OxpbdgvrhwioiFZZzAYQqKLGG6aCRG7zeoHsB8Js7Qa9m3ZIa4iIqIhWSW6gFTQTIjEfIqEfbRaju0+2e3rbBFYDxHRYL0vuoBU0FqI7EPC6nUAcDoO7hRXDhHRoOw2GAx20UWkgqZCxG6ztgI4CKAifq1+18e75Gg0o+ZdE1HGeUd0AamiqRCJWYuELVC62lu83o4Wbg9PRGr2tugCUkWLIbIbQBhATvxCy9HdHGAnIrVqhrLOLSNpLkTsNqsPgBXAmN5rGw9we3giUqmVmbbVSSLNhUiMFUBe/ItIqDvS0Xw8ozY1I6KM8aLoAlJJqyFyGMpumIXxC437uWaEiFTnmMFg+ER0EamkyRCx26wRKAPso+PXmo7sOtHd5eGaESJSk5dEF5BqmgyRmC04pf6mI7sybl8aItK0F0QXkGqaDRG7zdoMpVurZ83I0W3rbOFQd5e4qoiIeuwyGAx7RReRapoNkZgPAJTFvwgHA2Gn4+BWgfUQEcVl9IB6nNZDZCcAPxIOqzq89YMt0WgkIq4kIiJEwBBRP7vNGoCyqdm4+DVfR2uXu/n4LnFVERHhHwaDwSG6iHTQdIjEbIByzog+fuHIZ2s3yrIsiyuJSP0aGxvx5S9/GVdeeSWWLFmCp59+GgDwz//8z1i6dCmWLl0Ks9mMpUuXnvbcQCCAm266Cddeey2WLFmChx56qOe+73//+7jmmmvw4IMpjZeXAAAbUUlEQVQP9lx75JFHsGbNmtS/KfX4s+gC0iXn7A9RN7vN2m40mTcAWAygEQDaG486O9sa95WNmXSh2OqI1Euv1+PnP/85TCYTvF4vbrjhBlx++eX48597f//96le/Qmlp6WnPzc/Px8svv4zi4mKEQiEsW7YMV1xxBQoLlaVba9aswbJly+DxeOD3+7Fjxw7867/+a9rem2CHAWRNYmZCSwRQBthzkbBF/LEddRl3ljHRcBo3bhxMJhMAoKSkBNOnT0dTU1PP/bIs491338Utt9xy2nMlSUJxcTEAIBwOIxwOQ5Ik5OTkIBAIIBqNIhQKQa/X46GHHsIPf/jD9LwpdXjSYDBkTU9IRoSI3WZ1ALAhYT+tlmN7Tnrbubsv0WA4HA7s2bMHCxYs6Lm2efNmjB49GlOmTOn3OZFIBEuXLsWCBQtw2WWXYcGCBZgxYwYmTpyI66+/HjfeeCPq6+sBAHPmzEnH21CDAIAVootIJ813ZyV4B8B/Jl6w7/zoo9lVX5omqB4iTejq6sJ9992HX/7yl326rt56661+WyFxer0eq1atgtvtxre//W0cOHAAF1xwAe6///6ex3zzm9/Eb3/7W9TU1GDv3r24/PLLcdddd6Xy7Yj2isFgcIkuIp0yoiUScxjAIQCj4hcaD2473uk8eUBcSUTqFgqFcN999+G2227Ddddd13M9HA5j1apVuOmmm876PcrLy3HppZeirq6uz/U1a9Zg7ty58Pv9OHDgAB5//HG88cYb8Pv9w/021CRrBtTjMiZE7DarDOAtJBxYBQAHN73/gSxHs6Z/kmiwZFnGj370I0yfPh333ntvn/s2bNiAadOmYcKECf0+1+l0wu12A1BmasUfHxcKhbBixQp85zvfgd/vhyQpw5XRaBTBYDBF70i4DQaDIWPPDTmTjAmRmL0AHEjYCsV14nBb+8n6beJKIlKnLVu24I033oDVau2Z0rtu3ToAwNtvv42bb765z+Obmppwzz33AABaWlpw55134pprrsGNN96Iyy+/HFdddVXPY5999lksW7YMhYWFmDVrFmRZxtVXX41FixahvLw8fW8yvX4jugARpExbTmE0mWcD+BGA+vi14oqxJZfe/r3v6/Q5ucIKIzVaX7u8qurUi1dfffXtAJYCaCwuLs6tqan5WdorI63ZbjAYFoouQoRMa4kASmtkDxJWsXe1t3hb7fus4koiogyXla0QIANDJDY28iqAAiS8v/0b37GGg9zhl4iGlyzL+wG8IboOUTIuRADAbrPaAWwEMD5+Lej3BhsPbqsTVhQRZSRJkh7M5DPUzyYjQyTmLSj7afWshTn06fvbuv3eNnElEVEmkWXZDuB50XWIlLEhYrdZW6Hs8NszRzEaCUeP2zZ+IK4qIsokkiT91mAwhEXXIVLGhkjMKgAhKOMjAID6HesPdLqaDokriYgygSzLBwA8LboO0TI6ROw2qxfASiTM1AKAvXWvvxuNhDN2xRMRpZ4kST/N9lYIkOEhErMBQDsSVrJ72k54Tuzfym4tIkqKLMufGAyGv4uuQw0yPkTsNms3gL9B2eG3Z6v4/Rvf2eLzuLLi5DEiGl6SJP276BrUIuNDJGYngE0AJvZekrHv4zff5nnsRDQUsiz/3WAwcPFyTFaESGwB4ksAwgAK49ddJw63tRzd/ZGwwohIU2RZDkuS9FPRdahJVoQIoByjC2U+9/jE63vWv7Ghu8vTIqYqItKYJw0GA4+XSJA1IRLzCYDdSAiSaCQUPfDJP96SM20nSiIaVtFotFWSpP88+yOzS1aFiN1mjUIZZM8BkBe/3nzU1uh0HPxUWGFEpHo6ne4HBoPBLboOtcmqEAEAu83aDGWDxomJ123rXl3Lbi0i6k8oFPrIYDC8KLoONcq6EIlZB+W8kdHxC+GgP7z7w5WvchEiESWKRqOh3Nzce8/+yOyUlSFit1nDAFYAKEbCBo2uxiNO+64N7worjIhUJxqNPmgwGA6KrkOtsjJEAMBusx4H8DoAQ+L1w1vW2NpPHtsupioiUpNQKGTPycn5teg61CxrQyTmfSiztSYkXtyx+vn3OD5ClN1kWZZzc3P/yWAwdIuuRc2yOkTsNmsEQC2AIBL21uL4CBF1d3c/aTAY1oquQ+2yOkSAnkWIf4YyyH7q+Mg/hBVGRMIEAgF7QUHBv4muQwuyPkQAwG6z7gPwGk4fH9nF8RGi7BKNRiMA7jAYDAHRtWgBQ6TXezjD+Eigy9MspiQiSrfOzs6HZsyYsUV0HVrBEIkZaHxk5+rnXgwHA53CiiOitOjq6tpbXl7+M9F1aAlDJMGZxkc8bSc8e+pef5ED7USZKxwOB3Nycm4zGAw8HmIIGCKniI2PxNeP9Bxi1VK/p+nQ5jWvyXKUGzUSZSCv1/uD6dOnc1HhEDFE+vcPAJtxykD7cduGQw17P31PTElElCpOp/N1k8n0uOg6tIgh0o/Y+MjTAI7hlIH2/Rvf2dpq389TzYgyhNvtrpdl+aui69AqhsgZ2G3WAIAaAJ1I2KgRAHasfs7iaT2xV0hhRDRsuru7/Y2NjdcvWLCAq9KTxBAZgN1m7QDwBwB6JMzYAmR89o+n/+73uBoElUZE5ygajcp2u/2+a665Zp/oWrSMIXIWdpu1EcDDAEYCKIhfDwcD4W3v/fWlYKDLJaw4IkpaQ0PDiiVLljwnug6tY4gMgt1mPQDgSSgHWfVM/fV5nL7t7z/7t1DA1yGsOCIaspaWlp3bt2/nGSHDgCEySHabdROUExEnI+Hn5mltcG97/5lnGCRE2tDR0dFSX1+/5Hvf+x6n6w8DhsjQvAfgQyhB0rOGhEFCpA0+n8+3c+fOpcuWLXOKriVTMESGwG6zRgE8D2ArGCREmhIOhyNbtmypvvvuu7mp6jBiiAyR3WYNAfgLgM/AICHShGg0Klut1l/dfffdL4muJdMwRJJgt1mDYJAQacaWLVuee+aZZx4QXUcmYogkiUFCpA27du368Mknn6y2WCwcSE8Bhsg5GEyQBP1eDuARCbJnz57PHn744ZstFktIdC2ZiiFyjs4WJJvffPxpn9t5XFR9RNlq7969ex599NGlFovFK7qWTMYQGQYDBYm/s92/6Y1H/+ZucewWVR9Rttm/f//hxx577IZ333237Vy/lyRJsiRJzyV8nSNJUqskSe+e5XmLJEn60zm87nmx1/5VwrXRkiSFJEl69CzPrZIkyTyI73/Ov5cYIsPklCA5Dwk/20ioO7L5zSdebzm252NB5RFljcOHD9c/8cQTt7z99tv2YfqWXQDmSJJUGPv6agAnzvYkWZa3yrL8/cG+iCRJOf1cPgrgxoSv7wCwZxDfrgrAgCEyXBgiwygWJE8AWAslSHJ775Wx0/LCOvuuDW/L0WhUSIFEGe7YsWMNTz755K2vv/76cO+y/T6AG2KffwVAz1RhSZIuliTJKknS9tjHC2LXq+KtFUmSRkqS9KYkSbskSdokSdLc2PX7JUn6iyRJawD8rZ/X9QPYJ0nSotjXX4ayc0b8tW+SJOnT2Gt/IEnSOEmSzgPwHQD/JknSDkmSLo9d/7skSTtjt3jA6CVJekqSpD2SJK1JCMpBY4gMM7vNGgbwHJR/ZJUA+vxHObjpve0HPnn3hUg4xK2niYaR3W5vfOqpp257+eWXd6bg278M4E5JkgoAzAXwacJ9+wF8QZblBQD+C8Bv+nn+fwPYLsvyXAA/Q9/AuAjALbIs33WW164EEAHQmHDfBgCXxl77ZQA/lmW5Hsofs3+UZXm+LMsfA/gTgPWyLM8DsBC9rZkZAB6TZXk2gA4Ay87+o+irv+YTnSO7zSoDeN9oMrcB+C6U/zie+P2OPZuO+js7Vsy54o6v5uYXlomqkyhTHDp0yP7444/fuXLlyq2p+P6yLO+K/YX/FSjbHyUqB/CsJEkzAMjo0wPR4zLEfkHLsrxOkqRRkiSVx+57W5Zl/wAvvwrArwA0A3jllPsqAbwiSdIEAHlQDtLrz5UAvh57/QgAtyRJFQCOybK8I/aYeFf8kLAlkkJ2m3ULgN8CyMcpB1u1Hd/fsvWdvzzl7+xo7PfJRDQoNpvt8B/+8Ievrly5clOKX+ptAL9HQldWzK8AfCjL8hwANyHhyIgEUj/X4utWugZ6UVmWg1B+wf8QwOun3F0D4FFZlk0A7jvDaw8ksUckgiQaFgyRFLPbrIeg/CPzQdlKvofX1ez9ZOXDK9ocBz/t98lENKDNmzfve+SRR6rffffdjWl4uRUAHpBl2XbK9XL0DrR/4wzP/QjAVwFlrARAmyzLnjM8tj8PAfgPWZZPXXeW+Nr3JFzvRJ+D9LAWSq8IJEnSS5I0bD0gDJE0sNusTQB+DaAep0wBjoSDke3vP7Pq8JY1r0TCoYCgEok0p66ubvsTTzxx7+rVq9en4/VkWW6QZfmRfu76HYDfSpK0EcopqH2eFvt4P4BFkiTtAvD/0PcX/mBee48sy8/2c9f9AFZKkvQxgMTpzO8AuC0+sA7gXwFcIUmSDUqrZvZQXn8gkixzJ4B0MZrM+QC+CWXqnQNAn1W05eMmjzBdeecdhaUjJvb3fBp262uXV1WdevHqq6++HcBSAI3FxcW5NTU1P0t7ZXRGsizj/fff/+S11177nsVi2Sa6njORJGkZgJtlWR5SYGgNWyJpZLdZu6GsJXkBwCQAIxLvdzcf72D3FtGZhcPh8Kuvvrr2tddeq1Z5gNwM4H+gnIia0RgiaWa3WaN2m3U1lO4tGUqY9Ih3bx3avJrdW0QJfD5f12OPPfbm6tWr77NYLMO9DmRYybL8tizLM2VZtoquJdUYIoLYbdbDAH4JYDeAKThlWmD9jvX7P3u39kl/Z/tZV8YSZbrW1tbW3/zmN6/s3Lnz3ywWyxHR9VAvhohAdpvVA2WK3gtQZm717d5qcXRYX314RfNR23qucqdsdejQoWMPPPDAc42NjT+zWCwNouuhvrjYULDYkbtrjCbzUQD/AqV7qxGxWR3RSCi664OX6sYYZ+2b+fmbby0oKR8vsFyitNqwYcOuv/71r8/JsvykxWLpFF0PnY4tEZVI6N6yQVk1mpd4f6t9X/PGVx56qunwzg/laDQioESitAmFQsGXX375oxUrVvxeluVHGCDqxRBRkVj31qMAngcwDsDYxPujkXDUtu6Vj7avevZJn4dnlFBmcrlcrQ8++OB7a9aseQDA8zxQSt3YnaUyse4ti9Fk3gNlTcn5ULq3erYncDYcat348h/+esHi6xdOmnXx1fqc3KFudUCkSjabbc/jjz++KRAIPGyxWHgGjwawJaJSdpu1EcrK1r9B2XdrXN9HyDjwyT+2bXrj0UfdzY5Tt2Eg0pRQKBRcuXLlh3/84x/fCwQCv2SAaAdbIipmt1kjANbGWiVfh7JVQTOUfbgAAL6O1q7Nbz3+xsQLLto6deGV1xSWVkw6w7cjUiWXy9X82GOPfXLs2DELgL/xOFttYYhogN1mbTKazL8HcDGUMBkJpYurZ9pv44HPjjce+Kx26sIrLzTMWbwkr6B4pKByiQZFlmV5+/btO5966qld3d3dzwBYb7FYOJVdYxgiGhEbK9lkNJn3AfgSgC9AOaekPfFxR7et21u/8+P95y++ftGEGfO/mJObXySgXKIBdXZ2up577rlPtm7duh/AoxaLpV50TZQchojG2G1WN4CnjSbzRgB3Q5kO3IqEMwmikVB0/4a3Nh/9bO2OmZfd/Pkxk2ct1un1/R2UQ5RWsizDZrNtfeKJJw4GAoENAJ5j95W2MUQ0ym6z7jeazL8E8DkAdwIwAmhCwiyuoN8b3GV58cOSkeO2XGC+6YqKCectkCRdf4fjEKWc1+ttf/7559dv3rzZCWWXhjqLxcJtxDWOIaJhsYH3TUaTeTuALwK4HcoeXCcBhOOP87qavZ+9W/vOyEnTP5m68MrPjxg32STpdKeee0CUErIsy7t37/7siSeeOOD3+/cBWGGxWE6KrouGB0MkA8S2mF9jNJk3AbgWylkYESgtk56BSteJw22uE4ffKhk5ft20RVddMqpyxkVcY0Kp1NbW1vD8889/smvXrk4o54Ovs1gs4bM9j7SDIZJBYiveVxpN5vUAboVy+JUfQAt6T1iD19XUuXPN8x/kFZZ8NP1z1ywcO2X2pbn5heViqqZMFAgEutatW/fha6+95gRwBMDTFoulUXRdNPwYIhnIbrO2APiL0WReA2Um1xwoYyXNSGiZBP3e4N6P3ti0f+Pbm6cuvHL2hPMXmAuKucEjJS8ajcp79+7d/PTTT+9xu90A8CqAtWx9ZC6GSAaz26z1RpP5IQAGKN1ci6G0SJqQcDRvNBKOHt6yxnZ4yxpb5YWXTjXMvmRx8Yix0yRJ4iA8DVpzc7P9hRdeWL97924JwD4AL7L1kfkYIhnObrPKAI4DeMpoMv8dQBWAq6EMwLdC6e7q0bB309GGvZuOlo6eWGY0XTZ3VOX0+XmFJaPSXTdpR0dHR/Pq1avXr169uguAG8pWPTs48yo7MESyiN1mbQPwmtFkXgWlVXIzlD25XAA8iY/tbGv07P7w1Q0ANoyfPr9y0syL5pePnTybA/EU19nZ6aqrq6t78803W2VZzgXwNoA1FovFf7bnUuZgiGQhu83qhbJT8HoAC6EMwhuhjJu0QpnZ1aPp8I6GpsM7GnLyClZNNn3+gnFT5swvrhgzjWtOspPP5/Ns3Lhx/cqVK4+Gw+GRULquXrZYLM2ia6P0Y4hkMbvNGoSyzmQzgJkALoeyeFEPpVuiI/Hx4WAgfPSztXuOfrZ2T8nIcSVG02VzR0yYMrOwdEQlAyXzBQKBri1btmx86aWX9gUCgRFQNgJ9GsBudl1lL4YIxffl2gtgr9FkfgHAXABXAZgCZSD+tLETr6vZu2f961YA1sLSisKJMxdNHzVx+oySUeOm63PyCtP8FiiFvF5v+6effmp9/fXXDwQCgZFQFrI+BmCbxWLhKZtZjiFCfcS6uqwArEaTeTyUlskSKKcsBqEESp/pmv7Odv+RLRbbEVhskk4vjZ8+r3LseReeXz6mckZ+cdm4U1+DtMHlcp3csGGD9Z133jkSiUTGQvl9sQLAJp42SHEMEToju83aBOAdo8n8HoDpAC4DcCmU7q4wACcS9uoCADkakU8e3OY4eXCbA8DastGTyiacv2DGiHHGqYVlIytz8wvL0vw2aAhkWZYdDsfBtWvXfvLxxx83Q/njoRTKXlcbLBZLQGyFpDYMETqr2B5dBwAcMJrMLwKYBmA+lPNN4i0NN5QZXn36xj1tJzyethOfAfgMAEpGji8dY5xVWT62srJ4xNjKgpIRE7jDsHh+v9+7f//+HatXr9528ODBEIBRAEoAvATAarFYugb+DpStGCI0JHab1Q9gN4DdsUCZBGAWgEugjKEAQADKtOHTVil7XU2dXlfTPigzeqDT5+hGGy4YO3LS1MrSURMrC8tHTcrLLxop6XQ8ujnFZFmWGxsbj2zatOmz1atXHwyHwyMAlEH5b7cCwGaLxdI98HehbMcQoaTFBuQdsdsao8lcDmAGgIsALICyoFGCEiqe2Mc+opFwtKV+T1NL/Z4mAFsBQKfP1ZWPrRxROnrSqOIRY0YWllaMyi8uG5lfWDIqJ7+wnCvpz43P5/Ps3r1726pVq7bX19d7oXRZTYayx9UKKLOtuE0JDQpDhIZN7MCsrQC2Gk3mHCitlHhLZRaUX1Tx7i4vlGA5bXZPNBKKtp885mo/ecx16n36nDx9+bjJFaWjJ4wsKhtdkVtQWJSTV1CYk1tQlJObV6jPzSvU5+QV6nJyC/U5ufkpequaEwgEfMeOHdu3devWPevXr6+PRqPFUI5ZLgewGYAFwDFO1aWhYohQStht1jAAe+xmBQCjyVwGoBLKaYyzoQzW50BprchQphH7oLRY+j1rOxIORmJb2redrQadPkdXUFpRWFBcXphXUJQv6fS6aCQ81jD70mcrJkxphzKOk7HiwbFly5Y9H3/8cX0kEtGht9XRDOB5AFstFotnwG9ENACGCKVNbKv6vbHbe0aTWQ/ll9okABOgbBRZGftcByVYdFACxZ9wG9Rfy9FIOOrraO3ydbQmDgrLzUdtn9ht1hPD867Uxefzeex2+8EtW7bsjQWHDKW1MRnKGJUVwMcAjlosln6DmmgoGCIkTGzW18nYrYfRZNYBGAGlu2UUlBlgRgAToYRMvOUSDxMp4RaBskNxOHaLPyb++Iw60TEcDoeamprqjxw5cmTr1q1H9uzZE2+hlUMJZQnAMQCvA9jOWVY03BgipDqxAXtX7HY48T6jySwByAdQGLsVJXxeCGV2UTmUECqCEhq6hFszNNyNFY1G5Y6Ojia73X7UZrMd+eSTT453d3fHx5XiLY54cLwFZZD8rF1/RMliiJCmxLa2D8Ru7YLLSblAINDV0tLS0NDQ0HDo0KGG7du3N3o8nmDs7hworbVCMDhIEIYIkUr4fL5Ot9vd2tra2lJfX3/CZrM1HDlyJHETTAlKS2s8lK65EAAblIWchxkcJAJDhCiNotFo1OfzuTs6OtqcTmfryZMnW48fP962f//+1o6OjlMX9umghEZZ7HMAqAewBsoOAse5noNEY4gQnaNIJBIJh8PdoVCoOxQKdXd3d/u9Xm+nx+PxdHR0eFwul6elpcVz8uTJzsbGRq8sn3FyWXxMJx+9EwHsADZAGRs6arFYvOl4T0SDxRAhGoDf7w+vWLHir7Isy9FoVI5Go3IwGAx7vd6g2+3udrvd3QkD24OVB2XQvxjKwH8USkvDBWWx5j4AJwA0crdcUjuGCNEAotGovGHDhuNDfJoeSmsifstDb8tCB6ALylYxx2If2wC0cNEfaRFDhKh/8a6l+PoTHZRw0EP5/ya+3kROuMUfG4KyTX4TlPNXmqHMJGuFEhhd3F6EMgVDhOh0hwHsh9LNFEHvTKiu2M0b+xiAcp5KN5SV9B4AnQACDAnKFtIAg3xEREQD4pkNRESUNIYIEREljSFCRERJY4gQEVHSGCJERJQ0hggRESWNIUJEREljiBARUdIYIkRElDSGCBERJY0hQkRESWOIEBFR0hgiRESUNIYIEREljSFCRERJY4gQEVHSGCJERJQ0hggRESWNIUJEREljiBARUdIYIkRElDSGCBERJY0hQkRESWOIEBFR0hgiRESUNIYIEREljSFCRERJY4gQEVHSGCJERJQ0hggRESWNIUJEREljiBARUdIYIkRElDSGCBERJY0hQkRESWOIEBFR0hgiRESUNIYIEREljSFCRERJY4gQEVHSGCJERJQ0hggRESWNIUJEREljiBARUdL+P0s+T90GGyBMAAAAAElFTkSuQmCC\n", + "image/png": "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", "text/plain": [ "
" ] From da4136a9a5c74fc45f7f0692e500762a6a303f26 Mon Sep 17 00:00:00 2001 From: johoo <57379875+johoo123@users.noreply.github.com> Date: Tue, 6 May 2025 15:05:01 +0800 Subject: [PATCH 06/17] 5.5 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit python初步的认识 --- Part.1.E.2.values-and-their-operators.ipynb | 34 +-- .../5.2.md" | 227 ++++++++++++++++++ .../5.5.md" | 0 .../divmod\345\207\275\346\225\260.py" | 14 ++ .../for\345\276\252\347\216\2571.py" | 14 ++ ...f-\345\245\207\345\201\266\346\225\260.py" | 7 + .../if-\351\252\260\345\255\220.py" | 21 ++ .../image-1.png" | Bin 0 -> 45337 bytes .../image.png" | Bin 0 -> 45865 bytes ...30\346\226\271\346\226\207\346\241\243.py" | 7 + ...()\350\277\224\345\233\236\345\200\274.py" | 1 + .../print\345\207\275\346\225\260.py" | 4 + .../sort()\345\207\275\346\225\260.py" | 5 + ...2\347\241\200_\350\264\250\346\225\260.py" | 13 + ...43\345\245\221\346\225\260\345\210\227.py" | 6 + ...cotinue break_\350\264\250\346\225\260.py" | 20 ++ 16 files changed, 351 insertions(+), 22 deletions(-) create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/5.2.md" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/5.5.md" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/divmod\345\207\275\346\225\260.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/for\345\276\252\347\216\2571.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/if-\345\245\207\345\201\266\346\225\260.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/if-\351\252\260\345\255\220.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/image-1.png" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/image.png" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/print()\345\256\230\346\226\271\346\226\207\346\241\243.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/print()\350\277\224\345\233\236\345\200\274.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/print\345\207\275\346\225\260.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/sort()\345\207\275\346\225\260.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/\345\237\272\347\241\200_\350\264\250\346\225\260.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/\346\226\220\346\263\242\351\202\243\345\245\221\346\225\260\345\210\227.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/\350\277\233\351\230\266cotinue break_\350\264\250\346\225\260.py" diff --git a/Part.1.E.2.values-and-their-operators.ipynb b/Part.1.E.2.values-and-their-operators.ipynb index 02abe9e2d..4941e51d2 100644 --- a/Part.1.E.2.values-and-their-operators.ipynb +++ b/Part.1.E.2.values-and-their-operators.ipynb @@ -23,7 +23,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -118,7 +118,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -152,7 +152,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -161,7 +161,7 @@ "3.14159" ] }, - "execution_count": 19, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, @@ -171,7 +171,7 @@ "3" ] }, - "execution_count": 19, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, @@ -181,7 +181,7 @@ "3.0" ] }, - "execution_count": 19, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -226,28 +226,18 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 3, "metadata": {}, "outputs": [ - { - "data": { - "text/plain": [ - "20.0" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - }, { "ename": "TypeError", "evalue": "can only concatenate str (not \"int\") to str", "output_type": "error", "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;36m11\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m10\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0;36m9\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0;36m8\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0;36m7\u001b[0m \u001b[0;34m//\u001b[0m \u001b[0;36m6\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;36m5\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0;34m'3.14'\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m3\u001b[0m \u001b[0;31m# 这一句会报错\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m: can only concatenate str (not \"int\") to str" + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32mc:\\Users\\Administrator\\Documents\\GitHub\\the-craft-of-selfteaching\\Part.1.E.2.values-and-their-operators.ipynb 单元格 14\u001b[0m line \u001b[0;36m5\n\u001b[0;32m 2\u001b[0m InteractiveShell\u001b[39m.\u001b[39mast_node_interactivity \u001b[39m=\u001b[39m \u001b[39m\"\u001b[39m\u001b[39mall\u001b[39m\u001b[39m\"\u001b[39m\n\u001b[0;32m 4\u001b[0m \u001b[39m11\u001b[39m \u001b[39m+\u001b[39m \u001b[39m10\u001b[39m \u001b[39m-\u001b[39m \u001b[39m9\u001b[39m \u001b[39m*\u001b[39m \u001b[39m8\u001b[39m \u001b[39m/\u001b[39m \u001b[39m7\u001b[39m \u001b[39m/\u001b[39m\u001b[39m/\u001b[39m \u001b[39m6\u001b[39m \u001b[39m%\u001b[39m \u001b[39m5\u001b[39m\n\u001b[1;32m----> 5\u001b[0m \u001b[39m'\u001b[39;49m\u001b[39m3.14\u001b[39;49m\u001b[39m'\u001b[39;49m \u001b[39m+\u001b[39;49m \u001b[39m3\u001b[39;49m \u001b[39m# 这一句会报错\u001b[39;00m\n", + "\u001b[1;31mTypeError\u001b[0m: can only concatenate str (not \"int\") to str" ] } ], @@ -1138,7 +1128,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.3" + "version": "3.9.21" } }, "nbformat": 4, diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.2.md" "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.2.md" new file mode 100644 index 000000000..9b74aa29a --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.2.md" @@ -0,0 +1,227 @@ +学习目录 +# 几个重要概念 +## 值及运算 +1. 运算+流程控制 +2. 质数判断程序: +```python +def is_prime(n): + if n < 2: + return False + if n==2: + return True + for m in range(2,int(n**0.5)+1): + if(n%m)==0: + return False + else: + return True +for i in range(80,100): + if is_prime(i): + print(i) +``` +1) if +2) for +3) for i in range(a,b) +### 值 +1. 值 +* 常量 +* 变量 +函数返回值:默认是None +```python +def f(): + pass +print(f()) +print(print(f())) +``` +在定义f函数时,内部没有return语句,则默认返回None +|函数的本质:把一个值交给某个函数,请其根据自己内部的运算和流程控制对其进行操作后返回另外一个值 +举例: +```python +#绝对值 +abs(-3.1415926) +#取整 +int(abs(-3.1415926)) +#浮点 +float(int(abs(-3.141592))) +``` +2. 值的类型 +数据类型: +- 布尔值(Boolean):True、False +- 数字:整数、浮点数、复数(Complex Number) +- 字符串(String) +相同数据类型才可以运算! +- 类型转换(Type Conversion) +```python +int()、float()、str()、bool() +type()#可以查看值的类型 +``` +不同类型的值运算时需要确认是同一类型,否则报错。同时可以使用type()查看值的类型,同时进行类型的转换。 +### 操作符 +1. 数值操作符 +加减乘除商余幂:+ - * / // % ** +操作有优先级顺序! +2. 布尔值操作符 +与、或、非:and or not +优先级:not > and > or +3. 逻辑操作符 +小于、小于等于、大于、大于等于、等于、不等于:< <= > >= == != +优先级:逻辑操作符 > 布尔值操作符 > 数值操作符 +4. 字符串操作符 +1) 拼接:+和'' +2) 拷贝:* +3)逻辑运算:in、not in;以及<、>、<=、>=、==、!= +字符串有其对应的Unicode编码,所以可以进行比较。 +5. 列表操作符 +python容器(Container):为了便于批量处理数字和字符串。 +1)数组(Array) +2)字符串(String) +3)列表(List) +#列表同字符串,都是有序容器,可以进行拼接,拷贝和逻辑运算以及比较等。 +### 更复杂运算 +对数值或字符串的操作(加减乘除商余幂、字符串拼接、拷贝、逻辑运算、比较)以及对布尔值(或、与、非)的操作,都属于简单的运算,更为复杂的需要调用函数。 +* python内建函数(Built-in Function): +1. 绝对值abs() +2. 取整int() +3. 浮点数float() +4. 字符串str() +5. 布尔值bool() +6. 类型转换type() +....... +![Alt text](image-1.png) +内建函数也依然只能完成“基本操作””,无法完成复杂的运算。 +* 更复杂数学运算,还可以调用标准库(Standard Library)中的math模块。 +* 类(Class)定义的函数。 +### 布尔值补充 +|每个变量或者常量,除了它们的值之外,同时还对应着一个布尔值。 +### 值的类型补充 +1. 等差数列range() +2. 元组tuple() +3. 字典dict() +4. 集合set() +5. 日期date type() +### 总结 +程序结构:运算+流程控制 +编程是对不同类型的值进行运算,因此每一种值都对应相应的操作方式: +* 操作符 + 1. 值运算 + 2. 逻辑运算 +* 函数 +* 内建函数 +* 其他模块里的函数 +* 其本身所属类之中所定义的函数 +接下来的学习:各种数据结构及其操作、操作符和函数。 +## 流程控制 +分支与循环 +### if语句 +1. 奇偶数 +2. 骰子游戏 +### for循环 +1. for循环比较其他语言的写法:for a in range(10): +2. range()函数:python的内建函数 + * range(stop)#range默认返回了n-1的整数数列,若需返回n,需要n+1则返回n本身。 + * range(start,stop,[,step]) +### CONTINUE和BREAK和PASS +1. CONTINUE +* 忽略continue之后的语句,继续下一次循环 +2. BREAK +* 结束当前循环,开始运行循环之后的语句 +* PYTHON中比较有个性的地方:for 循环后可以跟一个else语句,当for循环正常结束时,会执行else语句,若循环被break中断,则不会执行else语句。 +3. PASS +* 占位语句,不做任何事情,写pass等后面需要完善逻辑了再写。 +### while循环 +编程语言中提供的两种循环结构: +- Collection-controlled loop:for...in... +- Condition-controlled loop:while... +for更适合处理序列类数据的迭代,while更适合处理条件类数据的迭代。 +#### 一个投骰子赌大小的游戏 +PASS +### 总结 +1. 只处理一种情况:if... +2. 处理True/False两种情况:if...else... +3. 处理多种情况:if...elif...elif...else... +4. 迭代有序数据类型:for...in...,如果需要处理没有break发生的情况,使用for...else... +5. 其他循环:while... +6. 与循环有关的语句还有:continue,break,pass +## 函数 +函数实际上是一个可被调用的完整程序。我们只需要学会阅读函数的使用说明书,就可以使用它。 +本章目的:学会阅读官方文档函数的说明书,并学会使用函数。 +官方文档:[Built-in Functions](https://docs.python.org/3/library/functions.html) +### 示例print() +#### 基本使用方法 +* 传递给它的值输出到屏幕上: +```python +print('line 1st') +print('line 2nd') +print() +print('line 4th') +``` +* 一次传递多个参数用,分开,print逐个输出到屏幕上。 +```python +print('Hello,', 'jack', 'mike', '...', 'and all you guys!') +``` +* 变量或表达式的值插入到字符串中的时候,可以用f-string: +```python +name = 'Ann' +age = '22' +print(f'{name} is {age} years old.') +``` +但以上是f-string的用法,f-string中用花括号{}括起来的部分是表达式,最终转换成字符串的时候,那些表达式值会被插入相应的位置... +```python +name = 'Ann' +age = '22' +f'{name} is {age} years old.' +``` +#### print()官方文档 +> print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) +> * `sep=' '`:接收多个参数之后,输出时,分隔符号默认为空格,`' '`; +> * `end='\n'`:输出行的末尾默认是换行符号 `'\n'`; +> * `file=sys.stdout`:默认的输出对象是 `sys.stdout`(即,用户正在使用的屏幕)…… + +### 关键字参数 +> * 位置参数(positional argument)arg +> * 关键字参数(keyword argument)kwarg:不提供时,则按默认值 +#### sort()函数 +> `sorted(iterable, *, key=None, reverse=False)` +### 位置参数 +#### divmod(a,b)函数 +### 可选位置参数(Optional Positional Arguments) +#### pow()函数,有可选的位置参数 +`pow(x,y,[,z])` +> * pow(x,y)————返回值是x**y +> * pow(x,y,z)————返回值是x**y%z +### 可接收很多值的位置参数 +#### print()函数 +> print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) +* 第一个位置参数*objects,这个位置可以接收很多个参数(或列表、元组) +#### max()函数 +> max(arg1,arg2,*args[,key]) +* 多个位置参数时,接收很多值的位置参数只能放置到最后一个位置 +### Class也是函数 +> 一些内建函数前面也写着Class,比如Class bool([x]),也是一种特殊类型的函数 +### 总结 +把函数当作一个产品,你是这个产品的用户,学会阅读说明书,注意可选位置参数的使用方法和关键字参数的默认值;函数的定义部分注意[]和=;函数默认返回None; + +为了学会使用 Python,你以后最常访问的页面一定是这个: + +> * https://docs.python.org/3/library/index.html +> +> 而最早反复阅读查询的页面肯定是其中的这两个: +> * https://docs.python.org/3/library/functions.html +> * https://docs.python.org/3/library/stdtypes.html + +## 字符串 + +## 数据容器 + +## 文件 + +## 参数 + +## 化名与匿名 + +## 递归函数 + +## 类 + +## 正则表达式 + +## 其他 \ No newline at end of file diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.5.md" "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.5.md" new file mode 100644 index 000000000..e69de29bb diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/divmod\345\207\275\346\225\260.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/divmod\345\207\275\346\225\260.py" new file mode 100644 index 000000000..0e70c3d77 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/divmod\345\207\275\346\225\260.py" @@ -0,0 +1,14 @@ +from IPython.core.interactiveshell import InteractiveShell +InteractiveShell.ast_node_interactivity = "all" + +divmod(11, 3) +a, b = divmod(11, 3) +print(a) +print(b) + +divmod(3, 11) +a, b = divmod(3, 11) +print(a) +print(b) + +#元组包典型赋值写法:divmod返回元组包括商和余数,通过a,b=divmod(3,11)赋值给a,b。 \ No newline at end of file diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/for\345\276\252\347\216\2571.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/for\345\276\252\347\216\2571.py" new file mode 100644 index 000000000..3f56bbee2 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/for\345\276\252\347\216\2571.py" @@ -0,0 +1,14 @@ +for a in range(12): + print(f'value of a:{a}') +#python中for循环的用法更直接,取代了其他语言中使用的计数器形式 + +#使用list的方式打印range循环的整数数列 +print(list(range(10))) +#为range传递两个参数start,end +print(list(range(2,10))) +#step步长,每隔几个整数打印一次 +for i in range(1,10,3): + print(i) +#负数步长 +print(list(range(0,-10,-1))) + diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/if-\345\245\207\345\201\266\346\225\260.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/if-\345\245\207\345\201\266\346\225\260.py" new file mode 100644 index 000000000..9745382b6 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/if-\345\245\207\345\201\266\346\225\260.py" @@ -0,0 +1,7 @@ +import random +r=random.randrange(1,1000) + +if r%2==0: + print(f'{r} is even') +else: + print(f'{r} is odd') \ No newline at end of file diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/if-\351\252\260\345\255\220.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/if-\351\252\260\345\255\220.py" new file mode 100644 index 000000000..6ff8dc119 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/if-\351\252\260\345\255\220.py" @@ -0,0 +1,21 @@ +import random +r=random.randrange(2,13) + +if r==7: + print('Draw') +elif r<11: + print('Small') +elif r>7: + print('Big!') + +#模拟投飞了情况 +e=random.randrange(0,13) + +if e==7: + print('Draw') +elif e>=2 and e<7: + print('Small') +elif e>7: + print('Big!') +else: + print('投飞了') \ No newline at end of file diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/image-1.png" "b/\345\255\246\344\271\240\347\254\224\350\256\260/image-1.png" new file mode 100644 index 0000000000000000000000000000000000000000..07eeaab8cab2119cae0b13186852b9500ca34484 GIT binary patch literal 45337 zcmcG$byS;QzwL`l(Uul>r$8z0R*G8-#a#o%y+Cj;?rsH21#55(?oNwCptyUGgmA;} z-S0ko+;h%2d)#sEA3zdTo~*~#n(H&?H!<%t6bYVCK0!f2Ay8I&tA&Ds20;F>;9wzN zNn$kfM*czd&{BMZQZ-J!hkSwokX4sOLHU)42e-gPKF4)cGVnk_A?$hlK^<`UW{rYU zQ>FY?_QNOBqkDoHW1Z}i#Ogfe@HUxMA_kc^SierA28%`$M?`u?`W}M+_P%5!6bTmm zvh4bl!X|tuAN5II^HU(z+gSY1+GsDC!e5@#J^v~bE>4*FEFK=>pt8w|g_D#dJUHa< zj@YSfDIDMTf*!A~w8QdNRv?;xs*dlcTYai`Y$OkSXICX{5%AkE4IGAW;y2GjJI;R+ zzd=4`M|m=id;y2yNq8v#~(D@AzlX4U`1tMI0mZP*CZbG00By%MP0BD4es z-ns|f+ry6_h)Sad$LxoEgI^wOCO(w`S8HO;1-kZIlsOR&njZmG@=&gD;u6JuX^ctb zJiq<#$8-;8bSon~;6w3l1j%&$>j%1HY)Aq&tF$i4U*J-nOMd~z!=*A%sx&Rn4QY5v$@(H^3K}dq$NRgR% zCR0fVwn21b38;kdQ(f@EM>Rc!KVek2rq;an)6C!wzyz(&gyi+j1iXt59@2W+jkj{R zPtvWXnV`l~;J42Kj(5NwSA>n`2#$a!jG}PQC&7BAzI}z#n*B6>S-BT`{wp0J@yGQx zbd?n+hON_1O(z#yC6reCdzr0!0Fx~tE^t4AMC+HfdT~+U*}e1OX7=%wi`g2q<4VEz zU@$mPJ)5tLqm|^#(hzl?tl_{QR76Czhx$r0@H{mq|DDo&%x}g+^N(F_L6?d_A51wd zLgd;Hh?HBZ7%>3E*mkTvO<@{ercmhnL%G%@lu;Ek4vM(RUK#6~I^>zb|B@Zw?i6a` ztM$kvAK-+&Wm2sfMEG@O?*Ts%;4>EZA2;WKt10p^s$#m-w2EjJ_bC8*>y2*r7**2n zb)uDrd+@{D{gxTRhE;s{P0ECb-SL_8c-eK+uhg$FFRP_$T04=V;b(bI9n~d|_^$8r z$(mOVOi!0SChNHh-S$Q}L%$d;XPseZHm1!t26${c48_(Jc?pE^U!X2EIE~29h3~Rb zJ{hOyxFL^O5Z(6&V8qW{QID_U>)|Akd-!+e*+NQq zYaf$KW9`8V&OdE8t-}&3WKB{Ki(br_+hf*cw+SNRmR$=8I*EE{n0VG$1u(Z63Z6kG zkr6zYdM;h-AE$u7(DT_ThQv5aaU7>#D+r}%jW6p|Xn}V#g)Jc=sC0wmo^=K)wv{pi zHFi^9a`3WKY;O_Q;FAW&1+5`gPjr#ii9l#ALeiryYsBmRYOeLWc6kfNXRs4Zs$3{ub}@I)MyKgRmG za@Pqi{0zD)5Becy)@Dt>2SJVy&FZ;A^%9mrNA+{VC)2W~qYI@>mh_!I&)#O^<3zHT zFwz-8TD*S3GJ|f(e9rpF^lU63pEd}tAIBppS3ECN3U}wl&jDX2u!I~Sik+D2MLW(=`dC!sJ27`(cfsXA~O5P-j08y}#2z|i2*FFJSk zZ2zgA)Mi45efosmpHQ`>wgcTee6uF0TS+=-HC{&586HcQZZvpct!=&8DSzXr)j&V7 zn5Nt6&_j{icQL-OzEj=z#5euOe1~w|uNyM-EGRReYE_WML=&gOek?~&DtZ7c6n6Xl z3(>0xyKrOLGFdFN{rCjAL49US8T)W1cpXcD;w;WAF7HF+C{`JRSSIlZsn*9YR%KST zpy05+P&6jOWk=lV{5hh))3Bb<;Zhcf7+H+D?3Qw14Q_%O^nhr(Kl1=$F&tc)iZD9b)fT)~_`Aak#uglFKc;dr4 zdI#~r;4Z$sW-Vt!31s(`7(i%c&;`G%fE{n<%=Wh3bAJOsw;@#3RNPkPl_hsItT*AA zOWUz9ap8B>;IWc(km&G{mZEEAG!ZzJsi4Orx>$IzcFRVDr?7|#5!^EY+@9Dj+`<6B z??U*8I6zifpRW)3)EDQ|+RMjY4+EJWe8D?oe*#VEU|EHk7~m*+?}JpI4;`@(m0+re zS--j7v-PXf7MG>mKr@_+H(gj5Z=&-;`Ne<=gVqe7^Cbvk7Mm&VbdTCWR+QyClZGKB zcRTs$NpXqQD`KVq5Q*n23#^cY#F#MyKGabf&<2h>4rSI71_s)w@5XhM0Tmk6v0bb- zeBG_hUG0+-1CTA7bfmZU^;9m30N!k}Fi1emFCJYO&l}hIwzBR;S!XFEg{;-*1Zq&J zAdZcuppxh&L(}7%Ocp}4rLu^dPqZZby<*6ZTW!`tW|Ug0A;Qn*G~c+^W&>y1-o-N_ zn2;;>vwB#)atSJnEDiJn=Z38THK|w-T4-_}$t?T&6+s2C6I&dE?P{&@&oHe`$QmEM zF~o2G)tqqPm)uW>_JR2_cHPT9FsnmKTn*u>rd99+T6Vvj1|o|H)Gg}X#`ew1EUT}= zN4;*WfPhD*Dr)ZPnhSa&r`G5wGs!L#UE!sjK%B4es*8dqaMm#{WTroBmz=zBz@XqY z`tQ+hfP;-(cS1@;1w}R%-nXo%w>y?QYw2E8TYo|;jI_RnoD|hE$;o;%?ipifSbQ$@ z=o@gupL>Iy74aH}Ui(et)T{wJiPo#SBU1CNbWsP=#bEPXnOmgB8T>H4dEM6wvXwFS zV4gAn8OQ|FYN?ht3!yoNj+Dj$aCT}ye6cpy-Oze-F??NanMzF1mpW04ZVWIYf(OV@ zf2eNcu2F>zlS!Pnm8G5Qkph{J!c!$#KRH>iVFG6tMF>Xz>gz^SsPc!5D9O-+Hu~5` z9LhSQ#NRg0@Z#&I&|g@CQ(3qjbYfo*qRw8QEUXjmOV3tcwD=r2IM3~u-}~{a>AQZW z625Y6ycbSPZ=^QAz9YMrO5oi$A=zPQ&G_I>`sVl7;!rqP8cK-q(u}JRyABX zm{<)fVn03=ll;`#{##3G$0Dn!6lFIMWuv@SYmHu6w=f8&K>Jarv7#jYHM?2z%1&T# z*dK#3;}!QO(5MP`5<|AiNTiU_Y@Chyb~IEt30;=>0t44N1XYpJVp3^o+Vm?JdP^KC z6v|+VYghqHs4{Bp&E_|n=1aEjn%5-mV|pEY&a{N{64!Dgt}dW3K##mMDvSvWeK1mu zcW1&d#}QM^7xa1q04_PstC66ed2U;){}*J!))oI8BeqhC(CVQe-}xj%Z^QxHoC-!6 z5=RwcFEOEx^S*Gjiy|SHa8D0>r{k-NJIs7F%wtd#Rx-o<^SO_!XQZdIGL2bl5kCkY z4N~aCCa=rD(Q2_(%4mM%O!KLog~LdhINW$+Z79&cvRQ4{Xf?!=5(9vtuj{9QF0K!< zjv*T5vcsrKMMdw@sVL9O-M~GyryJ=!r*OzD9i>o(!*DyB7%=B2ib5;?R++Q{BV%vv zj5BRYebYW$%#maNbi~8P6M9{oH(IZ?@A7>71y-j4{l(wqA}Zmd=;=tIH*3Vm9qraK zt)3P}to1?x$bIWu^u2E{yt0|Q!6F(=v3c=jZt!{D)WRgkduT}s@4Rj5W~x}3!uoQW z$)G~`yw9X>WNCUcWqU3!!3cex?{;>Fw&T}Sl~9Q6K)S#{XdD5JZw9^z(ay;7 z3QLoU(e9d+8kU8O>RRXYs5+n_TbYBD@Z4k2!5?7eNh}bl!uKMKlwSv3skiH`z7I4InDOcw!Y>)fY||^?-cuTQB4qxbS`LJ zm@}Kh6!5BT2;3;@USGg8!0RG?!DJSRuiDmD2<(np-c|&!zFVk!_+q2e#VCy98V@TG z7oy7MOTh>r6iO1pl!?}078J4SRR!FPm?7Nf*=elIOEm#jHe?CK7mP9^GfIa~F&++r z?s|ITz3Qk6*+{HtxM&PMX}>XjeZ8An2)9Nqs_0Qv zb3SOws1WB|tye45dW=(Iiazsfd?Nvf_h2-WNlc~nm}cL7ceCVx8P9<6d6yO%(EIcc z3s+TYkep1lZ!~wlEx!-w4NzNM?NcLbqRSc`diT)zsN4qO&}oy2L*V*JiX%p-WM~Hh zuOoR+6u^WTLWoMVB?SxUTuF)VZvNzmgGxRjuwmQ=RTn85SXQ@(qzgU7@-ee0Av%Vu zVyFaXxs86GGAZ?IWN&SK+)=*EWv`7j6o%kT#WEuTNXFC5IT1@V9?K$L3OCC6s39m6 z*m#SUyGi8rGorr_)Ns&-UPT1S%dIJ96wz9TP~LKW6=;h50;kbt(ihk6W;9>-HN8TF zMvtoBh^rHU#yRk%CjhC4z(G$O05$eKko50SF!kVeZx9=)<&Ld$(Vp2nAw&Ho)9h5~ zMSm}Zq_7a8&$4g5oInEr=HBfWX_zcC}TTk52pE8AMmW+ znj3@p_7lU~_=nlJU*k~#$NIl^8worF2_=qVISKo|#5Q8Cc1ikVHA0Ea!*w?H_Y>xD;)R+uVeX|@eu=t#pf{IjPsX3s zOi8h?ym|x+$#1)|A4$X85W8JEw11$(TmSd2tdEc0(?8F{{fA88U;-YY12N{Cf46@3 z|4)->-iw_HIxcW^4e<8-T>SCFagx*JV@cB?f|?&)GX{p_0rb8;uTo6hk{$g>hT0p4 zR1q&7p8VhK<(H(qPk&>Mk6TZmnnnmDE74kg`MLkSBF$C?x6$_2Wn&PmF>r}Z>I@e= z-VL*rJx&R7O9qD9(KTZMw$t`L>>11ZSZaux9=BhcUau1cH32_(SA=Dzx=7oDtn68n zy2s1abGIRM0hd#z8TD(hWUuxOkrRt3nr+C%A|8Sn|Ko;DofA`r5zlZrO_pRr15o~K zkXxijL>kFNnk4<9O~|ESkk^D1%+WV-_eFmq-3em98u6o8gSP#)@Zln;WuX?3*%&=# zx!xU-eyFEgbHQ!YaC7Z2Tj9n7hJ%9WtWa-4G4YTq%O2myRnkL&-fij>gSvByrqr_E zL8Ws~Btb`j(GXwkF;nB(VHh2}C|AHf#eXYZZy9{Q1Ws@K>}(5z9vy$pbv_R|Z?WwA ze6G8rA$j$?CHpCFOX<)nRVZh;x#QX2K7@qX-E`)#(Z#w8V%r7o>w6@agbQBDU~G`( z8DZn8DJ(DW8wRsA7vq<{?jJ3b4yu87pxNujz2anlj-}!nseQY8-J!S2Bo?BurT(NK znU+T4ghFtp_+bTdpFa`&E1&*8{{&brE%h6BxZn{DO@P`jr&W)$tP;+aKAxrr*W-4bt~}nk&9L`FghnH;uXDl*&*u=HEe3q4;6xcw;^Ql7$5AzQ8NF zy{Zl}S$*k8pR*j=uUeip*Dx-Cq^{`F<@L{uWHd0rhCI zrqo%eJ8VUt*ISx8CcU}Ctmpc#y!kP*br}f*%66UHamNXz;jRy2uV1eTIW2BNVpkcd zvrDkS@GTxrkL0gv*?(!c@oe}zDb_1EDxZEsW%5&?KKoX1PksGJGXhHqQrR@2+0XMt z#;NBAc=N)N#az{mjqqWj3CTaER1=cT5AP1DuS+Dvv>i6Q;}(Z(1J?1(z739Vz7?%o zka?}l*2Ie%u#1(13;I=-9wNtW@-PC1k9=Oqx&M_U2!lMpg35=-LSu+StT=Z&g=^Yw{>BCx3Cog_kLo>1R&^C}nB{tCaaw9f zAoq#|MvH&yT$rYiMxMF!=I68ak>j&@?@1lId0XTa2+8d?dZ$5B(zipJFJ;ZBJ>B9b zq#xRXG{4Rz9N4I3*?^bu~y`Bi|K4)yCLJRNg;-7Btm7b-@(k?(kt)L0FQGR4DS5%Kvhe1R<# z5NgM89xC&s{UcVW7Eo0`g+-}^n)9u2s;X;$zGsnNb98ZO_cw|tzuu>cH`lthA+LM> z#391Va!#MpLhZ=xO2Zdp-#JSmZZ_`yH+xpnEgE`gtDn-&vF9b)6A@=PH-$}v`e)$1 zYLZF(tISaM!vB=hUG^lG0e^TScn5sn_^>@u$lAy}I*Z#oF0v7a9C0AE+zt1BNwQlM z(K1Q>%K|e)&hi%x5y-O#U393v)%!CdkH5g*%8Sx1%1SI2#A(F5@+Vy(E5CL^o3^%f zBFnnMXeNqeoNV(Cnt{KD1v!p>Yvh1n7{TAeR-J;6ag(|g1j%^k_8G3utU^{>Thh0w z(q~Kb%FfUe6oy@bJM?7>`yEg#H-(ZQ<);TEYL?xS@K*FLku_yAzpxZ^F(Plq0A#dx zenKu(7*G_ggt26_lv4pY2G~>h)@CURf0ox@KyEpvahLEYRsvy1I_?(Is`nCgYs_dVZS9b^YE?+x z5Q(|}WHth+Ir{$_;z20@r}9ykgxkeQ(7wrClE#Q0mp?x?W^VnP!ymZvV|R-EgzQhon(SL2cDi=XcgtgOeL@VIO!yq0Dj}@p z*?2B5PrmmL>o%0`MLaFcyw0fFsr|2DG!R^N0Lb&Gq!PDp5&t_J^|H`{VP#@RP5KDt zZ<4t`#M02yMEz_D$j(->>eI`If>zJFLF7$Bny0loEj}q#x3_r>Z2IA}K-=h}h1;R) zpUX|{J}hsVvF@AX(8O)uVNOanv7@i%lK}5d4OAAR8~DBGvhx{21uvM?)c2oviAe-V z&RPT!Y&q>x`2o-|YfzVZtu#4Z?1`=%IWjbF#BWUQ$$(aa*XkG5hr-RSE5_2`o?RQ* zz5sGE929a4I45lM8=4ASxI7(mzBAAx@R;>nTMD|+-)fSiGIjTO)n5LrsQAO%yXsZ% zD#*k^hm*@)05!k!;!|gsOVIXQJPnT&hYgiQ5=la^R?!g1Wmt_)AYu(Z8FqCYI7`>V zdGJe{NOUt`rO)c_Wf?c0BJ#ctP%>d3=jJU=1!% zvD)psjpfc-&S8M(@uar&Iuf&X(M^c@nPd_c1c8X+D&l<*2nyk=x{;UOyGwv=3CQf> z&I{WhxDg^fq4=TO<*svhT-KZ_Wl#K>wMB=?8mZ z$L$)`mQ13@Iw!h?T*%ck2b(0 z3G5Tr+h5#?h4+NQ(4+-KmR<)iXQ_TWyVz;q!zQ5=IVB~=FCKg8lLZB{WDE$!9i3xA zV3?43QoX~Gim>?EkU6gbrfCkBTQE8|W?(!E^Q(po|O>QpQ=Os>ZF%`Yz81pK@wgsE#E zi>TSphW#q*?hYXBO)qOe$&R%pdY8^Sst*QUgo7N53(A7oq)}Fmw?VWVO9b?bWkKnZdaqXVVNs7-|~`D3Z_D$mvW zf2*|PUkq-TZ%6d~kU>JFuy75-+$;6$Eo{rLJ;+O*tf#qKhR0=pA>}Im7x$lB@%}6K z72_ba>LtDMq@_ImxNfalUBAyUFEC5GMRUKr*0St%;@Bq^Q;Xw>ObAQvmAxOxXpHs_ zSjuJ;!6c(?N2;80Hh$ z-RV;?cD9-f5kFphTzEDo?>(_N{JQzixwbJ6Nb^hP(a+RD7Lk%;ny>AZm(N43*eTwL z#f2+nE&;!MT9wJ^A!AY{H9*rC+m>baI_DL^+twa6^;9jZ+f!YV8~4yHdR8QUADnml&F)9yu78LiFf8C*pl^VYu?Fy8A|%$U_tKN zr*bdoV+%?9O1IYV!)#D;UyYBFdP|5 z(s`=^szP8P(=3e-c!54C%WnZmMh5)7S`!T9ZW6e>m2a`gDM+NoLio`-?X0*usp8*j z@@TochV@ueluyY;Ek6Nv`~lg!6D>MMfR}nURwix@k9AeS)bxHRGN2}%%ho=23C%cgmiVoh6W0c(8*R| zR#6>z0ji;ESdui~@m=gxjmey3bM-?RId$*U-a!9Q)KTa44AYUUT38QQ zEPMZSd5|9g4li^jRbE<@&`v`bFffaYW1yj7JYLp%+Wl8pygdd9*wzamAVz|kL z=w~s=RkIReI=Xo$94V)6F3}ABu4P#am91XkAh2 zkay6>+S}w@P7iZCtK)>&a;};&Yn5E9rFb<5rBqZJ!hE%MQN=Gg3QmRW(g7v$kN2 zAunIY(<%jWCne|Y%suO3IgW3Y(h)Yt=lHyg+e_HGDegR@nV}oH>kO*?l9CBu;@hb( z(Z8K3I0^m2`(@C|lilwhB{vd09v+8JQ!18l-0ckI_z_U-vP%rwcelXCk!yan&NIv`=YptF0vU7}CVyZAG ze;1SadX<&u*5|`EGII2GM@FWfzuAxFH3=ine**_M8P`pomvG>lOUCq^&5QdcAoB3nM zUOY`SKWQ^(NYjfRC3|4N!Nkdjwbic2F8=dQdJ^lfxbVSH&u@~O$UKgIG8Rjvy=sZg z=a_*4-K`o_i$sc`n%tVTv~$w;&y|W(JA`~Ej6Z4nYT}~pm!|o`MK5jlDIQi_#6Ka1 z0xeq8>kL>&#lJtR3&T7{D*6mFvUn>S9HW%O^k=n4)q2}CT7$h-55GsorN}hZlO$$- z3FW~Hi1co?8wR9=>V7gC)pDR+ZK~zYKnGEfltxyec=;_X+9s9961Io~mO zjmr7(oolZH`^NlS3|-}}Zc#pwC~1>_jvDt&QRZ&ZdR5rwtMH{E zbAa;_&#{+yAS~R-h1Gx!wibifjzb~oJFf={DLfCU0GB>x z)q?tB?Y!G$o|d_jwr`A7z&(r1<-JD{?$QI+kXo1Xx_6Kiy--0OCWb+Uu)oQut-IjU z+|>>>4GbYHz8wEQJowm5w7LI47)8%B}U`kl{oe;-nv_zU6^F zasSDVIG{wDZNR+Hf7SSCB>B+nx-#(-I5zNTsbittZ>f2ehe)EeyO4-b@`~hzp_s^C;&JxZi!-7-NzZ z;NalkkG??9WX-aO*QE-1Cqs)ROr>XRmR!GJ`*Q z@N3KG&)`iiwrF41Q+=aUr{W7p{hd9S5W_HT-hm)32|N3kc)Y9ma5)9wg!8Stf-!#; zsl%UPS6!{ul5U3Nk66nXk-Qtos+h56IY)=hOEY_n*hNh4yr+!Yvg;6v1rAmj+Nbid zWH0DOU%eCiErnb$e)DJg#OY+%Quj24x|N+3mYbyWeTIfwsCyVq!I^@3O3Yv}wd+L~ zS6&Nu+R#VYfkOF?6o8u&-tWG_V460>5nda0x2P$D5Yb!)*ANk!xHOU56nFYGtIe?C zpLoC0+W_PMVkashm)t)Q7**{Pwe>@R;ZB$IEpzec-k_Do!{4&00YQCT32Hahf<9E_ zLFV-%F5;cTgDut{`%3f7u`Y#;;l`4EB`LG;c~@oB@a+fw0%57#5kn)$HafinWNE+1 ztQ7mP)P!0kJGsl^!sKK6*De*o_;DX4&YjZ$jLYGM?FlGEVtZuLExU|1P0jKaG%mrG zn!0H~ZRhZklow;%-XmDvf8jKY6Zj`4Fi|Qock{gE;Hi;geFX&*%||+JY=9de{@vH0 zHIEptU4eJqb$0?D#!VbD&(XJ~TmkPtHInn~B$OCNx)jEq{M~AB!b3~)$kXY%nJW8a zogws8r!GOV949*xlyx!G8kKHr`L`9-fQ`z$#Am2hMBm70iRww3BHYA@=M*V0!n3 zFX>7Z{m{U)^33gA&J6SP9!B#{jOVwUwoOO|(xwlVgWOJQBLM`@*+E8Rp9SaZ1E;}n z$+GoNmoICpud3I<%F*Mp=Ujxd+t5)iF+-35RE>*aA9=8eB5=o1EEqo^6hd!brOEh7 z@-q@*950iu2CX{pOlg*u~qPj zodCJ**Z=?ek&I;jl|^bAll7taDzU!t#M0J8CanL1E~a0VxEOA+7B)>*#~zn4h1D+X z1dVapJw!A%W2(-5ig=MvFpkY8aQzuO;N8HRU^X!_yh(#3hxwuCsh-VHy7=T#KavZu z(5KX8#li%<@poA<1NnPG(%wJ+!H*4Ql52#bw^sXuc>Sx5tFG0+E4AxIP+~^oZ`*ws zj~A@b#qHpv!%?ZK&@CYKYx59WzTPUQ*wf7@>SQ)|`Hn$@=VU__^Ns<3y&M0{qKwYF z;3tpkIkKUE%e|(x(KNgNlr)N~>-wGdP=4ui*_HngJ$jQXUG&2LV}nfRmWj;TT&u3Lk4pLSgg{-vxhB}=D7%Nu&bcd{5B4uszo4DRK zAS>k@N^^Hh+!1P4SPhr$xgeE-^B|EZ1GfHISNa81L{# zG{`Gc{NvD!GrR)RdDwsArx@5;NUZlBP$_Ejm8sZ~p-v}bQpn1TCbKpbUcD)GhZJtf zV~cm2G|pEkCHJ7c_1u-q+NvK~H608kg}%p-*0IFE6}no)>O_m1Hj&TFM91t21d%%c z_gkhQ@jO~MO(E(Y^*#J_HgvxFpZcZexo#ac_1gzb$Z45PsxKrhdv$$oW6cUNe}tUi zgZfnp20zU$rl$u}!3P8WjrX4Vx}CyP19Ec@z5mSzp;jTY^F#bABdVHb1FunXJoY3J zSs?(uPYaqzA@hQYXvAXhX)}ZLrduY)@wp@a)=gC_voR??ON-!)%^;TRDYnct$DV+~>w4F)Z~iB4g*d=y9535~`eWa@K;{!`dlZQ@z=mw@mDskGbv z7s5>eOTw9R(-hPxXWNR-ud36>qpTMGC5ni9|0Rje(L@<|dRCX%vt?pKo}qJi%n!y9 zLbi*u;^`iViaAr0Rj@6MxVu~+?;wRQlTWhRd_o<6NSaqlonXGhp{hZnJqq$2fyk_- zKix<4waMd@q)`RhXM_QAsG_)7RvVuWI6;-zAOdXp;A7(7xz)C(HXS(uyP4@+4!34Q z0iHuhl@r?VyP|AN4oZZnQ;dd|fYP_0%QwPFP=bv&8!Y4W@J#!lhedPJ{YVqy zc3Nc@p;mZm`aLoaGsG~@IbPg{_ng=+6Ti(ZMPVCbcC0{CK!cRZ(zTC%Wcz!~J5xLh zPq5V=&8UR?upeBx$pVyQm2y$a-(RMU#d)YK{37Q2;@Rf8YLU@OnzAq$I`*iU;A@dm zb+f=)a=dS;z>hdBPxqg+^awD?AsVxgz{g-O*_X(GMut-8Grd(t+A*e$Rtu3Bm5pR9 zW*KoVI?1c`lJ_~C-9?oIN&~SR5mZnBQQOm)WCob?8W} z>GVNy@dc*#B_vSg0)`be##WI|TPiCNs=^)0VWY%$b$C>>C-FdrcKaE9+5H`ZR5IK|}@bRB($6iz< zR@}j35kqy1I72A)<5r$R~d=cLg(~7r@U`7<_8T;8+L%>h?~Y?BbD>=w3xOmhe0OoZZ&F147VKj17~yM zE2Q*8!quDwevhnj(0xQyZjJ|*2#JCp2JnoDAEyIn{O^0F5QY${ImSgIpPj!qPOGXv z`O3AU6@x^`6`b7+jOys}crVQ9^L&K1i(*!#+%D(EWkVP8B&kMdAu>D90FWde_XKQ{ zFT9p8t23Vw!l6zq6>~mWg|pz#;%h?{X9oV`*~p>VRk3X7Y4-Vi?5GDuly&RztOwka zP8^w(gdTkwIoXj|Zl)L)&u!l&y@v9fT)-HH9#oD?CjMt_waE)ezMPYeBcxbakV>-~ zFF(0r3fJ9fyLwr|?IIS|^XfKX=`yt}olgiAMI)A8mZ{NG!N}X5d4VOQD~{-uo6GXm z_X2XI7dk@rO18I?_U@X<`^W!cljWgdRMY`8jS<*j5JyL&A^wFAt?onnNBQ7-`nQ?b$-&?)|bxY*YCJXCEn!QRuCYflCXWthd z@zVFZ(xn@Dfb68Yvd!@eqC1cpQ{zLdr6oEmi1(fhvJRQ^C;mZh!d$!B3+K_{%muR| z&shYAgI1L_E#5`Ohha(sF>V4LLi&XlWJ6ztlb8K-+cwRzMk!K_eGyM4{NI~D#>}Ek z%Uo^L9|K&`rV9Vtcv3Z_PX|s*LssbNqq6s@I_s zNqFbVC8^ePv1>5Ut^=t7-V{#zCZ}R<)llAg%_C5{<7peic41E@9ij)lzC&Kd{hE#37V z#T>|#yZx^`Vr`lMcF=XD@G_^FNK1H6oJ8zJGV()^Q~M0E zh^PqoR*?J%iMUpfsO5tw%4)3>%!QWI#qAhb6XRbZBpD)_83<7qJ)8JPs4e+a`md@Z z=j4|fkUXmSt5bt<8Zq94+<${5H<5JZfkG3hFTJHc1?x~}-}+~VRJ-IYq=-ljwx3+7 zi@lpK+46`CuE_8DH9c!d0~VYDFAoqRj_BLKyVc+3?8*5j^~1YU;U+-29&s`qdBfNV z-d4R^AHgbaX~?hX;&1~}e>zH`oi*cNxEp1FTt9d##wI;^!ANsu>n>6uZ2Pj()3Oj< zYDA3iC!Z2~IYbz~_5@4_kIV-LeQndVTpsmxM!L0I_2^j%+2dYf@q>Jo>fY5sQ{uh{ z%kmf2f2@k+fCt}CZpTS$2+-=0nq8BdjU~VES~v7fB)%Uxd~GJav9P23TvB<>>a6}| znfP|?Zms9k#=_m=Q2-vTL~Do$i~M#8{0^6*;W=QClrX!o7c&w;|QX#mzeeOH1U+b9Et z#blQo29>g>5g=73qkb{mkrFy5Y@_QNYZqDJ=U5a~7ZAOmpE98;4j#&xpqE3df1R2i zAwb7TXG~|^5M)O$;ISUx15%6M$8e7eD`h@y-Nl7CWmS-eFI>-Fq$ja1{j)E~_1vD$ z$3@*mW}Oyfpkb@MEIL-`jnT7JbAyE(rk`4$f%AovyuZzu9>U>q^EPn}}^Njpbb^E*@)G{*25ds^t7^X~?R?@VM@#bc%q zP)ySf<%@3mpBe&;=++5`awamuZ$Nh{LmiSxIasVzsy7FLE&P~P!iV83i#Q{tI-AB@ zCsGA}%4RaUTr~~R)H+e7pRSj)PvUMYxkx7QDUXO0ou&f~r>w-Qbcxk*m$r!`RQ3BE zvC%5{cpo>9mV(c%E6};dB<_?zE=0}gf^rqcDZR+327J>B@0(-C z`&u6$?{G(E;A>4gZae zH#>jcOpwQmRwq?eG-RE9CM%#Yt5zTbHOo#AfJl zpb5Hg%1>MHpRl*Jk~Cq8sQbR*syEY`MOPAC3>$Jd$EEu*h?ng#@RUYD(iPvTeEbT8 zOE)t41ZteWK=+{Qt7=ckd?Dgpac6Ji&Mo}xwOv*qv_6m~3p+b)T$8dg=YQNyyKg_t z4n`p_FjuDZTP0Hiwu@(U0Oou;U;eT12`0JYL909EtY*>8wAhz-@6XGve!#hxY5+jz zXrOC=-Q4Mv;F-jvf)^vJvMCgY`cMMDV;gvW{5g*wHvD|SC%2lKzz|v2dWxiZx7NRZ zHG)rF|K!#Fk_#;NKgR-CHEma8B(myqoV7tL1Kpzaxzq&?#OJX-6>N*LVs zSST!Ss?4WZlEy)EsStm>iMnIpb0BJ3trp}+Xsut>m5e0x@k9!TB4~svk_;jWd9hwV zEU}CoFS3vdklIHQYVnc-1-7JEYtTNgD>AR|dl*5ZSY+~(tMAqfe8I@0C@y`@dMcD} zdxxv7NzS#zJM(b3ufi5ffL!m3SMvx-e-7}RRL+(_4jrxob@hTrDrR=t;gnM`%qg4l zVATh_^|o4GZ1oBZ|2EsRbbHW=f|=;_|HA$xDv@|Dfqz3z@YfT>?pi%#f9@=dK_dZ+ z;R+QUDs_@KFSX9Rgt=YvOEvYjyUmqvhLeyxwSuUs75?)4hWC7p5<59<_4|W;og*D@ zWA?#JRO?^*l*<0lh3W8C3d13e@Zx1|%xd?rI0jsVvgWd5&#?MwBQD+ynRmx!8d@z{ zC~&ZWm^vQg#&Da?&_L~fD2EnCk=leX-;Z!kDGuN1j(vf*wOLjc7$O^oT7J?%J1d@N z4ayIFJ~!7AZCcNX{3q>96MuZi?#Pe{c&tBL<`IcC>=E5N$dG&Jbe@oognm{Wupa+f5ZG)~;~9SdJ{9u0 zRR6j7N`m3z)DMy_jy38>O)9O)gQ+&}o@14k-#ETWLPl7BQho2B#&cl8HvPG9C`Eum zUEwA1$Y&EGJSgvC*HSblz#rn*(|-Pke+3ywG+a%gp*%`TmELZ+-$!jkMCrARC9dov z>vL_3OH3I)@*)*y%l%Sg)0K~zQ0dHn!G}vyHPVN~{#=xx3n;&#AKPcyj#<@PX*~T{@#0>@NIco`r?rusTlyH4e5!& zuHiSLg&lK8hOHpbnABs@W;4Z(@c{&RrMq||LwD_Mx?+#BfBFRK77^tI@*5qB-pj-a zT=3kbseuM5zqU0B@X;;T&OF}!RG+*f%-HfJEmoCv_~NdZkBlEZI%(niLkG?!s1xMS z6nUq+7)J&KB2i)BiWC3>5Q`3Uqg|4==;F`;^R#(;^8D7DM^-t%G*~xuLRW5yMHl%u zt+y}a5^(tGU1{K$1mQ<&WoM*xSSc^(*67%$O`2xrs;!q!WRz{ zgGQxI*uez`;$b_kC}Ip1`>h(Sp0!IS!QQ>v^csK7MmXAdrY zK~uK>9x`4cMx_*!Nc)+t>}HRx+(+`_AG3c)mwia1JnvW+S=wC*zOHqCoIZ>+zgn=h zA8G+~V()oD=K9D?W>02*(!&44+*^OewXa>i zSa65nUPuV;4j}~Bgx~}TQV?7M!5xCTyM+i2!QEXG+@0X=aMxm=z3(~wj<-ku(D!!# z1ywcHs-hyWjXL@c<6?&bC8y!I8EEq)K=0Q1(#vba zS<1fOKlb}oVzJFXAi359>B?}5d6(ti-Xwt=0+OP z^TnX()s86}OltYrtONc`_Nf-?-TCA1si#9+eL7MRuDoX0S<88QVAk_EUCv#XBgKr}&4Oq94)u9iTh+c%5-Y|NK`JDkb-SxJ1k4KT*O{z_(MnFT?fZr)R*R9qeD?D4Ts^bo-U7E#hcV^6I`vCKqFiK`pM?4i=ZeTnkh2#KhspF7*Aw`)bA>f>sv%)rKevz zWfYcdVeOz(5zWI-zfUDKx=&a|b{&6~vw*VcVYryLt>%Zz`78TCHi!5j?iIm1)I0ba zWZEMnoeWL&tFQ}ViRN~9H>br^g*j(S;JET}c=%^$Rhu39Om7eICA+&L@^vJ6hXLDE z_>%yLtaU3fhBpL*k#R05WK|Iks*p=kc(7Q}PX5cQP`{foXj=>32M1%;?!9pfKXPeL zmOuNS&nD!NWAfc`#xu{_hj@%-WCfuH3UO2K?^ZsE68=$~abdUJCtBNY1rLvJoMa&K zv!_7NlKd@h?mF_H=`0-QUH3qvldUPY`JwUCr&C=pZRI+Z&SQ2zfnOL*-CT9OP5n?& z8*}!-U+PX3SId!cA+l+SQqEN%P0HPdWXgT(z{eX~47kL*HF*vJK1AKw53)=3NAgp{ zGO;?g3BO=mUjM)&$b~<7VvAa((%1ee1d;LTP%u*a*ztE7!{?8LMrYNZ*y{4%2p)dB zr)EeAaJ7=4?}7WRWcYxrTd~_vH_l$D3cn*06Y)cu;m^BjzePg|f@8WCnyK&1;hi+m)U=%} zdr~XgPuzBHdEoX5!C7FGUQ^bNm7Tf0G%YLC;ZH=dy$(Z&|3ax1MaQ{ronq@K{oE7q zO<7A!{Dh9E(o`ZadAOWuQ0RMciKg~ey`$~Le}M;9o(v~R%#R8HqaI^Vq&jzll-t1zzkeS&AQ*?S$bKN>g}W~dcYxw<=wz)wn=zYyIdz?7sV6hBq?G9UX$-t5 z*+sxJn;VH0XnxGywP00V9|M!8E^f3f^%NfCUpBP-4>GDX)m)}Ypu)P>;no{zo|@sxBTSI zO;P ziRaDQG4_m;pF=QZ#%C%VN4>Khy)S0R`%bnnM}A_lj>2dVY9Z2jXl-Zn)4IW-P*V+; zKj|{k_mwA9*rAmCp^KrE3aJ6W;Cq4;?zpXw{@fj(4D~fD1fE(D1Kk7gWUmVL;M3_% zg4GLP90dV|L(_;yLwrgpWRUeTtE;UNV>ds#g;`k;P`rVV@L6Ea-DE6xZC^>E_*tEL ziRv&3h^^hDEDzv)_=x(V03u`~HYP+JQ`SmNTzMaQaCopMUXv>>9mgZ-7Tq9}7#%e) z6VFqRF|B4pQ+vVd(%TFur z5;6<<9J+}xJ}II#cQn!+@ROS^}i7dIxf$?hvJ`3~yzZ!|_d6h!Wh zsjrG1kp@MYfUzvBlk3{=$a*07r@lY~)RN2`-))2`c>skR>#pg^OC=fd*UlUu&IcTj zn=&_yHkY%`C>Oyd_2vPEorXO_znq(>y>Q{vcc+Hol|1m;h*b_HpHw^ykjB+oiBUiO z?Xk|D_OMvrVTr9?(oLKY9TYoeDV^!!VbplFN!B7_PRX-vUylTE1h`fbS@G#hnv9RsBWgDB1 z&a8?rqj<}g8dql zC%gWGTj)u|I+vwUnbCV4g_sIUHZkO{QP8>jo~y5P%JoMT1T~BYBEts~gfDB8i<2T0 zgwHF#Q<3~aa-s*GFyI(gQOKjrZJnv0{Ru`N1C9&8fi%U zX}{Z3XA8ZYg3#ADGS$g{_I@@qzB(?eVyb>!jc+?08dv>Uz193w{}4le<^?ZktWp+H z^QD~w{%FwYa?-BZP6rg zYVF?MaajXO(?ts%h{+WJs;xOZ;7*-DF&2gQGs~CWH?$INqq2UzaIkqr?qGO_;TYl9 zvl4im;$S24agzOtE}9;%LcBsY8iNTZu)L*86M9IBselr);QGhyDQVjQ?$>Z2-N(iV zEmQRy@;ZU=-CU#vEqR}4j?m3oP*&Q3LQOUxoT<3vINTh4fBJPaDb-0?EVOQZN1xe7 z!27yo2xysyz5QU>Ko>x|n$8_T5kv{Cg6Ui)qD(RoW<^BuX_tdDkuAz6&g&EUHOB%YoL3lAvm zZ_j49t(pb*x?1^O(}bD8<{LPdK0gt^NwD09F?H^t3r#1n`_egNaU8q%6AN@JZQuU* z5QS((*;i!K$1JwUg>vSTE^XbaRrpMH>CoyeIj;1zR%ECwDz>CslHJhHcmZ7IIOXfU zRv<-}z^i3@N?^N6b(fQ_w6;)0=`hD=;$+hN)PDJkskWdC4rN;T7ePmR=) z_A(V>h~^N>Oir1=$T+#gO+@EAuU2n8oujbrCIM+)p-x_tf3y8fU5d6NqC(t~Kxi;z zZB7(tGO11i#)@x^8}&EDq_EzP%m$fA&pI#8WSV({gkwhj4H+3OEZO!g_=(z7 zFfzVbN|0vvQf~Lg-uxb9EpWKtQA^L7-htim`?k*3IWWli$0+>c-WQWORd2k9kwOK~{$ zE5z=LjuT?6mNc9TueVDr6X#!}nMxSz@fYI=6$Jr*S*l2|vsgl&G;RUQW>5RIk285O zLJ@Trc!p7cD(R{Jp_Mg!>r=*$^{U7UG#%dGuu1adW%sY0}yeI+`j4PFG zS4ue_qqYItpg3i??Y6Ai%SHd{Gj6^R7gFO1=DO5o>wL}mRc&bEO?}UYL4n-d0*Fi> zfj^zCa1nR1fnV8xq=y-sJDGUt^wX25QVjR^$W?7lmfaCXDx{(xsDGqS zNK{Sg)%=)PlgN}_Bs@=@6A>}oufMy$jDF5>+Im#62|j)QHa-lmj@PY6b0pV)4*B5F zgbX3bOW~N$zT!!zu_-SIgK5V^h6YH42$kp=R+plGwgjE#$2ZGCDWtG3nNp7RgiL85Bj3C=_J44dj{!u(NeDM?@Q?G5-75( z!~8cS4{IiGjvGaN4+sX1R8o@54yE)33o5zZOv7`esnCOo{fDRiLD}CSk1ttxST3KF zIVOs?lvAyaYFet?L2L81fD4!ZuADf${7X-SWjRO>c^5B$_wuuK5OdEATSi`s!e`e1 zehU2$2ZiR$`f+59JWAv;SM*KV9J#mN@3BcS{;zPMhL-C8GO+a@dG&Xz;lHL1fk+s6 z)1_x~7(K)T!+jF4`1XNJpr%VGc4q-jV|;|OXb&cFM4k=)%gP8&C}iN*IGgi7bLoCq z)654R(Axt&&})qeNx_Mu(t*a6)?ZFfJF^q+2?JD0Ow&BVK^w4n-}+@0BusDQLg`hj zR%`<>KYr{lJYq`aEtZHF0J7ff?NpKVcnIk&(~f=8wu0!kFxYtjl7hpajkf_xn=efd zW5;^YuOP0e)e+99*?Ly4YXtxF9S%C`o=iuuyNWLg;XHvpf$je6NA@Un)G)co$&fIO zyMaGGpoA`AR)FS1p0|4Ct3r*^vrXsgp-`nl(x^S;T*A{v)m|R{R6rQ&M?hHma1+*5 z;KsgK8r{R+w7X#Ez20+Rw$qLu4!98@+*D{U?i@QS9IoG=y#L*lNym~-NzslwJZ&J- z*C{^0s#_4(PG}>epS8Ff8qG;4yc)EtPjQ#1 zwNLX9{Xw?t280724MS(zz$cY>ks?J6k{u%%Ut(XR23>y;L^&!ubDaD9(a(s1;-=u+ zHP+egY;oslPl8Hj*ro3BSu*)d)1_O?X^2wjki}U2&~qDeHeH*UGrwLRjTv^!?wUOi zC1ryZy@wyF&HI_PTkwORWfQwD*2hIrLhDtxmtr~y9)!JX1pgBg?OBxFA&1xQxwY<2 zWVR(78P{Fmk6Y+&MPcfyWOCPF+NPeKYslg-(*TghxwSy=1_~j$v-M{@)j-naIRvgn z%j#j!=w6uFjkjTKL)TSV(r{3vCBg;3G6s1ra=MUafrY+rMXmURU?Jwqq3^Mo{Zyy&a&*|CG8!-$Q_TWRY`>3~xnxKob`AZ*x;<2q;b%QpY&J37Xw0};V9S)jg zHf}SC0kGmMAGZ0E_L8kjcXjV7XZcDQ)gG=C2yQmqqO8^%n!UOJLT!1-5Dae!tG%bt zB*=z5Sgonm5D|7{A!XWJx=T}D+?j=oIYq5{IEPx#RYJZuG1>4tt1pfNY{cqsANvW^ zW;m+k6Pg&g<}bC-`ZAwW&oW{TP8pD>F6i_*+F@RgfT_%&hYO@et1=870H1;wX{;mRxSmR+!X9Lv3Agdpk1X zKaC9Ek5v`T&qkVh0wP9dq8IxQc(qd9=?6TjZAw6PStM6&ENizNXplX*H+QPr# zvP0Ay+PsZATLb%0_)*hL7vr?nS$?mh_CaLXXCj2ou!l%}9VBpGze&S2c{MS(O-yG( zehLZaw)HhE=(sp>+YxB+yN+aO{?R3xS>?sul8mhx?SXE1`m`?v6K<0ota^%*Dz&bO zODm~6fXGI{DH}=57K<1%@2Wh-*d@WOnwO0@y(9NGL5>O0j>0{%xfv0&qKGo#PRD1v zLK8?67g!kQ1EQb8&-!F4tlSBjLWd{DemG&pjTK`}5!_G|=NmiF4X_$Lm^Kf8JtH*{ zf+%zGCLty(pOn2AiT}k$n)~e_M-M5Khl_k;&0MMp%UPd**)A(DJ|%H)k{x zdZGS+Sf2iV1e4SffBPjz?^&RC(wko*`~$%qQ)KvQ_BDlfE3ymIk8xKt)q^TeIjg+0 zt^${sn*bl)QFxLS6XDF_aOMsoNIYvRXDNb8GnN%H?$fAL{ip|_C!>DFAB6-kwL-%IL5&=0hS=n89o{n@Gq`9fdJ9lw)jFbCA1G4UBEYz7z z&O3!X7Vti16$7??)9ZCpn?OOnT5BIw_yS!VZzLK+sPC|zV}B{8&w!F{0(w6z5z4pa zycgfz7L#%n-lia#LkQ8xLb=P!xZR76S;>+f9PU(X?}hXiDtYs1Q}WmXdwmq--n8_2 za?;A?4KCuHElXi;6s@fnM&pg6^&E3+Q+(r7<_gw!RZ}j=O3=fhie4U0N&bLe-(>2c z{AL?(rA4Vq)$%=Q#|5Oh^jDfjsc6bI>mR_I-8fi5-G|F|_~MT}#3SeXn%DVz$26;` zjq^kFZ`AbSbRi77r@dBm=QZaf*ADTI23#NwCqt55eT}>u+ zN>E2oi!Lcna?8AOSq=xO%hOj>h7nm@4EaJ~uCebC%k)9@Z-py87B%5m_JeA)Rm&cjBn1B8#lsYU3H-rePDx&@<+OrL|AD zh!D+sf}vL7s?yU@W`0dh*<1BgeQ#K7|ITTN3F2OQMOz9*Gq(+dfRmw~w_yMGIk~S` zF>`axD*M$7{sYSaaXcn+l@u}{n)##BtH&jPT<~z-SZXEp=_|phn4fHd!5+qC)7t*7 zK9p0Xw<#gIv8TnQ=oOA`Mj1ESv-zAncDrrLhACsSG+s!B04|{g zQd<4fMZBBWp0nqK6z9oF*wad7UrqeB5RRe1t9n=aB-D`8Dq-}O^Xt@q1KHVE10e8Y zZD#{WoT-hfHJ>pGajU;WG12I_-5L)5L=N7%BDC$~ThB@|M562O8JTO>H^BJ`%q1+?PjQNK4JGH#;iNUX6F2n3s zjevswRr~o%@EK~Gy*nS(ERGc0mRmv2QX$n6zFkBd5)dyOP4pY1K%tRKIx&cw^g1HH zZxr!={n-@d>;veU*}Gr1tXaSKTM3#dW{+tiLH<2$xyY5w1y}x4|5oCODd_n<zIn*Wz+>Sf)4aGtg4S>yAn#{b?2S**mi2)34UqrbA#|N!Iz6@_ z{26T>M)usI3PRln@{0|-^4SnV8nOMUZ_{nJEUThCeuSvJNdVm`uT*2cZ z-}>R4#TqQ%q=QDFb`VvVfhEu^KHaIGY+Q0Gbk)U_sC;Evy`@otaMyS{D`}NS3Xv~v z)#Aqr?v&GXjEhT+*~qs;zX9_CJCA+ds8W}3)i3Hz<#b8~_8GQbx(nqlc1~nB4Cvtq zpG-(^rmQE49takKPQJB$^oxGtU^F%CteoT=<93rwsaB5PP(F07gh65UgI1s{ZxHSM z;%oT~r&TD6t?GiCo|=$E%7XW{QcM^DwTDTEf<`Mws}|q5`(bPCl3r4|2#{ERu=E{JCHNYkxt4gvfO%EmwRF@5fAQHa9Z`Lin z0QK(iXO1iqr@yD)eFjG@U#-Ou7-j!qpZ>gT;04;0LYg!2Pd0UI^mD0%$ZFD|V0;yb zKIr_m8!@DEUK{4v>Ic+wK|^(l>-j?8fn0^oDY^&RorcgBso3bC_NfWT{L#3p0^<|< zLbe!=Sq9BMPVLRw-j7~vp%kFpJky6)EV`9a^o~@$bwLMncF^qMT+f(xFYJKkGpUe^ zX{XcWfX82rH4Y>Q1Ba$n`tC#QD-sXHjkbB|RE@_L5lN}U6%_>jV z3Kc-wTuC$7tU7)g5r8?{l&XO*jEPv=rHJMA?e-qVPr_&7uR_nKyLv*6!OU`twd*TU zGLoSoGWrr-tiB;nd?&CM)Jz6L0v=QvBYsW~EsCk49GcY^DKESpC50s5ls{R+mcW+Y zWclFN9=?fbt!wAeNnEgJfp1*BjHD4aDc35<$#;`~lEi*7FR|I&+D}<(*u;hs@y+C* z=(d=z;NwOXwWGRVdO67} zMaX%4()20U7Z*aq^3t=#ws5YEtNfJ13udzXrtkz!WcZ{q=6tyj$k2-OY>gV0RH^`n zxJ1q;Ft>`^mX$wQ#l;X{jR(bDxAb85RB6^F;7BNp@w5R;OP-owwDv|%th)mZ`zXqf zB!KUm$oD)9?L9>3>x1S4N&Cg2hxv^g$_zTxFx^kQ`@O4C2WOks(yN#kd|QsTGBoM$ zeq>UV2M@-F*~%1ogvS``8=4~NOaW)ehxG6$)4zUjhfP>VR>;A#?FZNz)0rR(i2`DL z`m4b=(gIr*UCYoG-^x8UVcjx}6RmTP+`Cz~XxHm0l@_$)xW22$Jhzh7Z{zexN};Dwb+nBT*cVob(_f^ zq4IHVH-MDxfUY0AzVeRO`BocyBv0e$iICDzPT|>H&UZE~#{H+f)?ztky^PFm<1IJl zb;$h4#uTRN4?Q>U zC)yQ)o>&@^_CdpiA?DCHfvb#9WdbcfqpZW21s1SX`aTC3+-ASWmcjX2mfpDm{Y`_u zMdEX^iLywUzyk}F)>?{+eP|PEwcXdV#9$_lKNB%r7Pg_(}o|D1YJEJ zkd=FG*l`o{h-FK(a-204x05hOqM|7x2;o^mCwUwzW0(RV=H? zd&4Q&1pGB}PY#Cnah#TZYG)R{e7^kqL+Im;X^ZfS;j6Xz^`FMfq&k11zAp=v z=Uuvy&$w)~rS@4MZNRL2w%CIwbhH&5B%Z}zo!WLOu4GOCd)wd9a`t@1ke%)rkqRw2*42*}a6q2UL#oNB} zD1B<-yc;T=lC<}0CaCB=-uawh0!aRrzT*%U4e*|hSXG*{?SpZ8r4_U^ztMg;!)F+> zNEzF?kb3vd+$l6;RQ#xZ7DY7BsdLlT<5tT3y{6L&31F2+47*PsEb)sHKE$V7(e3Q| zU}hdHR|hsjE4|!GIAff;Zh4V6)58VK-mfQd1CRgz+OA^J|2*YliuLV``Jq?S5t#}F zABfH77^2FVVi}>3Gl`>!TSj}j39Zj7nYodXVs@9q$GM=q4i zE&sMIFBQ_@>Bh!2#w+l~M>3C)g4oq?1q+xQ?L z9@)-fa`pok^$?I-kUO3Q4*?#xSfcM~y_8+f)0g#oKp^u$nPJ&as6JWmelLf2EIitz zqc0`yB&o80uCjDsGML@|g}BdV7RIk{lZ52)U4n!FYKQxIDh)9A-wCT!i~t}%#t^ov zNX?BfZ|0qow;`CVM8nH{$IPtM{ylKS`fg6S*jm&Moftf*19hP|nGRqh3z>TCzbAnI zr}Hha@_kt(t=NKFb~!qFW~op*p#UvJ^RX8+r`a(w;2hR?w1BKQBy$ZLJw%J z8yCFeWvF$;{E4Ve-%X5Wb6Qdu>TV8go_v1ky2G{!NM6Jxh>UU^&+Gr9$p2py5abmE z(DQvNH;T>xQKsTJVHB2u>B->ZMv z1#QK76_j^pI`>Jk%phli3ew515%%4aE752>{!S9$qi?rvOuD>EK$o zTW`KgAq(h?>kSvpD{f*4MQH5$J#q0be?W!kjT1_4{kUIflbk(V=*KKu-AVzy!L3Smn^}Gk$C}| zQ;GY!qZpPsu$|*$tny{l!2qy##XeW2fm1=ONic!gn*?0fZHJk!>b< zPN>E2HI!S2^fQg#f&tTulgB+ll#3u2s9nz1leYAq90D_YGqa)+^@gsukpk=13pFH8 zZq!Af${%mUE8<>}$U+WwJLZ6GMh-$=4`KRKHYTJFWdHKSfrfaHD}78hdIEjFD=!pa z@-fT-HT1WlOtqC#K)>30B8Tm<`(M4?FE8)c4G8P%@2hM4@^EXTaQMYQ50Jiw|6 z$C5>tXfew3&KF1m@1>{k9;3y3<3sWE(i1#i2P3t4li~{n@qEdL{vu=MKA@u=v=5K) zjY*GbkW3_6Wc~KEA4tQf!?^HjMZ;pZr4Q3V#or9W4Zv~MwN~&Qw#OVY!R#5bGLgkM z0eC;p+HBT<0oHbXm0yO%)VeP#OuLxhi%o{3L{De@j~-i z$q}A^>1%&ddT4CDSsF7hl7~e4=}_W*g+00qYmxZU$%N|Sk4nb-I3?$~U+q8o+Q_5{ z&{Dr6`B4gC-prhA{HaT~NFmdL3f)L@^nB-{mc38DSU!cnmb&gq0)hpOz~DduH-6NXV6S46T(&KXi+F@K__M2-19hAIj2l{Dds@`N}-Tsmf{ zeoIwCjOv)7dI{a{XQ37e!fS*Nj$ONL$`K@Kd-4M?)q_;oi&TuC<1&Od&@^*T(a$3Sh`ixg-AwpDjNRWl*E>g5$1wU7ZOW zT-0JoS4W$Oh-2isdSG2(@)hOMdJ0Ef2(k*HH$Cqi%w<@w-t%&ek>{^X)f$fyQ`q6n z^2uM$$(hJVM*?|*XC@slpXmf@F{KImkj!eW2tA8MhOc7=lQm+I-Ef>z=XoBnFOIkc z2PkJ^WpibR8o4*k21;X+TVEM%$o+y0Zc{mwi)zV<(j-e+vA(i5$Dlv#-Ww7$*@(8R z=N5QBJas066w)ZA`5s*sHG$+e@yYPd{knCarARANH&XDOamf%e(vf1@F|4pn#R({?76Xd7R+k*qi}GF#@&xgrOIa#Tzw~F_7gL!Jn4ocQWlmn3qXP za5}?Ypa30@R3LDUqxk5}UgT+2z1+S2eaztv?@fSgDD?y*dv$=rl+{h1R;?;?8ob}} z^t%kBATq?01WQWttDVKB7A7oMlGmQ@7nG=U&)x(sytmV*0>sB z|8El&H9J?5mhGwF4Jiq$*vW%ufYVaCWi zWA{hD@K)%PxwhtT1s{hq6&PAQ3w!R{j89Az$kH5cqbw4fjf2D8OUt3CHPVE=`9jF+{6@>+p5IZ|xjqgw`eA(S$vV?_ z5Ass3RjbUzVX}z9+(d-k`0~@?-rp>ZCZX#UF910o`)V1YK7l{T5yQ)v&Pd_X>(#*t zMKBhYkOZ@u=s^me37b7AhBDB)#Q$4W8!Ap3=&$~*&KQcJ%V3lo(pP8M26z6-#*Bi_bgb;)mF<6xo$@{0K4L>iqy@PJdk6`zoEGLHfAtYguosbAro32 zMevi`ieHRzA@S*(!gH5|%JTQO@3h`joQZM)M&EZb#HzgRM8kTRu$>-_r2@V4wRdFYMKceP1`}uq- z(6@JwQY^(lSU_09+erVVD(=j3SIrw{f;Y?FJ!;MC4NKZFGL$1ag>x-(G$nRsWo>2U zWH4pdKog`wP)2ErvWGW-xN{}4RAIikauTpEpaSLU~wxl34OcgIUkTg7z4JUJgK z=uh_EOK^49!d)ks5=~rc7tOG9t_74dTCyOUyAkaz_i)s zZ`0oK11J|OK($xkyU%=$m2DZ-4m8-WT!J=g%-Lqb&(X3y%r^_G7Isd&f8IQ<6anJaDC-2>^#&K*SSl}o$jC@^P^hlkc)|k=wx<* zXPcF-oy2w$rQUW4^e?VuX{*mB<@q_;?9--?fM{zF+mj@BwVIaps1Lk%1a=8r-Xn?; z+?%55O+!UbKrU1@b>>N?VwAIpKp!DNY=R#bJ|aUSD4+1!7d@{j4%nB#Mvn_tf*>6v z{s}rEUDZ-g&b6jX`d^9Fb$+16&tBv-^mBE|mIi^S#d&#dmy3+c=~$uK?Jm^Qt7jqH z!efalQ1HtBnv}t6B%yE|XR4>EV<`&n>dn<1EEtWo@?0~0pqS29HR@9Sn#Lu&PZs1! z?9Sll?+Otef^|fvz6nZO06FYhABD6|7m-bj?2(0ZWF0P|BOH!{cw#OB3NZQ?<--~;wYDk4~=1wOL+bW)>xU73Aahns( zZ5!Uo*5OC*-gdv2dUpW7JpzlIMU)n}KF8i~w)Ep=J%VG4ahzntaR5jZFI;QsMt69I z7`SDz8fyJ54tO7_nD&J{aU!aU=apUTqGkL*fP7kL1kE03|2!gNpY)y|L6w7FUC=km zbUhB?n~O1G!VH6IR6wDRezmIdLq$x1uG`acc{@Z%aNg>9!6jo=85?bA;Z~^?MI6gf z7XO}5?BR4)wss){oMm6^giNeQE{DeO`gF**aVd8Wk57)HupDau$be@MIgN=|Ill8$*qI$T-b!`Srk5^wBxcX+cTH>QAj240Z+j{L%#MESoyw7{=_hgeP z;UOb3C2{wr2x)7YEEOa|%T9)nV^{VW1_(*}=J*DY6Y1cTHHrCNKs(encff)7FmwWk zR6XVU@4y~TRu2+OBg$@~Gj|grqP2i4lwF5DlugVhKFvQ!U}S>6Q`^$0NU<_6&&Nq= z(j%UDO|Y3n=eiqm0Bk1-*rcRB;mkwKXbGj-oeEy*G zC7ro0M%dn)Y&?q^}x_f!v~W*jlV=m_uxTPk%u}G-u6h1qW3L&xqt( zn967?N+D1$I*2MF->bTJx^KjDw#UV%0FHeR=?DWyX=E$ zmRJ?&^9lra!*Ep*kVxsRO12^LJM6Pow)b3@vK7>VlguVJv| zbVGy-EJ=YF6Q%u!SEi<+2oSsAVvUcV7X!iu5!;vQPT8jhJ!Ow&F9qE*dV_?xj9eyT z!D~v)<#m7CdVGW0pUCDMO2G2G1O=|_Z)()j{BCb#Trfng1{qVz(^yZZmDs<|8~*@( zk<1_&Lk_VML`9?BigFPpoKDh)&$G^dJ)ITlm;!hOuXW&Y-1ZH)PPk99CN7-)FxSmv z&uGGXSS?Y*MJ5&hrMPfGugBJo}twAOg@ccFI?lGmCM~>nHo=Xw{ zG3qburukdmdEJRT-QGde+woU?3QxXCQt$?c)rkAm`pDY%)fX}zL)bD42LRQK55svh zC@N8iv$ZSD$qo;PoKf_9pyIh3&YFZA%5K zsgEuGSA74TWss>N?*Nt*U4*u}?cxbN1vWRL3(`24!csiqrC?iuFfiM}QwYX!(!I}c ztmu{YWOM%5dAOzL`k!<({+Jc{OaMU$FgvVePPtH_=*X6>p8<5u zVqB1XBil4aOH!D5RG1LS0dfEDsb9s&xfQVA?+lcsVsXQ9frUJrw2|B3P8*<+60WW$-CJA#xu%G_`|my!F9_B-%&^LFL%BN!aO$xGLg?;zqNw_k%^@I2^l7g0 zvLBaf7QjGv2BQhpR>1P2H#D!GG4nq*r4H!Gf3}>0taLwN0^r*x$L-Ue_s6(w8n*H@ zp+-TD->&2m{c{2}y;mdmO9KFw*1LJzo*tkhWq8E{u4$eJL!eGY@3yOzU2MKpl;6P* z7a#8AX#n8wZCR1L$U#|yX zo5|0~4U6Y?C97+|V8f2=CQ3yKhg2fKLc`Zo0U2h12^9qJ zNWW0+g2;4h0MU8dkk9_|00;{RT>+`uTAoSDO+bA8E8S}cgGk3Ch#n^!Mn-ge?ItFK z|I6~Iq-Q+sRm|;{EpTX|UR+MHUgF={nnrS8I4`r+6C@Dzn;XU1c)8RuLLMPLX{(ui zYbS?b>d1L6;%Ig*LM8;Dhnh~!7JoXJ9U3h4Y~k-YAN2`lZdMcz8WCth>ySlQTTAVg% zd(AEbV0-F<8qrF@z?4@~UGzNjlJ1md?VmMGevK>DJ;pg~ma88ZtN8B9dWaVBl@-M^ zdY)c|jOK$YU)o@IwJ+S&5bn>%FWyQn@ShDv#&I$~0~ZbNCspG=rz0mDqT&9;iS_D& zgP*8HHuybuKh}I!E_G5F4CbdyUIwOL3^(Z8&SXS_MzAn-aopXVaDrJKpBJ>CkAV^k zqE|)D&@wR!XaHoD9%)=hPfNLO2s@3eb?v@{dy zs;NN+TU@SJYdU7<=@KH-L$)TXMAr-%pboE|Cq z2?M0?`juY85#J4-RY_d`9`Rb4L~dvwJ_T+%&>ZelKXSXI8mH4cayAg{b$^Qtu!Y|{ z0%8ZU9x}=a_w@;cZATLWKO|x>%MbE_Z{UbQT)O9Id9!m1w;zi^Vlyg_l>g{c2QtXa z-BF$5STeSiitE8}L`g?YN2cpzKP)#YtSI#`4q6%VYY8vxER9|p`Dib)ELGPGgZ%M;g6vb?s0T6JS6 zG5wf@Sa*NHzN0Udn6$Vu>22UJGnx@ZuSBT>S4^vA1&G-5F_()0gy4942N~fPZ3k}z zK64d%D^V5D;u{e9CHPgmK@g??olPX0TSz2@EgS7#=$Mm4+iT+`2W{s)4~Y5#?v-{| zr`jcgf%>bK4+Ybu`NcjNlI@K(@O9{{zF#f8X1kR7?MyouAW!pce22TnbE9SiMKxrj zjLL4CHdq@rz$}cGG)Fjq)i=JXN0?87Kn#6K-3&<<*5}q<)IVPlEutNkMcjp-r{fEu zKkb!PxmDZ?l(lH;O_bK5RmDBxafKc5VmpV&x@ODdAg5ZP9Gee=(mrVs$ZhpubwoeDnA#cdHA1C7|VJz|Y z<;r#w|GX_XUf?%ORR+s&8W%)N|m+mE$%nznY9jWJQ7I`nQ@E-)uzf91AWQM#<$o~2?#Jpx@BOcjhcMbt$nA| z#gzYf8uj|GOV(!*Seuqvk#-4T!+8Fkxg)@1%9F2pjdTJ<^Dwy3cE%1mR8cv`n5diC@8VPc~FwBzcE%FtB-9EW5qbw$ltIa5D<9KA#XN-_6Bic^I>ID;( zf+MIIEqu$h3!aC_$57shwVbL*Z$ip>Tm;c!bw9qxYM+q$O`N9ueos}yVc{EVO8z+sN_iNIOnru1Y|C0 z=F1|pG1iDU;fBs~Df{Ctyj+{;BGQY*$jM>UqJ-Cda|*Y`OWo#tB*#zZrX1{r=QosYQ4Y+gP%f+r8L8{blpq zW6alhK|s@c@GaK0+QuoTq{Q#9?^Q0#znF>rg;Pz;=?xr^xupyrc=rZ{N#8gYMCBiR z1_ktIfOFi>b%>M-h$l*Ay(NT>Y!;W$O&lvIl zW@xLKn=S9ZAXxiA>+R=p!v6c?V6^#$9nU@e*?^zRkJ~(Pas)=QM@Mo;ul1+}iLc{9 zG62BAa&ZaWdKxES0fTP*uS77L4e`4g%wj0Wzg-Fscu^c{RyD2^E1A1l(UKV8#2n-9 zMvmy{sK7)Jb`2*u>7-Ten-z%NL^$<{52%kGU?=BAMqBO{aQ1N9RRmB z5B-4KJg4>=^O$OJcr>MB%%L2n_qSJm>laT`t~5S|xeeuC)ByC;o3mCCq4~h|$r>Q$ z=LC3>C9^-B^1-mgo#>yf3c~pnFbGgGTNZ|kE~kn#ELPjF;eKk9S5Fp{RLo5TMjlWQYmYv^@FS`hW$GxO%{V`f-;}fo61}diP#ha z49y$3gRQWda0AdxC4JgCS#}p7J$Ko@unj`Xb-A`bgfZV@4tY({E!w4emREjf*%=LM zxVi^(s(SKGQlBF$7D*qZkY||_ntPcP32a18O7=%$A83x;`M&}4xs57Om!MQ&!ta^c zYu$yESi`q}9p|iTuvrlM!L(9vjQhC|(^Vkn2X(fKf8n_noyruut}{;?&3QBE{b6rpv(X zJ~FU2ry=nC*I037_SB#9u`1UtEbqIIl$Ah zcPMe~5ONb*1owe#a(-F_>vvZjL;V-FEc`z}WQB&OAnked2j2CF=Gc=+K$)igKh2$K zJe2?2_w7=4k$nkKA|%^n-`5s}kz`-TF0zL#S;j76EZKf#-;;H0gBV+3#-3#o5^Ay} z_jmN`f8E!U`@Wvsuh;Fd7tT4&oX7D!KF9kVf+y}?`b9{F`n7U)cO8gVnoS|cW$f(l zi<1zPP%@*{saONN!(V5B6P-E#)bNj~cbZtZVHAFm)dGs!tLJjn#&vduU^5pY6luQB z-;tBqQV79I+^|zw7ugCL1*>)2L6hKYJDF=sJ#fs80yR-t?|yAG*23+mw=IOnSI@y6 zKlty4B4YzA2#jfh92%B;g^u4L~d#(gIHK!M;fVfbj% z;$Uz+UAp(@*d!k%&mO8B9J!s#(3;5mF1bc&P}#1;vFq~v`KBHz+r{fg=CHc?OQl>( zgyp}Gxg>o^G}P}`yXeXk!R_gsSNu?jJMg8_!ZUxN`*LUDb}K}} zE4eh+?#ti%gQAsD?OmHa`nkz^IJAAG@GRc5ZIXBoA*(L`7!tKNZe=Ix8M!bZvH|{s z5k4V{3P}E=uH|VK?j}#+Z=IGj@Io7#mGco3#f7j7(5htV!mSi+Z-_fPXEdC(CE8YH z(R~X;?em2Um-9X!;aJ5AW?ruN7J2eiJB2p&3|k-TtO>r++^asj_EoLplVl%s8oT9O zFtUiVSrNy`{Bx!tJJFIZpwMtvOxpfi$o{W_KY{9o%XpTfY9wE%wjffOyKwcE`VE20 z!VA&6IwWiay4z|)%CI%czHXX()TB?l1flZh=zCrV2G&GZMKQdPE-uqqov!{l-7B&z zInshD9xHC&6pEIY$MS2yN=|ekIj8(!?guK4_?`iu-i|PazND6N;Q-MTPL3_rqap;) zKIf5aA3Scvt^-*uee2a+n8u`w!04rO;;CNU8E$f;QIi2`pKhXCscJpux5t0 z%4UyNO8HcbcRo$Gbj3#}4%y3aa=n>Cx{BL_xwJeQeJb`<$r{)6vfdzj@T44$4C!3)#mrj001#T=&Bb3+_=Z5aG<)dr6`Tc`lP$?sN=e?>Z$5eki z`zBu_e}=~u9Y#S+3FV}w(0;00l-H$a#T%MPu!ReqJR2!|2>|?O6PiQ+VREwz=M${{ zW>`a?eUh?LPW3V~fA$UI+75>^^5Caiu&4yRCC8C$$%-;%^g}Ik-x$3ZzMLuqG`f7s zF||3_wT#!VR?=VfXw*<=R3};IGyaZ)aT`oCBVqP7!^{&i>C|A(2|bMA_cTV2jDw7O z5})Kk`U@;5>`q^xv;FasC^^?rcBYMp1MO61=dq_$la1GM?k@??04@clam2HCe{dBY|H_YUL|IgY+rZg&A1Q(w=hi_uV+DS;_6H>Ra{4($1$4U8>Y19mus)e_KZl_6YwHutk%IQ% z%E(cd4C1$#aUcJ&=&LOfcrH2)x3cWSb!*x7@MfDy!(pjwziQC|`hEU_QJ98>_e+@3Psuq4u#|p*HxB&>aK0ADui=w@4Qiyw&~F&YG4;y{<~pheVhU zz7$SZxP)9&*FUK%V=`JNU4_KJDyb3|EqmzEa?AeEq1V;T%(Ap1o(WuDqqEAE3u;<9 zDDT95nluwov=7Av9=-UPo+$hf;ukEL7%L}jrFB2CNV-dSc~{KtEEcuqymJJYxz(YS zch2-NC+3R#)GGeCW|KLvSACyX^f1#7)O+`D@zq<~BKto@Q&|uB#3xXc`S){_y3uKs%g~hwPv1y| zR@27wUJDU-O)~WA96P0cZ72}kt>-z%l4&MxqunGtc0B6os6#vYIV2JjrO?2}^=w=a3-UkFmqCMHjJFw~d9P5d-&+ybzz`?0WwLtuU^`vTeD z1YrN|g$OQ(yo4#fcJw}HJmc+hu$ZGFNE)5u8SEoXu-vH!A>Z=LW(UZ-LrjwJD2QUul>!%Jo)DBI0J<8wFy2f^*C+P;`L>%XJ7( z$jnPnayYDQ$yt3KtO6^g$8zQIJi(uAJm&o%0mrm>x;}h(83+Uv(#i(v-3QBcAH`C$ zH{7o?YD^7QFD-urKQcUHN4j&+)s7e;MHMQQh)9%>>PT*BKA>|dQ8KvrVu-B|0uYNl z4A)64G5e!RX+Ja4$d@%28$%bHd5&CzCO>mX{?5YvZX+a1jwQ~7{_P6xX@zK?iH{qtN7l}A<{b~SEE1v2UT$})Y9Rx`LGJ}|hj`*~ z!>hqY_QvvXsoF2ZoIyi8NBH{XeX;h56?oV(>wklcFa{|hGQkHnro$zBK?cx`+xIX# zpHf5SrUBcn*>eK^ZDC4uQNO}<%rnz_{pVa7(@E>Nbjzf|HbDg0zW20z3(-rP3X6e< zY-gCv0c*vb`SEN*Y9=E2?<@gw4I2W;zDHqnu7h2H@{d>4a0+f;mMo%a8ksVo5QiPt zr*mUjUepNL1qCn}NFS*I#1Nl@&nX5B+7})0JA>~qm#2`Ng`-~yrq+`_`l?52;B66U znK*5?KNCO&yFnd9l~jHI+pp(;k8BWp*&O;l;TJ6@1wZLg<(!&skMJZKDIv=yDK7!M=P=&6s0OAmZ&~@i zCCN8>g?AKKIa45e2h{E7FyH3PNox!C#QpbliSndhXN){UFne$Tf$H|cvO258*9CmZ zBN>=ti~)9wB8h321e>hFOj;;<>uOm&4W_D{uhb1;jmKBIMmNA>@}Ck_zbLRNdg$cd zJs5E5`eIx9ES2TAR4a$**`z!k^EB7S4EO8RkSoj-Z0u(!MK`vgn@V}M6PMiUj6_@{ zri3S-)7M?AlOYZ45vv)oAbTK~WG`_d@B5E}sA;3VF=r0PCQg>bM$+3-8bW|#lR9%a zMlaY%Qme4A#4NY$Pz6m^@8vr^g7$X!AA?W6%@M zsDT_(co`+Cm&;|{+~$hz-E-$T$P+^;8QKxuAuf!Z(Kf4@ZhhFxU(F4Soupn-D%*GF zG>5?)PpT8xn!SaRIyi(`t@=E~NUo0`>+pB|;f0iNK%$>~lBm5(6CMQ_%M93hI6~`! zxm`u=;T%?(9%M)bH0v5yuh+?Z&)5Q&;Q}GKLD4{_3JuC;m_d-+ft6bCO!ILVyWC5J zWQ^hX^XX8_NBbkJm60yGbt7)56*ozWaG_Maigt#F)=A`RCq!9XH@Dj?9zD$;Uc>Av zP*3t+UbNv&Ftp<{DB*ojbqlmz1JywOl9nlj;^A-<5qP{dtQ>8FpgXtzu=cFx=FLEc z@Xz+xdFg9 znhIO*jYG%tBvR+D_P@gXIyb5tu9N( zx$8v`xo%z1Q<1}?epzSpJKHtww{ni)*!j@0ag#B}6$elyS@!XCsol*Nf)i_CFf`Ku zFv<~gIr7aTYia^=HqL0-P0a*Zsx)!VF%>gih35esq_T84z3_$Tala$sf)7YqT9;C@ z)hmwo=(-qbOr`TDg@g8Q_V{EnsYE*vL$Qv@3mW1D`Xe4GSnx=gtmTs@x4TwWAS$fY zi>GJeMkR0+DA?_|LKh*K5PM%3GH+N<@1oNnNe?j*KJp}fNv3r8&iMwUd)AOs=o%$S z7zTf`x1BC2#AZqo5R<6p_l03lEY0PmzDlD-9yohoe?e8gW1dTh@FZ4x(0{0IZV_nZ zPfTIdB2l)-0zehG!fiuA)ZXi3q@?q5Mpd=F1Rbp-6PXCuWt$tm&nbR zP*3kwSR)qAREOG!=Ba7mW)Z$6AA$f=>;A7g%*EQ8ffM81#^p0_o;Z`BK9XV>sw0AV zBn?w9_fKx5>OoVlKATf@-J>lz!F*(1N(#VzP4RFe;aYz8VB~fDSF^~LyY#-RN73MY zQ`?eS+gX#=($&m%b8YEQp67#3Z=vbN=VdwWxwE?~ZX&6;1=Oy|!G^Mzo>)*ZZe}TczJgHBA-7y{;<|G! zwV|yJ!0u@nY?Bgn-dPn*sr=0RsUhUB75jS}USMGs6%P?xj@M#Y$k5zpTVYcq6~U8V z{S9?Rs%b5|+#2VSd_zX&=}Q-A8<;^2|0l|qUz@JZQzYO%@qSJ7rL5ye{lpw zVK9m61pkpiyi_Vl^2OT%4~Ctib)}2x7)zn@t7o&J(ojKD4$KqsQ9*K z#>zHoSxQ`XEzLvb(Vgr1(CYj!uUo)Md*J^VihCH-Cw^K|hqPa`TQ!{I8k3)9LrB}* z+e~D0oWd_a@KNywC2WwmD}7H!aP$4#~QRd9zvl5?tU#9&lY6 zS6uKHK~PCV(!qz~3%w?-roxVQ0ucLR3g`>z+FA2*R@r=Cz5VC^?%vRDdvHqcQ z_H*&=EtFDs(Vj=d{XZlfzbXx{>%OqCePN8 zp9?Q`F((LpPeI0n;Rg4ZVM@6AhBA9H@^5NKj%OQlX%~eJ03(Y4xfF|W5fK5Q+t_qr0WoM6hP{@e6H73e+q0uTQ8 z-s3s1(n`$D07{$5<|}K@CL(H`JZn z+WKbKI6bH_Jhp>h$EAw}2RxNC(O6rts@HYDDLgvk02E_g$v=;S2|SGKQ-dZrCN zm*!E{I2rI5J+bYmPV^=)B>eyqi-2vLCAg%TvMV#;(>E{;fJ-dJqtA4YgT=D0YNp!v zjGco#w_Ds6lk-4o@Q#DNp}mog>u|pP(0;_+GxE~3rtf0)O0|pWzHu{5&5>Ip@2nKZ zvDn4E{rix_3RH-6TCvq`osGR%>+4n=Q9sQAX7T(xOvp3V%fQqk{)rHY;k7$;`<_PJ zMdiL?{?Lw%FiLHte8LySi|0)LWBCm$chAn+n()MrV*LwX2jI3EV%SD~8V>3D% z09WQsr!Nq;h}3E+>5Fwb27#i-Y_o?lI=uB-`oaqzOAy9#1N4sf4`@53@zDG+1Ms>T zlJ)yc6J!_3Qv`F(stsv;z%H4hn$WG+d1yp1UZDXS0L(Os-N`wT+Sio-y^U?H24L!?ujE z^$HUhCbXuDsv^xQa*82J(%m>QoB&9sjnUh)nNU$E^P=WI(i+buF)BM#PRY|CUG*1dWw+}W)QbGV{( zv}^w)Lc5|-b8XnZy@d<=Y~Y8E-J>$I+pkt+vEsC!Mwj0*-cB61^nKDSMN0wl{7J`W z#@N9yfK_;}`iT#5SUj=xs2ebIMM%FkPh0F0{so_7JJ%o9 zI9KzfH2td5p2OCfp!ms0;k7!d`YrSR7cFHwb$tDz1CzE&s`Z*;b_O{Tg2E)?*)2DY zM=C4HuFd+RL@{Xu2(Cx* z-609=G?Ap22&_5CT;kg8?=GSA7|PMx2Hy7I!aK6pBJM&=UeZWro{jJ&+#&hDM|=MT zh5ls2<*~0{mK+X`hQ|(UN$aize2!5?L2cy?=KWPmz5b5fQ^I(^<^Efsrq3)EJoHJ~ zOu@@~ literal 0 HcmV?d00001 diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/image.png" "b/\345\255\246\344\271\240\347\254\224\350\256\260/image.png" new file mode 100644 index 0000000000000000000000000000000000000000..432c66f9de0749ff1c31e8813cc78af98f1c0a0e GIT binary patch literal 45865 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 literal 0 HcmV?d00001 diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/print()\345\256\230\346\226\271\346\226\207\346\241\243.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/print()\345\256\230\346\226\271\346\226\207\346\241\243.py" new file mode 100644 index 000000000..9fd90ab4f --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/print()\345\256\230\346\226\271\346\226\207\346\241\243.py" @@ -0,0 +1,7 @@ +import sys # 如果没有这一行,代码会报错 + +print('Hello', 'world!') # 下一行的输出和这一行相同 +print('Hello', 'world!', sep=' ', end='\n', file=sys.stdout, flush=False) +print('Hello', 'world!', sep='-', end='\t') +print('Hello', 'world!', sep='~++') # 上一行的末尾是 \t,所以,这一行并没有换行显示 +print('Hello', 'world!', sep='\n') # 参数之间用换行 \n 分隔 \ No newline at end of file diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/print()\350\277\224\345\233\236\345\200\274.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/print()\350\277\224\345\233\236\345\200\274.py" new file mode 100644 index 000000000..7ffb9d41b --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/print()\350\277\224\345\233\236\345\200\274.py" @@ -0,0 +1 @@ +print(print('hello world')) \ No newline at end of file diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/print\345\207\275\346\225\260.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/print\345\207\275\346\225\260.py" new file mode 100644 index 000000000..56f2802fe --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/print\345\207\275\346\225\260.py" @@ -0,0 +1,4 @@ +name='Ann' +age=18 +print(f'my name is {name},age is {age}') +#注意使用了f-string的功能 \ No newline at end of file diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/sort()\345\207\275\346\225\260.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/sort()\345\207\275\346\225\260.py" new file mode 100644 index 000000000..21c6b6d65 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/sort()\345\207\275\346\225\260.py" @@ -0,0 +1,5 @@ +from IPython.core.interactiveshell import InteractiveShell +InteractiveShell.ast_node_interactivity = "all" + +print(sorted('abdc')) +print(sorted('abdc', reverse=True)) \ No newline at end of file diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/\345\237\272\347\241\200_\350\264\250\346\225\260.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/\345\237\272\347\241\200_\350\264\250\346\225\260.py" new file mode 100644 index 000000000..2b4235f0e --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/\345\237\272\347\241\200_\350\264\250\346\225\260.py" @@ -0,0 +1,13 @@ +def is_prime(n): + if n<2: + return False + if n==2: + return True + for m in range(2,int(n**0.5)+1): + if n%m==0: + return False + else: + return True +for i in range(50,100): + if is_prime(i): + print(i) diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/\346\226\220\346\263\242\351\202\243\345\245\221\346\225\260\345\210\227.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/\346\226\220\346\263\242\351\202\243\345\245\221\346\225\260\345\210\227.py" new file mode 100644 index 000000000..48b64795b --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/\346\226\220\346\263\242\351\202\243\345\245\221\346\225\260\345\210\227.py" @@ -0,0 +1,6 @@ +n=1000 +a,b=0,1 +while a Date: Wed, 7 May 2025 19:19:07 +0800 Subject: [PATCH 07/17] =?UTF-8?q?=E5=AD=97=E7=AC=A6=E4=B8=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 字符串Method --- Part.1.E.4.functions.ipynb | 2 +- .../5.5.md" | 296 ++++++++++++++++++ .../5.7.md" | 2 + .../image-2.png" | Bin 0 -> 83625 bytes .../image-3.png" | Bin 0 -> 32015 bytes .../join.py" | 4 + .../replace\345\222\214expandtabs.py" | 19 ++ .../startswith-endswitch.py" | 24 ++ .../str.count.py" | 9 + .../str.find-rfind-index-rindex.py" | 24 ++ ...46\344\270\262\345\261\236\346\200\247.py" | 12 + ...62\346\240\274\345\274\217\345\214\226.py" | 16 + ...06\345\255\227\347\254\246\344\270\262.py" | 20 ++ 13 files changed, 427 insertions(+), 1 deletion(-) create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/5.7.md" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/image-2.png" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/image-3.png" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/join.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/replace\345\222\214expandtabs.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/startswith-endswitch.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/str.count.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/str.find-rfind-index-rindex.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/\345\255\227\347\254\246\344\270\262\345\261\236\346\200\247.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/\345\255\227\347\254\246\344\270\262\346\240\274\345\274\217\345\214\226.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/\346\213\206\345\210\206\345\255\227\347\254\246\344\270\262.py" diff --git a/Part.1.E.4.functions.ipynb b/Part.1.E.4.functions.ipynb index 2e69d1e08..c76f050c1 100644 --- a/Part.1.E.4.functions.ipynb +++ b/Part.1.E.4.functions.ipynb @@ -705,7 +705,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.3" + "version": "3.9.21" }, "toc-autonumbering": true }, diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.5.md" "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.5.md" index e69de29bb..e7a19d016 100644 --- "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.5.md" +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.5.md" @@ -0,0 +1,296 @@ +## 字符串 +所有的值都要被转换成二进制 +### 字符码表的转换 +ASCII到Unicode(2^64) +```python +#单个字符转化成码值 +ord('a') +#把Unicode码值转化成字符 +chr(97) +``` +### 字符串的标示 +1. 单引号 +2. 双引号 +3. 三个单引号 +4. 三个双引号 +### 字符串与数值之间的转换 +由数字构成的字符串与数值之间可以相互转换: +```python +#整数 +int('3') +#浮点数 +float('3.1415926') +#字符串类型 +str(3.1415926) +``` +input作为内建函数,可以接受一个字符串作为参数,并返回字符串的值。 +> 注意input返回的是字符串,如果需要与数字比较则需要类型转换,直接比较会报错。 +> input有一个可选参数,在用户输入之前会把参数输出到屏幕上。 +```python +age=input('请输入你的年龄:') +if age<18: + print('未成年') +else: + print('成年') +#注意:这里会报错,因为input返回的是字符串,需要转换成数值类型 +#直接修改提示语,确保用户输入的是字符串数字,再进行转换: +age=int(input('请输入你的年龄:例如:18')) +if age<18: + print('未成年') +else: + print('成年') +#int()将input返回的字符串转换成整数类型 +``` +### 转义符 +> 本身不被当作字符,如果需要在字符串中含有,就得写\\: +```python +"\\" +#有时会遇到字符串的'与字符串中的'相冲突的情况导致了系统误读。 +#解决方法: +# 1. 使用转义符 +'He said,it\'s fine.' +# 2. 使用双引号 +"He said,it's fine." +# 3.习惯使用\'和\"表示字符串内部的引号 +"He said,it\'s fine." +``` +> 转义符其他用法:制表符和换行符 + +### 字符串的操作符 +1. 拼接:```+```或``` '' ``` +2. 复制:```'string'*3``` +3. 包含:```'string' in 'string'``` +### 字符串的索引 +> 字符串属于容器的一种(Container),容器可分为有序和无序两种,字符串属于有序容器,容器中的每个元素都有一个索引,通过索引可以访问到容器中的元素。 +> 每个字符串都有一个索引,从0开始,到字符串长度-1 +```python +s='hello world' +for char in s: + print(s.index(char),char) +``` +我们可以使用*索引操作符*根据*索引**提取**字符串这个*有序容器*中的*一个或多个元素,即,其中的字符或字符串。这个 “提取” 的动作有个专门的术语,叫做 “Slicing”(切片)。索引操作符 `[]` 中可以有一个、两个或者三个整数参数,如果有两个参数,需要用 `:` 隔开。它最终可以写成以下 4 种形式: + +> * `s[index]` —— 返回索引值为 `index` 的那个字符 +> * `s[start:]` —— 返回从索引值为 `start` 开始一直到字符串末尾的所有字符 +> * `s[start:stop]` —— 返回从索引值为 `start` 开始一直到索引值为 `stop` 的那个字符*之前*的所有字符 +> * `s[:stop]` —— 返回从字符串开头一直到索引值为 `stop` 的那个字符*之前*的所有字符 +> * `s[start:stop:step]` —— 返回从索引值为 `start` 开始一直到索引值为 `stop` 的那个字符*之前*的,以 `step` 为步长提取的所有字符 + +提醒:无论是 `range(1,2)`,或者 `random.randrange(100, 1000)` 又或者 `s[start:stop]` 都有一个相似的规律,包含左侧的 `1`, `100`, `start`,不包含右侧的 `2`, `1000`, `stop`。 +### 处理字符串的内建函数 +```python +from IPython.core.interactiveshell import InteractiveShell +InteractiveShell.ast_node_interactivity = "all" + +ord('\n') +ord('\t') +ord('\r') +chr(65) # 与 ord() 相对的函数 +s = input('请照抄一遍这个数字 3.14: ') +int('3') +# int(s) 这一句会报错…… 所以暂时注释掉了 +float(s) * 9 +len(s) +print(s*3) +``` +### 处理字符串的Method +字符串一个对象,更准确说是str类(Class str)的对象,它有一些方法(Method),可以用来处理字符串。(类>对象>方法) +#### 大小写转换 +```python +str.upper() +str.lower() +str.capitalize() +str.swapcase() +str.casefold() +str..title() +#举例: +s='Now is better than never.' +s.capitalize()#句首字母大写 +s.title()#每个单词首字母大写 +``` +#### 搜索与替换 +官方文档是这么写的: +1. str.count +> `str.count(sub[,start[,end]])` + +下面的函数说明加了默认值,以便初次阅读更容易理解: + +> `str.count(sub [,start=0[, end=len(str)]])` +这里的方括号 `[]` 表示该参数可选;方括号里再次嵌套了一个方括号,这个意思是说,在这个可选参数 `start` 出现的情况下,还可以再有一个可选参数 `end`; + +而 `=` 表示该参数有个默认值。上述这段说明如果你感到熟悉的话,说明前面的内容确实阅读到位了…… 与大量 “前置引用” 相伴随的是知识点的重复出现。 + + +> * 只给定 `sub` 一个参数的话,于是从第一个字符开始搜索到字符串结束; +> * 如果,随后给定了一个可选参数的话,那么它是 `start`,于是从 `start` 开始,搜索到字符串结束; +> * 如果 `start` 之后还有参数的话,那么它是 `end`;于是从 `start` 开始,搜索到 `end - 1` 结束(即不包含索引值为 `end` 的那个字符)。 +> +> 返回值为字符串中 `sub` 出现的次数。 + +注意:字符串中第一个字符的索引值是 `0`。 + +2. str.find +> 找到sub在字符串中的第一个后,返回索引值,找不到就返回-1 +3. str.rfind +> 找到sub在字符串中的最后一个后,返回索引值,找不到就返回-1 +4. str.index/str.rindex +> 与str.find/str.rfind类似,但是找不到会报错 + +5. str.startswitch +```str.startswith(prefix[, start[, end]])``` +> 判断prefix字符串是否以某个子字符串起始的 +6. str.endswith +```str.endswith(suffix[, start[, end]])``` +> 查找suffix是否在目标字符串以子字符串结束的 + +> 查找前可以使用in来确认子字符串是否存在于目标字符串中 + +7. str.replace +> 替换字符串中的子字符串 +```str.replace(old, new[, count])``` +> 替换count个实例 +8. str.expandtabs +> 将字符串中的tab转换成空格 +```str.expandtabs([tabsize=8])``` +```python +s1="Specail\tcases\tare\tsimple" +print(s1.expandtabs(2)) +``` + +#### 去除子字符 +1. str.strip([chars]) +> 一般用来去除字符串首尾的所有空白,包括空格、TAB、换行符等 +```python +s="\r \t Simple is better than complex. \n \t" +s +s.strip() +``` +> 如果给定参数,那么参数中所有字母都会被从首尾去除,直到首尾不再包含 +```python +s="Simple is better than complex." +s +s.strip("Six.p")# p 全部处理完之后,p 并不在首尾,所以原字符串中的 p 字母不受影响; +s.strip("pSix.mle")# 这一次,首尾的 p 被处理了…… 参数中的字符顺序对结果没有影响,换成 Sipx.mle 也一样…… +``` +2. str.lstrip() +> 只对左侧处理 +```python +#str.lstrip([chars]) +s="Simple is better than complex." +s +s.lstrip("Six.p") +s.lstrip("pSix.mle") +``` +3. str.rstrip() +> 只对右侧处理 +```python +#str.rstrip([chars]) +s="Simple is better than complex." +s +s.rstrip("Six.p") +s.rstrip("pSix.mle") +``` + +#### 拆分字符串 +计算机擅长处理格式化的数据,excle或numbers可以导出csv文件,这是文本文件。里面的每一行可能由多个数据构成,数据之间用,分隔。 +1. str.splitlines() +> 将字符串拆分成一个列表,每个元素是字符串中的每一行(根据/n或行进行拆分) +2. str.split() +> 根据分隔符进行拆分 +> str.split([sep=None,maxsplit=-1]) +> 默认按照None(空白\t,\r等)进行拆分,也可以设置成,等。-1表示拆分全部,也可以设置拆分的次数。 +3. str.partition() + +#### 拼接字符串 +1. str.join() +> 将字符串列表拼接成一个字符串 +#### 字符串排版 +1. str.center() +> 字符串居中,并使用指定字符填充,前提是设定整行长度 +```python +#str.center(width[,fillchar]) +s='Sparse is better than dense.' +s.title().center(60) +s.title().center(60,'=') +s.title().center(10)#如果宽度参数小于字符串长度,返回原字符串 +#字符串向左或右对其 +s.title().ljust(60) +s.title().rjust(60,'.') +``` +2. str.zfill() +> 字符串右对齐,使用0填充 +```python +#str.zfill(width) +for i in range(1,10): + filename=str(i).zfill(3)+'.mp3' + print(filename) +``` +#### 格式化字符串 +> 格式化字符串指的是特定变量插入字符串指定位置的过程。 +1. str.format() +> `str.format(*args, **kwargs)` +作用: +> * 在一个字符串中,插入一个或者多个占位符 —— 用大括号 `{}` 括起来; +> * 而后将 `str.format()` 相应的参数,依次插入占位符中; + +2. f-string +#### 使用f-string +> f-string 是 Python 3.6 引入的,它是一种格式化字符串的新方法。 +> f-string和str.format()类似,但是写法更简单。 +```python +name='John' +age=23 +print('{} is {} years old.'.format(name,age)) +#不写占位符索引的情况下,默认占位符从0开始,即0,1,2,3...(占位符数量-1) +# 即'{}{}'.format(a,b)和'{0}{1}'.format(a,b)是一样的。 + +#'{0} is {2} years old.'.format(name,age)会报错,因为占位符索引超出了占位符数量。 + +#str.format()里可以直接写表达式... +print('{} is a grown up? {} '.format(name,age>=18)) + +#f-string +name='Jack' +age=25 +print(f'{name} is {age} years old') +print(f'{name} is a grown up? {age>=18}') +``` +> .format()和f-string的区别:插入占位符和调用format并传参;直接把变量写在占位符里。 +> 但.format可以改变参数索引顺序,更为灵活。 +```python +name='John' +age=28 +'{1} is {0} years old.'.format(name,age) +``` +### 字符串属性 +字符串一系列Methods,返回的是布尔值,用来判断字符串的构成属性: +1. str.isalnum() +2. str.isalpha() +3. str.isdigit() +4. str.islower() +5. str.isupper() +6. str.isspace() +7. str.istitle() +8. str.isnumeric + +```python +# 字符串属性 +# 1. isalnum() 判断字符串是否由字母和数字组成 +# 2. isalpha() 判断字符串是否由字母组成 +# 3. isascii() +# 4. isdecimal() 判断字符串是否由十进制组成 +# 5. isdigit() 判断字符串是否由数字组成 +# 6. isnumeric() 判断字符串是否由数字组成 +# 7. islower() 判断字符串是否由小写字母组成 +# 8. isupper() 判断字符串是否由大写字母组成 +# 9. istitle() 判断字符串是否符合标题格式 +# 10. isspace() 判断字符串是否由空白字符组成 +# 11. isprintable() 判断字符串是否由可打印字符组成 +``` +.... +### 总结 + +![Alt text](image-2.png) + +![Alt text](image-3.png) + diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.7.md" "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.7.md" new file mode 100644 index 000000000..500bef10f --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.7.md" @@ -0,0 +1,2 @@ +# 数据容器 + diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/image-2.png" "b/\345\255\246\344\271\240\347\254\224\350\256\260/image-2.png" new file mode 100644 index 0000000000000000000000000000000000000000..7960bceea78685b13774a51cb631a8ecbe269638 GIT binary patch literal 83625 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

6_* zXAbm9@oM#iYwU$qRrhyVx3|1i&&FQp2i8X`6e%(D#5{;@6^*n60xjw>JOjlTK%UdIxGwSbs*X%n@Y*+3 z0xp|DOiNF!=%`98Rprvfh(7NwcSCq)G=Xsu+{zMW%Mn+v171zfUZtwh%Q?O-*G1z( zE`Z6jk>sjk&mB^YzlYW%_Fe&RuJKlOQz_PteZKbct(;p^K2y29x)pd>Ea_6<^AG~$ zy`FO&#}}{ELG4Fy>G|n#BcUVd*!1v#lq05O$*>rbWe#R%h1MSqxznV1KLuS3mPkW> z?IeYC;l*EAo_EKFWqP?ANAUwvy7#a@*remlES=*moLmN-4s=2v)1+N>Q z{P{Usw)m<3INJ1y_uvqID3Ge+X(H+QmB%3n!673+a@0*5I-VCq1Klcf6vuarhDLy1 z@su*kVHZ>HK`f?Zz=IbXzz9RN#(6|aM)WO#%Y!|KU;SigGQv~*n|~Z+=;&-|S)^!l zDyP{+$FffBsFmoHXOK2(;OBTosS!v#Dty$6(6`EpEC-n0vD|Tj3D8Xj*_@4kUbrUZ zOFlS|RY1D{e=v>L2edN?*3|zK?TN_;nqpZYu zLOI61*ssTrm-yF;F8~j0Cdwg7mo5tTX|#cskyztuTH$@8$@RfAVd`1QAWz)B;T8~6 z-pL!M?&V~}dHm&MTRV4u%T8P0^{#=r4~afiW6MnN2csSe@&E*Xn8g1rbKT$O9R$ii zi=6%k?zjPh#jffe$p6=G2GW&i-kSdvVM4?Kr!oI8S_u5|kN*EBN&e5B=Pl*3-qOcR WZhD#Dv{hmNKZYc{` literal 0 HcmV?d00001 diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/image-3.png" "b/\345\255\246\344\271\240\347\254\224\350\256\260/image-3.png" new file mode 100644 index 0000000000000000000000000000000000000000..5ac4bba33f0041c5b0fe784b203c2de67c9adc34 GIT binary patch literal 32015 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 literal 0 HcmV?d00001 diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/join.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/join.py" new file mode 100644 index 000000000..557f364ef --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/join.py" @@ -0,0 +1,4 @@ +s='' +t=['p','y','t','h','o','n'] +s=s.join(t) +print(s) diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/replace\345\222\214expandtabs.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/replace\345\222\214expandtabs.py" new file mode 100644 index 000000000..266162e72 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/replace\345\222\214expandtabs.py" @@ -0,0 +1,19 @@ +#replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。 +s="""Simple is better than complex. +Complex is better than complicated.""" +print(s) +#str.replace(old, new[, count]) +print("s.replace:",\ + s.lower().replace("is","IS")) +print("s.replace:",\ + s.lower().replace("is","IS",1)) +#count=1,只替换一次 +print("s.replace:",\ + s.lower().replace("is","[]",2)) +#expandtabs() 方法把字符串中的 tab 符号('\t')转为空格,tab 符号('\t')默认的空格数是 8。 +#str.expandtabs(tabsize=8) +s1="Specail\tcases\tare\tsimple" +print(s1) +print("str.expandtabs:",\ + s1.expandtabs()) +print(s1.expandtabs(2)) \ No newline at end of file diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/startswith-endswitch.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/startswith-endswitch.py" new file mode 100644 index 000000000..cca30c55d --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/startswith-endswitch.py" @@ -0,0 +1,24 @@ +s="""Simple is better than complex. +Complex is better than complicated.""" +#str.startswith(prefix[, start[, end]]) +print("s.lower().startswitch('S'):",\ + s.lower().startswith('S')) +print("s.lower().startswitch('s'):",\ + s.lower().startswith('s')) +print("s.lower().startswitch('b',10):",\ + s.lower().startswith('b',10)) +print("s.lower().startswitch('e',11,20):",\ + s.lower().startswith('e',11,20)) + +#str.endswith(suffix[, start[, end]]) +print("s.lower().endswith('.'):",\ + s.lower().endswith('.')) +print("s.lower().endswith('.',10):",\ + s.lower().endswith('.',10)) +print("s.lower().endswith('.',10,20):",\ + s.lower().endswith('.',10,20)) + +#找sub/prefix/suffix前确认子字符串是否在需要找的字符串中,可以使用in操作符 +print('mpl' in s) +print('mple is' in s) +print('mple iso' in s) \ No newline at end of file diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/str.count.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/str.count.py" new file mode 100644 index 000000000..1135abafb --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/str.count.py" @@ -0,0 +1,9 @@ +s = """Simple is better than complex. +Complex is better than complicated.""" +print(s.lower().count('mp')) +print(s.lower().count('mp', 10)) +print(s.lower().count('mp', 10, 30)) +a="hello world" +print(a.lower().count('l')) +print(a.lower().count('l',4)) +print(a.lower().count('l',1,4)) \ No newline at end of file diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/str.find-rfind-index-rindex.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/str.find-rfind-index-rindex.py" new file mode 100644 index 000000000..132de1bb4 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/str.find-rfind-index-rindex.py" @@ -0,0 +1,24 @@ +#str.find(sub[,start[,end]]) +print("example str.find():") +s="""Simple is better than complex. +Complex is better than complicated.""" +print(s.lower().find('mpl')) +print(s.lower().find('mpl',10)) +print(s.lower().find('mpl',10,20)) +# 没有找到就返回-1 + +print("example str.rfind():") +#str.rfind(sub[,start[,end]]) +#返回最后sub出现的位置,find是最早出现的位置 +print(s.lower().rfind('mpl')) +print(s.lower().rfind('mpl',10)) +print(s.lower().rfind('mpl',10,20)) + +print('Example str.index():') +#str.index(sub[,start[,end]]) +#作用与find相同,如果没找到,就触发ValueError异常 +print(s.lower().index('mpl')) +print(s.lower().index('mpl',10)) +#str.rindex(sub[,start[,end]]) +#作用与rfind相同,如果没找到,就触发ValueError异常 +print(s.lower().rindex('mpl')) diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/\345\255\227\347\254\246\344\270\262\345\261\236\346\200\247.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/\345\255\227\347\254\246\344\270\262\345\261\236\346\200\247.py" new file mode 100644 index 000000000..ae52cb90b --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/\345\255\227\347\254\246\344\270\262\345\261\236\346\200\247.py" @@ -0,0 +1,12 @@ +# 字符串属性 +# 1. isalnum() 判断字符串是否由字母和数字组成 +# 2. isalpha() 判断字符串是否由字母组成 +# 3. isascii() +# 4. isdecimal() 判断字符串是否由十进制组成 +# 5. isdigit() 判断字符串是否由数字组成 +# 6. isnumeric() 判断字符串是否由数字组成 +# 7. islower() 判断字符串是否由小写字母组成 +# 8. isupper() 判断字符串是否由大写字母组成 +# 9. istitle() 判断字符串是否符合标题格式 +# 10. isspace() 判断字符串是否由空白字符组成 +# 11. isprintable() 判断字符串是否由可打印字符组成 \ No newline at end of file diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/\345\255\227\347\254\246\344\270\262\346\240\274\345\274\217\345\214\226.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/\345\255\227\347\254\246\344\270\262\346\240\274\345\274\217\345\214\226.py" new file mode 100644 index 000000000..044178ad5 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/\345\255\227\347\254\246\344\270\262\346\240\274\345\274\217\345\214\226.py" @@ -0,0 +1,16 @@ +name='John' +age=23 +print('{} is {} years old.'.format(name,age)) +#不写占位符索引的情况下,默认占位符从0开始,即0,1,2,3...(占位符数量-1) +# 即'{}{}'.format(a,b)和'{0}{1}'.format(a,b)是一样的。 + +#'{0} is {2} years old.'.format(name,age)会报错,因为占位符索引超出了占位符数量。 + +#str.format()里可以直接写表达式... +print('{} is a grown up? {} '.format(name,age>=18)) + +#f-string +name='Jack' +age=25 +print(f'{name} is {age} years old') +print(f'{name} is a grown up? {age>=18}') \ No newline at end of file diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/\346\213\206\345\210\206\345\255\227\347\254\246\344\270\262.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/\346\213\206\345\210\206\345\255\227\347\254\246\344\270\262.py" new file mode 100644 index 000000000..0d09b4df7 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/\346\213\206\345\210\206\345\255\227\347\254\246\344\270\262.py" @@ -0,0 +1,20 @@ +#文本文件保存到某个变量之中,经常需要对字符串进行操作 +#str.splitlines() +#str.split() +#str.partition() +s = """Name,Age,Location +John,18,New York +Mike,22,San Francisco +Janny,25,Miami +Sunny,21,Shanghai""" +print(s) +print(s.splitlines()) +#s.splitlines()返回的是一个列表(List),由被拆分的每一行作为其中的元素。 +#str.split()根据分隔符拆分 +r=s.splitlines()[2]#取出返回值2的那一行 +print(r) +print(r.split())#默认使用None分割(各种空白,比如,\t 和 \r 都被当作 None) +print(r.split(sep=","))#使用","分割 +print(r.split(","))#使用","分割,也可以省略sep +print(r.split(",",maxsplit=0))#拆分0次,即不拆分 +print(r.split(",",maxsplit=-1))#全部拆分 From f5de40ed49b2b25faa8ae0dbf172957328638142 Mon Sep 17 00:00:00 2001 From: johoo <57379875+johoo123@users.noreply.github.com> Date: Fri, 9 May 2025 17:41:24 +0800 Subject: [PATCH 08/17] =?UTF-8?q?=E5=AD=97=E7=AC=A6=E4=B8=B2+=E6=95=B0?= =?UTF-8?q?=E5=AD=97=E5=AE=B9=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\200\274-\345\276\252\347\216\257-\345\207\275\346\225\260.md" | 0 .../5.5\345\255\227\347\254\246\344\270\262.md" | 0 .../5.7\346\225\260\346\215\256\345\256\271\345\231\250.md" | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename "\345\255\246\344\271\240\347\254\224\350\256\260/5.2.md" => "\345\255\246\344\271\240\347\254\224\350\256\260/5.2\345\200\274-\345\276\252\347\216\257-\345\207\275\346\225\260.md" (100%) rename "\345\255\246\344\271\240\347\254\224\350\256\260/5.5.md" => "\345\255\246\344\271\240\347\254\224\350\256\260/5.5\345\255\227\347\254\246\344\270\262.md" (100%) rename "\345\255\246\344\271\240\347\254\224\350\256\260/5.7.md" => "\345\255\246\344\271\240\347\254\224\350\256\260/5.7\346\225\260\346\215\256\345\256\271\345\231\250.md" (100%) diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.2.md" "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.2\345\200\274-\345\276\252\347\216\257-\345\207\275\346\225\260.md" similarity index 100% rename from "\345\255\246\344\271\240\347\254\224\350\256\260/5.2.md" rename to "\345\255\246\344\271\240\347\254\224\350\256\260/5.2\345\200\274-\345\276\252\347\216\257-\345\207\275\346\225\260.md" diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.5.md" "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.5\345\255\227\347\254\246\344\270\262.md" similarity index 100% rename from "\345\255\246\344\271\240\347\254\224\350\256\260/5.5.md" rename to "\345\255\246\344\271\240\347\254\224\350\256\260/5.5\345\255\227\347\254\246\344\270\262.md" diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.7.md" "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.7\346\225\260\346\215\256\345\256\271\345\231\250.md" similarity index 100% rename from "\345\255\246\344\271\240\347\254\224\350\256\260/5.7.md" rename to "\345\255\246\344\271\240\347\254\224\350\256\260/5.7\346\225\260\346\215\256\345\256\271\345\231\250.md" From cab71096bcb645a551cd5cd7659b6a10b3aff4f8 Mon Sep 17 00:00:00 2001 From: johoo <57379875+johoo123@users.noreply.github.com> Date: Mon, 12 May 2025 15:04:09 +0800 Subject: [PATCH 09/17] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=AE=B9=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Part.1.E.6.containers.ipynb | 26 +- ...60\346\215\256\345\256\271\345\231\250.md" | 459 ++++++++++++++++++ ...1\250append copy extend insert reverse.py" | 59 +++ ...\345\210\227\350\241\250pop remove del.py" | 32 ++ ...\345\210\227\350\241\250sort()-Methods.py" | 36 ++ ...05\345\273\272\345\207\275\346\225\260.py" | 17 + ...50\346\223\215\344\275\234\347\254\246.py" | 8 + ...27\350\241\250\347\264\242\345\274\225.py" | 26 + ...32\344\270\252\345\256\271\345\231\250.py" | 6 + 9 files changed, 662 insertions(+), 7 deletions(-) create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\227\350\241\250append copy extend insert reverse.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\227\350\241\250pop remove del.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\227\350\241\250sort()-Methods.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\227\350\241\250\345\217\257\347\224\250\347\232\204\345\206\205\345\273\272\345\207\275\346\225\260.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\227\350\241\250\346\223\215\344\275\234\347\254\246.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\227\350\241\250\347\264\242\345\274\225.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/\345\220\214\346\227\266\350\277\255\344\273\243\345\244\232\344\270\252\345\256\271\345\231\250.py" diff --git a/Part.1.E.6.containers.ipynb b/Part.1.E.6.containers.ipynb index 057f7d7c7..c72a53570 100644 --- a/Part.1.E.6.containers.ipynb +++ b/Part.1.E.6.containers.ipynb @@ -1052,16 +1052,25 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 2, "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "range(0, 10000)\n", + "(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2337, 2338, 2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2351, 2352, 2353, 2354, 2355, 2356, 2357, 2358, 2359, 2360, 2361, 2362, 2363, 2364, 2365, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2384, 2385, 2386, 2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399, 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2413, 2414, 2415, 2416, 2417, 2418, 2419, 2420, 2421, 2422, 2423, 2424, 2425, 2426, 2427, 2428, 2429, 2430, 2431, 2432, 2433, 2434, 2435, 2436, 2437, 2438, 2439, 2440, 2441, 2442, 2443, 2444, 2445, 2446, 2447, 2448, 2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 2467, 2468, 2469, 2470, 2471, 2472, 2473, 2474, 2475, 2476, 2477, 2478, 2479, 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2492, 2493, 2494, 2495, 2496, 2497, 2498, 2499, 2500, 2501, 2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2512, 2513, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524, 2525, 2526, 2527, 2528, 2529, 2530, 2531, 2532, 2533, 2534, 2535, 2536, 2537, 2538, 2539, 2540, 2541, 2542, 2543, 2544, 2545, 2546, 2547, 2548, 2549, 2550, 2551, 2552, 2553, 2554, 2555, 2556, 2557, 2558, 2559, 2560, 2561, 2562, 2563, 2564, 2565, 2566, 2567, 2568, 2569, 2570, 2571, 2572, 2573, 2574, 2575, 2576, 2577, 2578, 2579, 2580, 2581, 2582, 2583, 2584, 2585, 2586, 2587, 2588, 2589, 2590, 2591, 2592, 2593, 2594, 2595, 2596, 2597, 2598, 2599, 2600, 2601, 2602, 2603, 2604, 2605, 2606, 2607, 2608, 2609, 2610, 2611, 2612, 2613, 2614, 2615, 2616, 2617, 2618, 2619, 2620, 2621, 2622, 2623, 2624, 2625, 2626, 2627, 2628, 2629, 2630, 2631, 2632, 2633, 2634, 2635, 2636, 2637, 2638, 2639, 2640, 2641, 2642, 2643, 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651, 2652, 2653, 2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661, 2662, 2663, 2664, 2665, 2666, 2667, 2668, 2669, 2670, 2671, 2672, 2673, 2674, 2675, 2676, 2677, 2678, 2679, 2680, 2681, 2682, 2683, 2684, 2685, 2686, 2687, 2688, 2689, 2690, 2691, 2692, 2693, 2694, 2695, 2696, 2697, 2698, 2699, 2700, 2701, 2702, 2703, 2704, 2705, 2706, 2707, 2708, 2709, 2710, 2711, 2712, 2713, 2714, 2715, 2716, 2717, 2718, 2719, 2720, 2721, 2722, 2723, 2724, 2725, 2726, 2727, 2728, 2729, 2730, 2731, 2732, 2733, 2734, 2735, 2736, 2737, 2738, 2739, 2740, 2741, 2742, 2743, 2744, 2745, 2746, 2747, 2748, 2749, 2750, 2751, 2752, 2753, 2754, 2755, 2756, 2757, 2758, 2759, 2760, 2761, 2762, 2763, 2764, 2765, 2766, 2767, 2768, 2769, 2770, 2771, 2772, 2773, 2774, 2775, 2776, 2777, 2778, 2779, 2780, 2781, 2782, 2783, 2784, 2785, 2786, 2787, 2788, 2789, 2790, 2791, 2792, 2793, 2794, 2795, 2796, 2797, 2798, 2799, 2800, 2801, 2802, 2803, 2804, 2805, 2806, 2807, 2808, 2809, 2810, 2811, 2812, 2813, 2814, 2815, 2816, 2817, 2818, 2819, 2820, 2821, 2822, 2823, 2824, 2825, 2826, 2827, 2828, 2829, 2830, 2831, 2832, 2833, 2834, 2835, 2836, 2837, 2838, 2839, 2840, 2841, 2842, 2843, 2844, 2845, 2846, 2847, 2848, 2849, 2850, 2851, 2852, 2853, 2854, 2855, 2856, 2857, 2858, 2859, 2860, 2861, 2862, 2863, 2864, 2865, 2866, 2867, 2868, 2869, 2870, 2871, 2872, 2873, 2874, 2875, 2876, 2877, 2878, 2879, 2880, 2881, 2882, 2883, 2884, 2885, 2886, 2887, 2888, 2889, 2890, 2891, 2892, 2893, 2894, 2895, 2896, 2897, 2898, 2899, 2900, 2901, 2902, 2903, 2904, 2905, 2906, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, 2916, 2917, 2918, 2919, 2920, 2921, 2922, 2923, 2924, 2925, 2926, 2927, 2928, 2929, 2930, 2931, 2932, 2933, 2934, 2935, 2936, 2937, 2938, 2939, 2940, 2941, 2942, 2943, 2944, 2945, 2946, 2947, 2948, 2949, 2950, 2951, 2952, 2953, 2954, 2955, 2956, 2957, 2958, 2959, 2960, 2961, 2962, 2963, 2964, 2965, 2966, 2967, 2968, 2969, 2970, 2971, 2972, 2973, 2974, 2975, 2976, 2977, 2978, 2979, 2980, 2981, 2982, 2983, 2984, 2985, 2986, 2987, 2988, 2989, 2990, 2991, 2992, 2993, 2994, 2995, 2996, 2997, 2998, 2999, 3000, 3001, 3002, 3003, 3004, 3005, 3006, 3007, 3008, 3009, 3010, 3011, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 3019, 3020, 3021, 3022, 3023, 3024, 3025, 3026, 3027, 3028, 3029, 3030, 3031, 3032, 3033, 3034, 3035, 3036, 3037, 3038, 3039, 3040, 3041, 3042, 3043, 3044, 3045, 3046, 3047, 3048, 3049, 3050, 3051, 3052, 3053, 3054, 3055, 3056, 3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064, 3065, 3066, 3067, 3068, 3069, 3070, 3071, 3072, 3073, 3074, 3075, 3076, 3077, 3078, 3079, 3080, 3081, 3082, 3083, 3084, 3085, 3086, 3087, 3088, 3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3099, 3100, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, 3110, 3111, 3112, 3113, 3114, 3115, 3116, 3117, 3118, 3119, 3120, 3121, 3122, 3123, 3124, 3125, 3126, 3127, 3128, 3129, 3130, 3131, 3132, 3133, 3134, 3135, 3136, 3137, 3138, 3139, 3140, 3141, 3142, 3143, 3144, 3145, 3146, 3147, 3148, 3149, 3150, 3151, 3152, 3153, 3154, 3155, 3156, 3157, 3158, 3159, 3160, 3161, 3162, 3163, 3164, 3165, 3166, 3167, 3168, 3169, 3170, 3171, 3172, 3173, 3174, 3175, 3176, 3177, 3178, 3179, 3180, 3181, 3182, 3183, 3184, 3185, 3186, 3187, 3188, 3189, 3190, 3191, 3192, 3193, 3194, 3195, 3196, 3197, 3198, 3199, 3200, 3201, 3202, 3203, 3204, 3205, 3206, 3207, 3208, 3209, 3210, 3211, 3212, 3213, 3214, 3215, 3216, 3217, 3218, 3219, 3220, 3221, 3222, 3223, 3224, 3225, 3226, 3227, 3228, 3229, 3230, 3231, 3232, 3233, 3234, 3235, 3236, 3237, 3238, 3239, 3240, 3241, 3242, 3243, 3244, 3245, 3246, 3247, 3248, 3249, 3250, 3251, 3252, 3253, 3254, 3255, 3256, 3257, 3258, 3259, 3260, 3261, 3262, 3263, 3264, 3265, 3266, 3267, 3268, 3269, 3270, 3271, 3272, 3273, 3274, 3275, 3276, 3277, 3278, 3279, 3280, 3281, 3282, 3283, 3284, 3285, 3286, 3287, 3288, 3289, 3290, 3291, 3292, 3293, 3294, 3295, 3296, 3297, 3298, 3299, 3300, 3301, 3302, 3303, 3304, 3305, 3306, 3307, 3308, 3309, 3310, 3311, 3312, 3313, 3314, 3315, 3316, 3317, 3318, 3319, 3320, 3321, 3322, 3323, 3324, 3325, 3326, 3327, 3328, 3329, 3330, 3331, 3332, 3333, 3334, 3335, 3336, 3337, 3338, 3339, 3340, 3341, 3342, 3343, 3344, 3345, 3346, 3347, 3348, 3349, 3350, 3351, 3352, 3353, 3354, 3355, 3356, 3357, 3358, 3359, 3360, 3361, 3362, 3363, 3364, 3365, 3366, 3367, 3368, 3369, 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377, 3378, 3379, 3380, 3381, 3382, 3383, 3384, 3385, 3386, 3387, 3388, 3389, 3390, 3391, 3392, 3393, 3394, 3395, 3396, 3397, 3398, 3399, 3400, 3401, 3402, 3403, 3404, 3405, 3406, 3407, 3408, 3409, 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417, 3418, 3419, 3420, 3421, 3422, 3423, 3424, 3425, 3426, 3427, 3428, 3429, 3430, 3431, 3432, 3433, 3434, 3435, 3436, 3437, 3438, 3439, 3440, 3441, 3442, 3443, 3444, 3445, 3446, 3447, 3448, 3449, 3450, 3451, 3452, 3453, 3454, 3455, 3456, 3457, 3458, 3459, 3460, 3461, 3462, 3463, 3464, 3465, 3466, 3467, 3468, 3469, 3470, 3471, 3472, 3473, 3474, 3475, 3476, 3477, 3478, 3479, 3480, 3481, 3482, 3483, 3484, 3485, 3486, 3487, 3488, 3489, 3490, 3491, 3492, 3493, 3494, 3495, 3496, 3497, 3498, 3499, 3500, 3501, 3502, 3503, 3504, 3505, 3506, 3507, 3508, 3509, 3510, 3511, 3512, 3513, 3514, 3515, 3516, 3517, 3518, 3519, 3520, 3521, 3522, 3523, 3524, 3525, 3526, 3527, 3528, 3529, 3530, 3531, 3532, 3533, 3534, 3535, 3536, 3537, 3538, 3539, 3540, 3541, 3542, 3543, 3544, 3545, 3546, 3547, 3548, 3549, 3550, 3551, 3552, 3553, 3554, 3555, 3556, 3557, 3558, 3559, 3560, 3561, 3562, 3563, 3564, 3565, 3566, 3567, 3568, 3569, 3570, 3571, 3572, 3573, 3574, 3575, 3576, 3577, 3578, 3579, 3580, 3581, 3582, 3583, 3584, 3585, 3586, 3587, 3588, 3589, 3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597, 3598, 3599, 3600, 3601, 3602, 3603, 3604, 3605, 3606, 3607, 3608, 3609, 3610, 3611, 3612, 3613, 3614, 3615, 3616, 3617, 3618, 3619, 3620, 3621, 3622, 3623, 3624, 3625, 3626, 3627, 3628, 3629, 3630, 3631, 3632, 3633, 3634, 3635, 3636, 3637, 3638, 3639, 3640, 3641, 3642, 3643, 3644, 3645, 3646, 3647, 3648, 3649, 3650, 3651, 3652, 3653, 3654, 3655, 3656, 3657, 3658, 3659, 3660, 3661, 3662, 3663, 3664, 3665, 3666, 3667, 3668, 3669, 3670, 3671, 3672, 3673, 3674, 3675, 3676, 3677, 3678, 3679, 3680, 3681, 3682, 3683, 3684, 3685, 3686, 3687, 3688, 3689, 3690, 3691, 3692, 3693, 3694, 3695, 3696, 3697, 3698, 3699, 3700, 3701, 3702, 3703, 3704, 3705, 3706, 3707, 3708, 3709, 3710, 3711, 3712, 3713, 3714, 3715, 3716, 3717, 3718, 3719, 3720, 3721, 3722, 3723, 3724, 3725, 3726, 3727, 3728, 3729, 3730, 3731, 3732, 3733, 3734, 3735, 3736, 3737, 3738, 3739, 3740, 3741, 3742, 3743, 3744, 3745, 3746, 3747, 3748, 3749, 3750, 3751, 3752, 3753, 3754, 3755, 3756, 3757, 3758, 3759, 3760, 3761, 3762, 3763, 3764, 3765, 3766, 3767, 3768, 3769, 3770, 3771, 3772, 3773, 3774, 3775, 3776, 3777, 3778, 3779, 3780, 3781, 3782, 3783, 3784, 3785, 3786, 3787, 3788, 3789, 3790, 3791, 3792, 3793, 3794, 3795, 3796, 3797, 3798, 3799, 3800, 3801, 3802, 3803, 3804, 3805, 3806, 3807, 3808, 3809, 3810, 3811, 3812, 3813, 3814, 3815, 3816, 3817, 3818, 3819, 3820, 3821, 3822, 3823, 3824, 3825, 3826, 3827, 3828, 3829, 3830, 3831, 3832, 3833, 3834, 3835, 3836, 3837, 3838, 3839, 3840, 3841, 3842, 3843, 3844, 3845, 3846, 3847, 3848, 3849, 3850, 3851, 3852, 3853, 3854, 3855, 3856, 3857, 3858, 3859, 3860, 3861, 3862, 3863, 3864, 3865, 3866, 3867, 3868, 3869, 3870, 3871, 3872, 3873, 3874, 3875, 3876, 3877, 3878, 3879, 3880, 3881, 3882, 3883, 3884, 3885, 3886, 3887, 3888, 3889, 3890, 3891, 3892, 3893, 3894, 3895, 3896, 3897, 3898, 3899, 3900, 3901, 3902, 3903, 3904, 3905, 3906, 3907, 3908, 3909, 3910, 3911, 3912, 3913, 3914, 3915, 3916, 3917, 3918, 3919, 3920, 3921, 3922, 3923, 3924, 3925, 3926, 3927, 3928, 3929, 3930, 3931, 3932, 3933, 3934, 3935, 3936, 3937, 3938, 3939, 3940, 3941, 3942, 3943, 3944, 3945, 3946, 3947, 3948, 3949, 3950, 3951, 3952, 3953, 3954, 3955, 3956, 3957, 3958, 3959, 3960, 3961, 3962, 3963, 3964, 3965, 3966, 3967, 3968, 3969, 3970, 3971, 3972, 3973, 3974, 3975, 3976, 3977, 3978, 3979, 3980, 3981, 3982, 3983, 3984, 3985, 3986, 3987, 3988, 3989, 3990, 3991, 3992, 3993, 3994, 3995, 3996, 3997, 3998, 3999, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, 4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023, 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, 4037, 4038, 4039, 4040, 4041, 4042, 4043, 4044, 4045, 4046, 4047, 4048, 4049, 4050, 4051, 4052, 4053, 4054, 4055, 4056, 4057, 4058, 4059, 4060, 4061, 4062, 4063, 4064, 4065, 4066, 4067, 4068, 4069, 4070, 4071, 4072, 4073, 4074, 4075, 4076, 4077, 4078, 4079, 4080, 4081, 4082, 4083, 4084, 4085, 4086, 4087, 4088, 4089, 4090, 4091, 4092, 4093, 4094, 4095, 4096, 4097, 4098, 4099, 4100, 4101, 4102, 4103, 4104, 4105, 4106, 4107, 4108, 4109, 4110, 4111, 4112, 4113, 4114, 4115, 4116, 4117, 4118, 4119, 4120, 4121, 4122, 4123, 4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131, 4132, 4133, 4134, 4135, 4136, 4137, 4138, 4139, 4140, 4141, 4142, 4143, 4144, 4145, 4146, 4147, 4148, 4149, 4150, 4151, 4152, 4153, 4154, 4155, 4156, 4157, 4158, 4159, 4160, 4161, 4162, 4163, 4164, 4165, 4166, 4167, 4168, 4169, 4170, 4171, 4172, 4173, 4174, 4175, 4176, 4177, 4178, 4179, 4180, 4181, 4182, 4183, 4184, 4185, 4186, 4187, 4188, 4189, 4190, 4191, 4192, 4193, 4194, 4195, 4196, 4197, 4198, 4199, 4200, 4201, 4202, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4210, 4211, 4212, 4213, 4214, 4215, 4216, 4217, 4218, 4219, 4220, 4221, 4222, 4223, 4224, 4225, 4226, 4227, 4228, 4229, 4230, 4231, 4232, 4233, 4234, 4235, 4236, 4237, 4238, 4239, 4240, 4241, 4242, 4243, 4244, 4245, 4246, 4247, 4248, 4249, 4250, 4251, 4252, 4253, 4254, 4255, 4256, 4257, 4258, 4259, 4260, 4261, 4262, 4263, 4264, 4265, 4266, 4267, 4268, 4269, 4270, 4271, 4272, 4273, 4274, 4275, 4276, 4277, 4278, 4279, 4280, 4281, 4282, 4283, 4284, 4285, 4286, 4287, 4288, 4289, 4290, 4291, 4292, 4293, 4294, 4295, 4296, 4297, 4298, 4299, 4300, 4301, 4302, 4303, 4304, 4305, 4306, 4307, 4308, 4309, 4310, 4311, 4312, 4313, 4314, 4315, 4316, 4317, 4318, 4319, 4320, 4321, 4322, 4323, 4324, 4325, 4326, 4327, 4328, 4329, 4330, 4331, 4332, 4333, 4334, 4335, 4336, 4337, 4338, 4339, 4340, 4341, 4342, 4343, 4344, 4345, 4346, 4347, 4348, 4349, 4350, 4351, 4352, 4353, 4354, 4355, 4356, 4357, 4358, 4359, 4360, 4361, 4362, 4363, 4364, 4365, 4366, 4367, 4368, 4369, 4370, 4371, 4372, 4373, 4374, 4375, 4376, 4377, 4378, 4379, 4380, 4381, 4382, 4383, 4384, 4385, 4386, 4387, 4388, 4389, 4390, 4391, 4392, 4393, 4394, 4395, 4396, 4397, 4398, 4399, 4400, 4401, 4402, 4403, 4404, 4405, 4406, 4407, 4408, 4409, 4410, 4411, 4412, 4413, 4414, 4415, 4416, 4417, 4418, 4419, 4420, 4421, 4422, 4423, 4424, 4425, 4426, 4427, 4428, 4429, 4430, 4431, 4432, 4433, 4434, 4435, 4436, 4437, 4438, 4439, 4440, 4441, 4442, 4443, 4444, 4445, 4446, 4447, 4448, 4449, 4450, 4451, 4452, 4453, 4454, 4455, 4456, 4457, 4458, 4459, 4460, 4461, 4462, 4463, 4464, 4465, 4466, 4467, 4468, 4469, 4470, 4471, 4472, 4473, 4474, 4475, 4476, 4477, 4478, 4479, 4480, 4481, 4482, 4483, 4484, 4485, 4486, 4487, 4488, 4489, 4490, 4491, 4492, 4493, 4494, 4495, 4496, 4497, 4498, 4499, 4500, 4501, 4502, 4503, 4504, 4505, 4506, 4507, 4508, 4509, 4510, 4511, 4512, 4513, 4514, 4515, 4516, 4517, 4518, 4519, 4520, 4521, 4522, 4523, 4524, 4525, 4526, 4527, 4528, 4529, 4530, 4531, 4532, 4533, 4534, 4535, 4536, 4537, 4538, 4539, 4540, 4541, 4542, 4543, 4544, 4545, 4546, 4547, 4548, 4549, 4550, 4551, 4552, 4553, 4554, 4555, 4556, 4557, 4558, 4559, 4560, 4561, 4562, 4563, 4564, 4565, 4566, 4567, 4568, 4569, 4570, 4571, 4572, 4573, 4574, 4575, 4576, 4577, 4578, 4579, 4580, 4581, 4582, 4583, 4584, 4585, 4586, 4587, 4588, 4589, 4590, 4591, 4592, 4593, 4594, 4595, 4596, 4597, 4598, 4599, 4600, 4601, 4602, 4603, 4604, 4605, 4606, 4607, 4608, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4626, 4627, 4628, 4629, 4630, 4631, 4632, 4633, 4634, 4635, 4636, 4637, 4638, 4639, 4640, 4641, 4642, 4643, 4644, 4645, 4646, 4647, 4648, 4649, 4650, 4651, 4652, 4653, 4654, 4655, 4656, 4657, 4658, 4659, 4660, 4661, 4662, 4663, 4664, 4665, 4666, 4667, 4668, 4669, 4670, 4671, 4672, 4673, 4674, 4675, 4676, 4677, 4678, 4679, 4680, 4681, 4682, 4683, 4684, 4685, 4686, 4687, 4688, 4689, 4690, 4691, 4692, 4693, 4694, 4695, 4696, 4697, 4698, 4699, 4700, 4701, 4702, 4703, 4704, 4705, 4706, 4707, 4708, 4709, 4710, 4711, 4712, 4713, 4714, 4715, 4716, 4717, 4718, 4719, 4720, 4721, 4722, 4723, 4724, 4725, 4726, 4727, 4728, 4729, 4730, 4731, 4732, 4733, 4734, 4735, 4736, 4737, 4738, 4739, 4740, 4741, 4742, 4743, 4744, 4745, 4746, 4747, 4748, 4749, 4750, 4751, 4752, 4753, 4754, 4755, 4756, 4757, 4758, 4759, 4760, 4761, 4762, 4763, 4764, 4765, 4766, 4767, 4768, 4769, 4770, 4771, 4772, 4773, 4774, 4775, 4776, 4777, 4778, 4779, 4780, 4781, 4782, 4783, 4784, 4785, 4786, 4787, 4788, 4789, 4790, 4791, 4792, 4793, 4794, 4795, 4796, 4797, 4798, 4799, 4800, 4801, 4802, 4803, 4804, 4805, 4806, 4807, 4808, 4809, 4810, 4811, 4812, 4813, 4814, 4815, 4816, 4817, 4818, 4819, 4820, 4821, 4822, 4823, 4824, 4825, 4826, 4827, 4828, 4829, 4830, 4831, 4832, 4833, 4834, 4835, 4836, 4837, 4838, 4839, 4840, 4841, 4842, 4843, 4844, 4845, 4846, 4847, 4848, 4849, 4850, 4851, 4852, 4853, 4854, 4855, 4856, 4857, 4858, 4859, 4860, 4861, 4862, 4863, 4864, 4865, 4866, 4867, 4868, 4869, 4870, 4871, 4872, 4873, 4874, 4875, 4876, 4877, 4878, 4879, 4880, 4881, 4882, 4883, 4884, 4885, 4886, 4887, 4888, 4889, 4890, 4891, 4892, 4893, 4894, 4895, 4896, 4897, 4898, 4899, 4900, 4901, 4902, 4903, 4904, 4905, 4906, 4907, 4908, 4909, 4910, 4911, 4912, 4913, 4914, 4915, 4916, 4917, 4918, 4919, 4920, 4921, 4922, 4923, 4924, 4925, 4926, 4927, 4928, 4929, 4930, 4931, 4932, 4933, 4934, 4935, 4936, 4937, 4938, 4939, 4940, 4941, 4942, 4943, 4944, 4945, 4946, 4947, 4948, 4949, 4950, 4951, 4952, 4953, 4954, 4955, 4956, 4957, 4958, 4959, 4960, 4961, 4962, 4963, 4964, 4965, 4966, 4967, 4968, 4969, 4970, 4971, 4972, 4973, 4974, 4975, 4976, 4977, 4978, 4979, 4980, 4981, 4982, 4983, 4984, 4985, 4986, 4987, 4988, 4989, 4990, 4991, 4992, 4993, 4994, 4995, 4996, 4997, 4998, 4999, 5000, 5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008, 5009, 5010, 5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5019, 5020, 5021, 5022, 5023, 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, 5032, 5033, 5034, 5035, 5036, 5037, 5038, 5039, 5040, 5041, 5042, 5043, 5044, 5045, 5046, 5047, 5048, 5049, 5050, 5051, 5052, 5053, 5054, 5055, 5056, 5057, 5058, 5059, 5060, 5061, 5062, 5063, 5064, 5065, 5066, 5067, 5068, 5069, 5070, 5071, 5072, 5073, 5074, 5075, 5076, 5077, 5078, 5079, 5080, 5081, 5082, 5083, 5084, 5085, 5086, 5087, 5088, 5089, 5090, 5091, 5092, 5093, 5094, 5095, 5096, 5097, 5098, 5099, 5100, 5101, 5102, 5103, 5104, 5105, 5106, 5107, 5108, 5109, 5110, 5111, 5112, 5113, 5114, 5115, 5116, 5117, 5118, 5119, 5120, 5121, 5122, 5123, 5124, 5125, 5126, 5127, 5128, 5129, 5130, 5131, 5132, 5133, 5134, 5135, 5136, 5137, 5138, 5139, 5140, 5141, 5142, 5143, 5144, 5145, 5146, 5147, 5148, 5149, 5150, 5151, 5152, 5153, 5154, 5155, 5156, 5157, 5158, 5159, 5160, 5161, 5162, 5163, 5164, 5165, 5166, 5167, 5168, 5169, 5170, 5171, 5172, 5173, 5174, 5175, 5176, 5177, 5178, 5179, 5180, 5181, 5182, 5183, 5184, 5185, 5186, 5187, 5188, 5189, 5190, 5191, 5192, 5193, 5194, 5195, 5196, 5197, 5198, 5199, 5200, 5201, 5202, 5203, 5204, 5205, 5206, 5207, 5208, 5209, 5210, 5211, 5212, 5213, 5214, 5215, 5216, 5217, 5218, 5219, 5220, 5221, 5222, 5223, 5224, 5225, 5226, 5227, 5228, 5229, 5230, 5231, 5232, 5233, 5234, 5235, 5236, 5237, 5238, 5239, 5240, 5241, 5242, 5243, 5244, 5245, 5246, 5247, 5248, 5249, 5250, 5251, 5252, 5253, 5254, 5255, 5256, 5257, 5258, 5259, 5260, 5261, 5262, 5263, 5264, 5265, 5266, 5267, 5268, 5269, 5270, 5271, 5272, 5273, 5274, 5275, 5276, 5277, 5278, 5279, 5280, 5281, 5282, 5283, 5284, 5285, 5286, 5287, 5288, 5289, 5290, 5291, 5292, 5293, 5294, 5295, 5296, 5297, 5298, 5299, 5300, 5301, 5302, 5303, 5304, 5305, 5306, 5307, 5308, 5309, 5310, 5311, 5312, 5313, 5314, 5315, 5316, 5317, 5318, 5319, 5320, 5321, 5322, 5323, 5324, 5325, 5326, 5327, 5328, 5329, 5330, 5331, 5332, 5333, 5334, 5335, 5336, 5337, 5338, 5339, 5340, 5341, 5342, 5343, 5344, 5345, 5346, 5347, 5348, 5349, 5350, 5351, 5352, 5353, 5354, 5355, 5356, 5357, 5358, 5359, 5360, 5361, 5362, 5363, 5364, 5365, 5366, 5367, 5368, 5369, 5370, 5371, 5372, 5373, 5374, 5375, 5376, 5377, 5378, 5379, 5380, 5381, 5382, 5383, 5384, 5385, 5386, 5387, 5388, 5389, 5390, 5391, 5392, 5393, 5394, 5395, 5396, 5397, 5398, 5399, 5400, 5401, 5402, 5403, 5404, 5405, 5406, 5407, 5408, 5409, 5410, 5411, 5412, 5413, 5414, 5415, 5416, 5417, 5418, 5419, 5420, 5421, 5422, 5423, 5424, 5425, 5426, 5427, 5428, 5429, 5430, 5431, 5432, 5433, 5434, 5435, 5436, 5437, 5438, 5439, 5440, 5441, 5442, 5443, 5444, 5445, 5446, 5447, 5448, 5449, 5450, 5451, 5452, 5453, 5454, 5455, 5456, 5457, 5458, 5459, 5460, 5461, 5462, 5463, 5464, 5465, 5466, 5467, 5468, 5469, 5470, 5471, 5472, 5473, 5474, 5475, 5476, 5477, 5478, 5479, 5480, 5481, 5482, 5483, 5484, 5485, 5486, 5487, 5488, 5489, 5490, 5491, 5492, 5493, 5494, 5495, 5496, 5497, 5498, 5499, 5500, 5501, 5502, 5503, 5504, 5505, 5506, 5507, 5508, 5509, 5510, 5511, 5512, 5513, 5514, 5515, 5516, 5517, 5518, 5519, 5520, 5521, 5522, 5523, 5524, 5525, 5526, 5527, 5528, 5529, 5530, 5531, 5532, 5533, 5534, 5535, 5536, 5537, 5538, 5539, 5540, 5541, 5542, 5543, 5544, 5545, 5546, 5547, 5548, 5549, 5550, 5551, 5552, 5553, 5554, 5555, 5556, 5557, 5558, 5559, 5560, 5561, 5562, 5563, 5564, 5565, 5566, 5567, 5568, 5569, 5570, 5571, 5572, 5573, 5574, 5575, 5576, 5577, 5578, 5579, 5580, 5581, 5582, 5583, 5584, 5585, 5586, 5587, 5588, 5589, 5590, 5591, 5592, 5593, 5594, 5595, 5596, 5597, 5598, 5599, 5600, 5601, 5602, 5603, 5604, 5605, 5606, 5607, 5608, 5609, 5610, 5611, 5612, 5613, 5614, 5615, 5616, 5617, 5618, 5619, 5620, 5621, 5622, 5623, 5624, 5625, 5626, 5627, 5628, 5629, 5630, 5631, 5632, 5633, 5634, 5635, 5636, 5637, 5638, 5639, 5640, 5641, 5642, 5643, 5644, 5645, 5646, 5647, 5648, 5649, 5650, 5651, 5652, 5653, 5654, 5655, 5656, 5657, 5658, 5659, 5660, 5661, 5662, 5663, 5664, 5665, 5666, 5667, 5668, 5669, 5670, 5671, 5672, 5673, 5674, 5675, 5676, 5677, 5678, 5679, 5680, 5681, 5682, 5683, 5684, 5685, 5686, 5687, 5688, 5689, 5690, 5691, 5692, 5693, 5694, 5695, 5696, 5697, 5698, 5699, 5700, 5701, 5702, 5703, 5704, 5705, 5706, 5707, 5708, 5709, 5710, 5711, 5712, 5713, 5714, 5715, 5716, 5717, 5718, 5719, 5720, 5721, 5722, 5723, 5724, 5725, 5726, 5727, 5728, 5729, 5730, 5731, 5732, 5733, 5734, 5735, 5736, 5737, 5738, 5739, 5740, 5741, 5742, 5743, 5744, 5745, 5746, 5747, 5748, 5749, 5750, 5751, 5752, 5753, 5754, 5755, 5756, 5757, 5758, 5759, 5760, 5761, 5762, 5763, 5764, 5765, 5766, 5767, 5768, 5769, 5770, 5771, 5772, 5773, 5774, 5775, 5776, 5777, 5778, 5779, 5780, 5781, 5782, 5783, 5784, 5785, 5786, 5787, 5788, 5789, 5790, 5791, 5792, 5793, 5794, 5795, 5796, 5797, 5798, 5799, 5800, 5801, 5802, 5803, 5804, 5805, 5806, 5807, 5808, 5809, 5810, 5811, 5812, 5813, 5814, 5815, 5816, 5817, 5818, 5819, 5820, 5821, 5822, 5823, 5824, 5825, 5826, 5827, 5828, 5829, 5830, 5831, 5832, 5833, 5834, 5835, 5836, 5837, 5838, 5839, 5840, 5841, 5842, 5843, 5844, 5845, 5846, 5847, 5848, 5849, 5850, 5851, 5852, 5853, 5854, 5855, 5856, 5857, 5858, 5859, 5860, 5861, 5862, 5863, 5864, 5865, 5866, 5867, 5868, 5869, 5870, 5871, 5872, 5873, 5874, 5875, 5876, 5877, 5878, 5879, 5880, 5881, 5882, 5883, 5884, 5885, 5886, 5887, 5888, 5889, 5890, 5891, 5892, 5893, 5894, 5895, 5896, 5897, 5898, 5899, 5900, 5901, 5902, 5903, 5904, 5905, 5906, 5907, 5908, 5909, 5910, 5911, 5912, 5913, 5914, 5915, 5916, 5917, 5918, 5919, 5920, 5921, 5922, 5923, 5924, 5925, 5926, 5927, 5928, 5929, 5930, 5931, 5932, 5933, 5934, 5935, 5936, 5937, 5938, 5939, 5940, 5941, 5942, 5943, 5944, 5945, 5946, 5947, 5948, 5949, 5950, 5951, 5952, 5953, 5954, 5955, 5956, 5957, 5958, 5959, 5960, 5961, 5962, 5963, 5964, 5965, 5966, 5967, 5968, 5969, 5970, 5971, 5972, 5973, 5974, 5975, 5976, 5977, 5978, 5979, 5980, 5981, 5982, 5983, 5984, 5985, 5986, 5987, 5988, 5989, 5990, 5991, 5992, 5993, 5994, 5995, 5996, 5997, 5998, 5999, 6000, 6001, 6002, 6003, 6004, 6005, 6006, 6007, 6008, 6009, 6010, 6011, 6012, 6013, 6014, 6015, 6016, 6017, 6018, 6019, 6020, 6021, 6022, 6023, 6024, 6025, 6026, 6027, 6028, 6029, 6030, 6031, 6032, 6033, 6034, 6035, 6036, 6037, 6038, 6039, 6040, 6041, 6042, 6043, 6044, 6045, 6046, 6047, 6048, 6049, 6050, 6051, 6052, 6053, 6054, 6055, 6056, 6057, 6058, 6059, 6060, 6061, 6062, 6063, 6064, 6065, 6066, 6067, 6068, 6069, 6070, 6071, 6072, 6073, 6074, 6075, 6076, 6077, 6078, 6079, 6080, 6081, 6082, 6083, 6084, 6085, 6086, 6087, 6088, 6089, 6090, 6091, 6092, 6093, 6094, 6095, 6096, 6097, 6098, 6099, 6100, 6101, 6102, 6103, 6104, 6105, 6106, 6107, 6108, 6109, 6110, 6111, 6112, 6113, 6114, 6115, 6116, 6117, 6118, 6119, 6120, 6121, 6122, 6123, 6124, 6125, 6126, 6127, 6128, 6129, 6130, 6131, 6132, 6133, 6134, 6135, 6136, 6137, 6138, 6139, 6140, 6141, 6142, 6143, 6144, 6145, 6146, 6147, 6148, 6149, 6150, 6151, 6152, 6153, 6154, 6155, 6156, 6157, 6158, 6159, 6160, 6161, 6162, 6163, 6164, 6165, 6166, 6167, 6168, 6169, 6170, 6171, 6172, 6173, 6174, 6175, 6176, 6177, 6178, 6179, 6180, 6181, 6182, 6183, 6184, 6185, 6186, 6187, 6188, 6189, 6190, 6191, 6192, 6193, 6194, 6195, 6196, 6197, 6198, 6199, 6200, 6201, 6202, 6203, 6204, 6205, 6206, 6207, 6208, 6209, 6210, 6211, 6212, 6213, 6214, 6215, 6216, 6217, 6218, 6219, 6220, 6221, 6222, 6223, 6224, 6225, 6226, 6227, 6228, 6229, 6230, 6231, 6232, 6233, 6234, 6235, 6236, 6237, 6238, 6239, 6240, 6241, 6242, 6243, 6244, 6245, 6246, 6247, 6248, 6249, 6250, 6251, 6252, 6253, 6254, 6255, 6256, 6257, 6258, 6259, 6260, 6261, 6262, 6263, 6264, 6265, 6266, 6267, 6268, 6269, 6270, 6271, 6272, 6273, 6274, 6275, 6276, 6277, 6278, 6279, 6280, 6281, 6282, 6283, 6284, 6285, 6286, 6287, 6288, 6289, 6290, 6291, 6292, 6293, 6294, 6295, 6296, 6297, 6298, 6299, 6300, 6301, 6302, 6303, 6304, 6305, 6306, 6307, 6308, 6309, 6310, 6311, 6312, 6313, 6314, 6315, 6316, 6317, 6318, 6319, 6320, 6321, 6322, 6323, 6324, 6325, 6326, 6327, 6328, 6329, 6330, 6331, 6332, 6333, 6334, 6335, 6336, 6337, 6338, 6339, 6340, 6341, 6342, 6343, 6344, 6345, 6346, 6347, 6348, 6349, 6350, 6351, 6352, 6353, 6354, 6355, 6356, 6357, 6358, 6359, 6360, 6361, 6362, 6363, 6364, 6365, 6366, 6367, 6368, 6369, 6370, 6371, 6372, 6373, 6374, 6375, 6376, 6377, 6378, 6379, 6380, 6381, 6382, 6383, 6384, 6385, 6386, 6387, 6388, 6389, 6390, 6391, 6392, 6393, 6394, 6395, 6396, 6397, 6398, 6399, 6400, 6401, 6402, 6403, 6404, 6405, 6406, 6407, 6408, 6409, 6410, 6411, 6412, 6413, 6414, 6415, 6416, 6417, 6418, 6419, 6420, 6421, 6422, 6423, 6424, 6425, 6426, 6427, 6428, 6429, 6430, 6431, 6432, 6433, 6434, 6435, 6436, 6437, 6438, 6439, 6440, 6441, 6442, 6443, 6444, 6445, 6446, 6447, 6448, 6449, 6450, 6451, 6452, 6453, 6454, 6455, 6456, 6457, 6458, 6459, 6460, 6461, 6462, 6463, 6464, 6465, 6466, 6467, 6468, 6469, 6470, 6471, 6472, 6473, 6474, 6475, 6476, 6477, 6478, 6479, 6480, 6481, 6482, 6483, 6484, 6485, 6486, 6487, 6488, 6489, 6490, 6491, 6492, 6493, 6494, 6495, 6496, 6497, 6498, 6499, 6500, 6501, 6502, 6503, 6504, 6505, 6506, 6507, 6508, 6509, 6510, 6511, 6512, 6513, 6514, 6515, 6516, 6517, 6518, 6519, 6520, 6521, 6522, 6523, 6524, 6525, 6526, 6527, 6528, 6529, 6530, 6531, 6532, 6533, 6534, 6535, 6536, 6537, 6538, 6539, 6540, 6541, 6542, 6543, 6544, 6545, 6546, 6547, 6548, 6549, 6550, 6551, 6552, 6553, 6554, 6555, 6556, 6557, 6558, 6559, 6560, 6561, 6562, 6563, 6564, 6565, 6566, 6567, 6568, 6569, 6570, 6571, 6572, 6573, 6574, 6575, 6576, 6577, 6578, 6579, 6580, 6581, 6582, 6583, 6584, 6585, 6586, 6587, 6588, 6589, 6590, 6591, 6592, 6593, 6594, 6595, 6596, 6597, 6598, 6599, 6600, 6601, 6602, 6603, 6604, 6605, 6606, 6607, 6608, 6609, 6610, 6611, 6612, 6613, 6614, 6615, 6616, 6617, 6618, 6619, 6620, 6621, 6622, 6623, 6624, 6625, 6626, 6627, 6628, 6629, 6630, 6631, 6632, 6633, 6634, 6635, 6636, 6637, 6638, 6639, 6640, 6641, 6642, 6643, 6644, 6645, 6646, 6647, 6648, 6649, 6650, 6651, 6652, 6653, 6654, 6655, 6656, 6657, 6658, 6659, 6660, 6661, 6662, 6663, 6664, 6665, 6666, 6667, 6668, 6669, 6670, 6671, 6672, 6673, 6674, 6675, 6676, 6677, 6678, 6679, 6680, 6681, 6682, 6683, 6684, 6685, 6686, 6687, 6688, 6689, 6690, 6691, 6692, 6693, 6694, 6695, 6696, 6697, 6698, 6699, 6700, 6701, 6702, 6703, 6704, 6705, 6706, 6707, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715, 6716, 6717, 6718, 6719, 6720, 6721, 6722, 6723, 6724, 6725, 6726, 6727, 6728, 6729, 6730, 6731, 6732, 6733, 6734, 6735, 6736, 6737, 6738, 6739, 6740, 6741, 6742, 6743, 6744, 6745, 6746, 6747, 6748, 6749, 6750, 6751, 6752, 6753, 6754, 6755, 6756, 6757, 6758, 6759, 6760, 6761, 6762, 6763, 6764, 6765, 6766, 6767, 6768, 6769, 6770, 6771, 6772, 6773, 6774, 6775, 6776, 6777, 6778, 6779, 6780, 6781, 6782, 6783, 6784, 6785, 6786, 6787, 6788, 6789, 6790, 6791, 6792, 6793, 6794, 6795, 6796, 6797, 6798, 6799, 6800, 6801, 6802, 6803, 6804, 6805, 6806, 6807, 6808, 6809, 6810, 6811, 6812, 6813, 6814, 6815, 6816, 6817, 6818, 6819, 6820, 6821, 6822, 6823, 6824, 6825, 6826, 6827, 6828, 6829, 6830, 6831, 6832, 6833, 6834, 6835, 6836, 6837, 6838, 6839, 6840, 6841, 6842, 6843, 6844, 6845, 6846, 6847, 6848, 6849, 6850, 6851, 6852, 6853, 6854, 6855, 6856, 6857, 6858, 6859, 6860, 6861, 6862, 6863, 6864, 6865, 6866, 6867, 6868, 6869, 6870, 6871, 6872, 6873, 6874, 6875, 6876, 6877, 6878, 6879, 6880, 6881, 6882, 6883, 6884, 6885, 6886, 6887, 6888, 6889, 6890, 6891, 6892, 6893, 6894, 6895, 6896, 6897, 6898, 6899, 6900, 6901, 6902, 6903, 6904, 6905, 6906, 6907, 6908, 6909, 6910, 6911, 6912, 6913, 6914, 6915, 6916, 6917, 6918, 6919, 6920, 6921, 6922, 6923, 6924, 6925, 6926, 6927, 6928, 6929, 6930, 6931, 6932, 6933, 6934, 6935, 6936, 6937, 6938, 6939, 6940, 6941, 6942, 6943, 6944, 6945, 6946, 6947, 6948, 6949, 6950, 6951, 6952, 6953, 6954, 6955, 6956, 6957, 6958, 6959, 6960, 6961, 6962, 6963, 6964, 6965, 6966, 6967, 6968, 6969, 6970, 6971, 6972, 6973, 6974, 6975, 6976, 6977, 6978, 6979, 6980, 6981, 6982, 6983, 6984, 6985, 6986, 6987, 6988, 6989, 6990, 6991, 6992, 6993, 6994, 6995, 6996, 6997, 6998, 6999, 7000, 7001, 7002, 7003, 7004, 7005, 7006, 7007, 7008, 7009, 7010, 7011, 7012, 7013, 7014, 7015, 7016, 7017, 7018, 7019, 7020, 7021, 7022, 7023, 7024, 7025, 7026, 7027, 7028, 7029, 7030, 7031, 7032, 7033, 7034, 7035, 7036, 7037, 7038, 7039, 7040, 7041, 7042, 7043, 7044, 7045, 7046, 7047, 7048, 7049, 7050, 7051, 7052, 7053, 7054, 7055, 7056, 7057, 7058, 7059, 7060, 7061, 7062, 7063, 7064, 7065, 7066, 7067, 7068, 7069, 7070, 7071, 7072, 7073, 7074, 7075, 7076, 7077, 7078, 7079, 7080, 7081, 7082, 7083, 7084, 7085, 7086, 7087, 7088, 7089, 7090, 7091, 7092, 7093, 7094, 7095, 7096, 7097, 7098, 7099, 7100, 7101, 7102, 7103, 7104, 7105, 7106, 7107, 7108, 7109, 7110, 7111, 7112, 7113, 7114, 7115, 7116, 7117, 7118, 7119, 7120, 7121, 7122, 7123, 7124, 7125, 7126, 7127, 7128, 7129, 7130, 7131, 7132, 7133, 7134, 7135, 7136, 7137, 7138, 7139, 7140, 7141, 7142, 7143, 7144, 7145, 7146, 7147, 7148, 7149, 7150, 7151, 7152, 7153, 7154, 7155, 7156, 7157, 7158, 7159, 7160, 7161, 7162, 7163, 7164, 7165, 7166, 7167, 7168, 7169, 7170, 7171, 7172, 7173, 7174, 7175, 7176, 7177, 7178, 7179, 7180, 7181, 7182, 7183, 7184, 7185, 7186, 7187, 7188, 7189, 7190, 7191, 7192, 7193, 7194, 7195, 7196, 7197, 7198, 7199, 7200, 7201, 7202, 7203, 7204, 7205, 7206, 7207, 7208, 7209, 7210, 7211, 7212, 7213, 7214, 7215, 7216, 7217, 7218, 7219, 7220, 7221, 7222, 7223, 7224, 7225, 7226, 7227, 7228, 7229, 7230, 7231, 7232, 7233, 7234, 7235, 7236, 7237, 7238, 7239, 7240, 7241, 7242, 7243, 7244, 7245, 7246, 7247, 7248, 7249, 7250, 7251, 7252, 7253, 7254, 7255, 7256, 7257, 7258, 7259, 7260, 7261, 7262, 7263, 7264, 7265, 7266, 7267, 7268, 7269, 7270, 7271, 7272, 7273, 7274, 7275, 7276, 7277, 7278, 7279, 7280, 7281, 7282, 7283, 7284, 7285, 7286, 7287, 7288, 7289, 7290, 7291, 7292, 7293, 7294, 7295, 7296, 7297, 7298, 7299, 7300, 7301, 7302, 7303, 7304, 7305, 7306, 7307, 7308, 7309, 7310, 7311, 7312, 7313, 7314, 7315, 7316, 7317, 7318, 7319, 7320, 7321, 7322, 7323, 7324, 7325, 7326, 7327, 7328, 7329, 7330, 7331, 7332, 7333, 7334, 7335, 7336, 7337, 7338, 7339, 7340, 7341, 7342, 7343, 7344, 7345, 7346, 7347, 7348, 7349, 7350, 7351, 7352, 7353, 7354, 7355, 7356, 7357, 7358, 7359, 7360, 7361, 7362, 7363, 7364, 7365, 7366, 7367, 7368, 7369, 7370, 7371, 7372, 7373, 7374, 7375, 7376, 7377, 7378, 7379, 7380, 7381, 7382, 7383, 7384, 7385, 7386, 7387, 7388, 7389, 7390, 7391, 7392, 7393, 7394, 7395, 7396, 7397, 7398, 7399, 7400, 7401, 7402, 7403, 7404, 7405, 7406, 7407, 7408, 7409, 7410, 7411, 7412, 7413, 7414, 7415, 7416, 7417, 7418, 7419, 7420, 7421, 7422, 7423, 7424, 7425, 7426, 7427, 7428, 7429, 7430, 7431, 7432, 7433, 7434, 7435, 7436, 7437, 7438, 7439, 7440, 7441, 7442, 7443, 7444, 7445, 7446, 7447, 7448, 7449, 7450, 7451, 7452, 7453, 7454, 7455, 7456, 7457, 7458, 7459, 7460, 7461, 7462, 7463, 7464, 7465, 7466, 7467, 7468, 7469, 7470, 7471, 7472, 7473, 7474, 7475, 7476, 7477, 7478, 7479, 7480, 7481, 7482, 7483, 7484, 7485, 7486, 7487, 7488, 7489, 7490, 7491, 7492, 7493, 7494, 7495, 7496, 7497, 7498, 7499, 7500, 7501, 7502, 7503, 7504, 7505, 7506, 7507, 7508, 7509, 7510, 7511, 7512, 7513, 7514, 7515, 7516, 7517, 7518, 7519, 7520, 7521, 7522, 7523, 7524, 7525, 7526, 7527, 7528, 7529, 7530, 7531, 7532, 7533, 7534, 7535, 7536, 7537, 7538, 7539, 7540, 7541, 7542, 7543, 7544, 7545, 7546, 7547, 7548, 7549, 7550, 7551, 7552, 7553, 7554, 7555, 7556, 7557, 7558, 7559, 7560, 7561, 7562, 7563, 7564, 7565, 7566, 7567, 7568, 7569, 7570, 7571, 7572, 7573, 7574, 7575, 7576, 7577, 7578, 7579, 7580, 7581, 7582, 7583, 7584, 7585, 7586, 7587, 7588, 7589, 7590, 7591, 7592, 7593, 7594, 7595, 7596, 7597, 7598, 7599, 7600, 7601, 7602, 7603, 7604, 7605, 7606, 7607, 7608, 7609, 7610, 7611, 7612, 7613, 7614, 7615, 7616, 7617, 7618, 7619, 7620, 7621, 7622, 7623, 7624, 7625, 7626, 7627, 7628, 7629, 7630, 7631, 7632, 7633, 7634, 7635, 7636, 7637, 7638, 7639, 7640, 7641, 7642, 7643, 7644, 7645, 7646, 7647, 7648, 7649, 7650, 7651, 7652, 7653, 7654, 7655, 7656, 7657, 7658, 7659, 7660, 7661, 7662, 7663, 7664, 7665, 7666, 7667, 7668, 7669, 7670, 7671, 7672, 7673, 7674, 7675, 7676, 7677, 7678, 7679, 7680, 7681, 7682, 7683, 7684, 7685, 7686, 7687, 7688, 7689, 7690, 7691, 7692, 7693, 7694, 7695, 7696, 7697, 7698, 7699, 7700, 7701, 7702, 7703, 7704, 7705, 7706, 7707, 7708, 7709, 7710, 7711, 7712, 7713, 7714, 7715, 7716, 7717, 7718, 7719, 7720, 7721, 7722, 7723, 7724, 7725, 7726, 7727, 7728, 7729, 7730, 7731, 7732, 7733, 7734, 7735, 7736, 7737, 7738, 7739, 7740, 7741, 7742, 7743, 7744, 7745, 7746, 7747, 7748, 7749, 7750, 7751, 7752, 7753, 7754, 7755, 7756, 7757, 7758, 7759, 7760, 7761, 7762, 7763, 7764, 7765, 7766, 7767, 7768, 7769, 7770, 7771, 7772, 7773, 7774, 7775, 7776, 7777, 7778, 7779, 7780, 7781, 7782, 7783, 7784, 7785, 7786, 7787, 7788, 7789, 7790, 7791, 7792, 7793, 7794, 7795, 7796, 7797, 7798, 7799, 7800, 7801, 7802, 7803, 7804, 7805, 7806, 7807, 7808, 7809, 7810, 7811, 7812, 7813, 7814, 7815, 7816, 7817, 7818, 7819, 7820, 7821, 7822, 7823, 7824, 7825, 7826, 7827, 7828, 7829, 7830, 7831, 7832, 7833, 7834, 7835, 7836, 7837, 7838, 7839, 7840, 7841, 7842, 7843, 7844, 7845, 7846, 7847, 7848, 7849, 7850, 7851, 7852, 7853, 7854, 7855, 7856, 7857, 7858, 7859, 7860, 7861, 7862, 7863, 7864, 7865, 7866, 7867, 7868, 7869, 7870, 7871, 7872, 7873, 7874, 7875, 7876, 7877, 7878, 7879, 7880, 7881, 7882, 7883, 7884, 7885, 7886, 7887, 7888, 7889, 7890, 7891, 7892, 7893, 7894, 7895, 7896, 7897, 7898, 7899, 7900, 7901, 7902, 7903, 7904, 7905, 7906, 7907, 7908, 7909, 7910, 7911, 7912, 7913, 7914, 7915, 7916, 7917, 7918, 7919, 7920, 7921, 7922, 7923, 7924, 7925, 7926, 7927, 7928, 7929, 7930, 7931, 7932, 7933, 7934, 7935, 7936, 7937, 7938, 7939, 7940, 7941, 7942, 7943, 7944, 7945, 7946, 7947, 7948, 7949, 7950, 7951, 7952, 7953, 7954, 7955, 7956, 7957, 7958, 7959, 7960, 7961, 7962, 7963, 7964, 7965, 7966, 7967, 7968, 7969, 7970, 7971, 7972, 7973, 7974, 7975, 7976, 7977, 7978, 7979, 7980, 7981, 7982, 7983, 7984, 7985, 7986, 7987, 7988, 7989, 7990, 7991, 7992, 7993, 7994, 7995, 7996, 7997, 7998, 7999, 8000, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 8011, 8012, 8013, 8014, 8015, 8016, 8017, 8018, 8019, 8020, 8021, 8022, 8023, 8024, 8025, 8026, 8027, 8028, 8029, 8030, 8031, 8032, 8033, 8034, 8035, 8036, 8037, 8038, 8039, 8040, 8041, 8042, 8043, 8044, 8045, 8046, 8047, 8048, 8049, 8050, 8051, 8052, 8053, 8054, 8055, 8056, 8057, 8058, 8059, 8060, 8061, 8062, 8063, 8064, 8065, 8066, 8067, 8068, 8069, 8070, 8071, 8072, 8073, 8074, 8075, 8076, 8077, 8078, 8079, 8080, 8081, 8082, 8083, 8084, 8085, 8086, 8087, 8088, 8089, 8090, 8091, 8092, 8093, 8094, 8095, 8096, 8097, 8098, 8099, 8100, 8101, 8102, 8103, 8104, 8105, 8106, 8107, 8108, 8109, 8110, 8111, 8112, 8113, 8114, 8115, 8116, 8117, 8118, 8119, 8120, 8121, 8122, 8123, 8124, 8125, 8126, 8127, 8128, 8129, 8130, 8131, 8132, 8133, 8134, 8135, 8136, 8137, 8138, 8139, 8140, 8141, 8142, 8143, 8144, 8145, 8146, 8147, 8148, 8149, 8150, 8151, 8152, 8153, 8154, 8155, 8156, 8157, 8158, 8159, 8160, 8161, 8162, 8163, 8164, 8165, 8166, 8167, 8168, 8169, 8170, 8171, 8172, 8173, 8174, 8175, 8176, 8177, 8178, 8179, 8180, 8181, 8182, 8183, 8184, 8185, 8186, 8187, 8188, 8189, 8190, 8191, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200, 8201, 8202, 8203, 8204, 8205, 8206, 8207, 8208, 8209, 8210, 8211, 8212, 8213, 8214, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8223, 8224, 8225, 8226, 8227, 8228, 8229, 8230, 8231, 8232, 8233, 8234, 8235, 8236, 8237, 8238, 8239, 8240, 8241, 8242, 8243, 8244, 8245, 8246, 8247, 8248, 8249, 8250, 8251, 8252, 8253, 8254, 8255, 8256, 8257, 8258, 8259, 8260, 8261, 8262, 8263, 8264, 8265, 8266, 8267, 8268, 8269, 8270, 8271, 8272, 8273, 8274, 8275, 8276, 8277, 8278, 8279, 8280, 8281, 8282, 8283, 8284, 8285, 8286, 8287, 8288, 8289, 8290, 8291, 8292, 8293, 8294, 8295, 8296, 8297, 8298, 8299, 8300, 8301, 8302, 8303, 8304, 8305, 8306, 8307, 8308, 8309, 8310, 8311, 8312, 8313, 8314, 8315, 8316, 8317, 8318, 8319, 8320, 8321, 8322, 8323, 8324, 8325, 8326, 8327, 8328, 8329, 8330, 8331, 8332, 8333, 8334, 8335, 8336, 8337, 8338, 8339, 8340, 8341, 8342, 8343, 8344, 8345, 8346, 8347, 8348, 8349, 8350, 8351, 8352, 8353, 8354, 8355, 8356, 8357, 8358, 8359, 8360, 8361, 8362, 8363, 8364, 8365, 8366, 8367, 8368, 8369, 8370, 8371, 8372, 8373, 8374, 8375, 8376, 8377, 8378, 8379, 8380, 8381, 8382, 8383, 8384, 8385, 8386, 8387, 8388, 8389, 8390, 8391, 8392, 8393, 8394, 8395, 8396, 8397, 8398, 8399, 8400, 8401, 8402, 8403, 8404, 8405, 8406, 8407, 8408, 8409, 8410, 8411, 8412, 8413, 8414, 8415, 8416, 8417, 8418, 8419, 8420, 8421, 8422, 8423, 8424, 8425, 8426, 8427, 8428, 8429, 8430, 8431, 8432, 8433, 8434, 8435, 8436, 8437, 8438, 8439, 8440, 8441, 8442, 8443, 8444, 8445, 8446, 8447, 8448, 8449, 8450, 8451, 8452, 8453, 8454, 8455, 8456, 8457, 8458, 8459, 8460, 8461, 8462, 8463, 8464, 8465, 8466, 8467, 8468, 8469, 8470, 8471, 8472, 8473, 8474, 8475, 8476, 8477, 8478, 8479, 8480, 8481, 8482, 8483, 8484, 8485, 8486, 8487, 8488, 8489, 8490, 8491, 8492, 8493, 8494, 8495, 8496, 8497, 8498, 8499, 8500, 8501, 8502, 8503, 8504, 8505, 8506, 8507, 8508, 8509, 8510, 8511, 8512, 8513, 8514, 8515, 8516, 8517, 8518, 8519, 8520, 8521, 8522, 8523, 8524, 8525, 8526, 8527, 8528, 8529, 8530, 8531, 8532, 8533, 8534, 8535, 8536, 8537, 8538, 8539, 8540, 8541, 8542, 8543, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, 8554, 8555, 8556, 8557, 8558, 8559, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, 8570, 8571, 8572, 8573, 8574, 8575, 8576, 8577, 8578, 8579, 8580, 8581, 8582, 8583, 8584, 8585, 8586, 8587, 8588, 8589, 8590, 8591, 8592, 8593, 8594, 8595, 8596, 8597, 8598, 8599, 8600, 8601, 8602, 8603, 8604, 8605, 8606, 8607, 8608, 8609, 8610, 8611, 8612, 8613, 8614, 8615, 8616, 8617, 8618, 8619, 8620, 8621, 8622, 8623, 8624, 8625, 8626, 8627, 8628, 8629, 8630, 8631, 8632, 8633, 8634, 8635, 8636, 8637, 8638, 8639, 8640, 8641, 8642, 8643, 8644, 8645, 8646, 8647, 8648, 8649, 8650, 8651, 8652, 8653, 8654, 8655, 8656, 8657, 8658, 8659, 8660, 8661, 8662, 8663, 8664, 8665, 8666, 8667, 8668, 8669, 8670, 8671, 8672, 8673, 8674, 8675, 8676, 8677, 8678, 8679, 8680, 8681, 8682, 8683, 8684, 8685, 8686, 8687, 8688, 8689, 8690, 8691, 8692, 8693, 8694, 8695, 8696, 8697, 8698, 8699, 8700, 8701, 8702, 8703, 8704, 8705, 8706, 8707, 8708, 8709, 8710, 8711, 8712, 8713, 8714, 8715, 8716, 8717, 8718, 8719, 8720, 8721, 8722, 8723, 8724, 8725, 8726, 8727, 8728, 8729, 8730, 8731, 8732, 8733, 8734, 8735, 8736, 8737, 8738, 8739, 8740, 8741, 8742, 8743, 8744, 8745, 8746, 8747, 8748, 8749, 8750, 8751, 8752, 8753, 8754, 8755, 8756, 8757, 8758, 8759, 8760, 8761, 8762, 8763, 8764, 8765, 8766, 8767, 8768, 8769, 8770, 8771, 8772, 8773, 8774, 8775, 8776, 8777, 8778, 8779, 8780, 8781, 8782, 8783, 8784, 8785, 8786, 8787, 8788, 8789, 8790, 8791, 8792, 8793, 8794, 8795, 8796, 8797, 8798, 8799, 8800, 8801, 8802, 8803, 8804, 8805, 8806, 8807, 8808, 8809, 8810, 8811, 8812, 8813, 8814, 8815, 8816, 8817, 8818, 8819, 8820, 8821, 8822, 8823, 8824, 8825, 8826, 8827, 8828, 8829, 8830, 8831, 8832, 8833, 8834, 8835, 8836, 8837, 8838, 8839, 8840, 8841, 8842, 8843, 8844, 8845, 8846, 8847, 8848, 8849, 8850, 8851, 8852, 8853, 8854, 8855, 8856, 8857, 8858, 8859, 8860, 8861, 8862, 8863, 8864, 8865, 8866, 8867, 8868, 8869, 8870, 8871, 8872, 8873, 8874, 8875, 8876, 8877, 8878, 8879, 8880, 8881, 8882, 8883, 8884, 8885, 8886, 8887, 8888, 8889, 8890, 8891, 8892, 8893, 8894, 8895, 8896, 8897, 8898, 8899, 8900, 8901, 8902, 8903, 8904, 8905, 8906, 8907, 8908, 8909, 8910, 8911, 8912, 8913, 8914, 8915, 8916, 8917, 8918, 8919, 8920, 8921, 8922, 8923, 8924, 8925, 8926, 8927, 8928, 8929, 8930, 8931, 8932, 8933, 8934, 8935, 8936, 8937, 8938, 8939, 8940, 8941, 8942, 8943, 8944, 8945, 8946, 8947, 8948, 8949, 8950, 8951, 8952, 8953, 8954, 8955, 8956, 8957, 8958, 8959, 8960, 8961, 8962, 8963, 8964, 8965, 8966, 8967, 8968, 8969, 8970, 8971, 8972, 8973, 8974, 8975, 8976, 8977, 8978, 8979, 8980, 8981, 8982, 8983, 8984, 8985, 8986, 8987, 8988, 8989, 8990, 8991, 8992, 8993, 8994, 8995, 8996, 8997, 8998, 8999, 9000, 9001, 9002, 9003, 9004, 9005, 9006, 9007, 9008, 9009, 9010, 9011, 9012, 9013, 9014, 9015, 9016, 9017, 9018, 9019, 9020, 9021, 9022, 9023, 9024, 9025, 9026, 9027, 9028, 9029, 9030, 9031, 9032, 9033, 9034, 9035, 9036, 9037, 9038, 9039, 9040, 9041, 9042, 9043, 9044, 9045, 9046, 9047, 9048, 9049, 9050, 9051, 9052, 9053, 9054, 9055, 9056, 9057, 9058, 9059, 9060, 9061, 9062, 9063, 9064, 9065, 9066, 9067, 9068, 9069, 9070, 9071, 9072, 9073, 9074, 9075, 9076, 9077, 9078, 9079, 9080, 9081, 9082, 9083, 9084, 9085, 9086, 9087, 9088, 9089, 9090, 9091, 9092, 9093, 9094, 9095, 9096, 9097, 9098, 9099, 9100, 9101, 9102, 9103, 9104, 9105, 9106, 9107, 9108, 9109, 9110, 9111, 9112, 9113, 9114, 9115, 9116, 9117, 9118, 9119, 9120, 9121, 9122, 9123, 9124, 9125, 9126, 9127, 9128, 9129, 9130, 9131, 9132, 9133, 9134, 9135, 9136, 9137, 9138, 9139, 9140, 9141, 9142, 9143, 9144, 9145, 9146, 9147, 9148, 9149, 9150, 9151, 9152, 9153, 9154, 9155, 9156, 9157, 9158, 9159, 9160, 9161, 9162, 9163, 9164, 9165, 9166, 9167, 9168, 9169, 9170, 9171, 9172, 9173, 9174, 9175, 9176, 9177, 9178, 9179, 9180, 9181, 9182, 9183, 9184, 9185, 9186, 9187, 9188, 9189, 9190, 9191, 9192, 9193, 9194, 9195, 9196, 9197, 9198, 9199, 9200, 9201, 9202, 9203, 9204, 9205, 9206, 9207, 9208, 9209, 9210, 9211, 9212, 9213, 9214, 9215, 9216, 9217, 9218, 9219, 9220, 9221, 9222, 9223, 9224, 9225, 9226, 9227, 9228, 9229, 9230, 9231, 9232, 9233, 9234, 9235, 9236, 9237, 9238, 9239, 9240, 9241, 9242, 9243, 9244, 9245, 9246, 9247, 9248, 9249, 9250, 9251, 9252, 9253, 9254, 9255, 9256, 9257, 9258, 9259, 9260, 9261, 9262, 9263, 9264, 9265, 9266, 9267, 9268, 9269, 9270, 9271, 9272, 9273, 9274, 9275, 9276, 9277, 9278, 9279, 9280, 9281, 9282, 9283, 9284, 9285, 9286, 9287, 9288, 9289, 9290, 9291, 9292, 9293, 9294, 9295, 9296, 9297, 9298, 9299, 9300, 9301, 9302, 9303, 9304, 9305, 9306, 9307, 9308, 9309, 9310, 9311, 9312, 9313, 9314, 9315, 9316, 9317, 9318, 9319, 9320, 9321, 9322, 9323, 9324, 9325, 9326, 9327, 9328, 9329, 9330, 9331, 9332, 9333, 9334, 9335, 9336, 9337, 9338, 9339, 9340, 9341, 9342, 9343, 9344, 9345, 9346, 9347, 9348, 9349, 9350, 9351, 9352, 9353, 9354, 9355, 9356, 9357, 9358, 9359, 9360, 9361, 9362, 9363, 9364, 9365, 9366, 9367, 9368, 9369, 9370, 9371, 9372, 9373, 9374, 9375, 9376, 9377, 9378, 9379, 9380, 9381, 9382, 9383, 9384, 9385, 9386, 9387, 9388, 9389, 9390, 9391, 9392, 9393, 9394, 9395, 9396, 9397, 9398, 9399, 9400, 9401, 9402, 9403, 9404, 9405, 9406, 9407, 9408, 9409, 9410, 9411, 9412, 9413, 9414, 9415, 9416, 9417, 9418, 9419, 9420, 9421, 9422, 9423, 9424, 9425, 9426, 9427, 9428, 9429, 9430, 9431, 9432, 9433, 9434, 9435, 9436, 9437, 9438, 9439, 9440, 9441, 9442, 9443, 9444, 9445, 9446, 9447, 9448, 9449, 9450, 9451, 9452, 9453, 9454, 9455, 9456, 9457, 9458, 9459, 9460, 9461, 9462, 9463, 9464, 9465, 9466, 9467, 9468, 9469, 9470, 9471, 9472, 9473, 9474, 9475, 9476, 9477, 9478, 9479, 9480, 9481, 9482, 9483, 9484, 9485, 9486, 9487, 9488, 9489, 9490, 9491, 9492, 9493, 9494, 9495, 9496, 9497, 9498, 9499, 9500, 9501, 9502, 9503, 9504, 9505, 9506, 9507, 9508, 9509, 9510, 9511, 9512, 9513, 9514, 9515, 9516, 9517, 9518, 9519, 9520, 9521, 9522, 9523, 9524, 9525, 9526, 9527, 9528, 9529, 9530, 9531, 9532, 9533, 9534, 9535, 9536, 9537, 9538, 9539, 9540, 9541, 9542, 9543, 9544, 9545, 9546, 9547, 9548, 9549, 9550, 9551, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9581, 9582, 9583, 9584, 9585, 9586, 9587, 9588, 9589, 9590, 9591, 9592, 9593, 9594, 9595, 9596, 9597, 9598, 9599, 9600, 9601, 9602, 9603, 9604, 9605, 9606, 9607, 9608, 9609, 9610, 9611, 9612, 9613, 9614, 9615, 9616, 9617, 9618, 9619, 9620, 9621, 9622, 9623, 9624, 9625, 9626, 9627, 9628, 9629, 9630, 9631, 9632, 9633, 9634, 9635, 9636, 9637, 9638, 9639, 9640, 9641, 9642, 9643, 9644, 9645, 9646, 9647, 9648, 9649, 9650, 9651, 9652, 9653, 9654, 9655, 9656, 9657, 9658, 9659, 9660, 9661, 9662, 9663, 9664, 9665, 9666, 9667, 9668, 9669, 9670, 9671, 9672, 9673, 9674, 9675, 9676, 9677, 9678, 9679, 9680, 9681, 9682, 9683, 9684, 9685, 9686, 9687, 9688, 9689, 9690, 9691, 9692, 9693, 9694, 9695, 9696, 9697, 9698, 9699, 9700, 9701, 9702, 9703, 9704, 9705, 9706, 9707, 9708, 9709, 9710, 9711, 9712, 9713, 9714, 9715, 9716, 9717, 9718, 9719, 9720, 9721, 9722, 9723, 9724, 9725, 9726, 9727, 9728, 9729, 9730, 9731, 9732, 9733, 9734, 9735, 9736, 9737, 9738, 9739, 9740, 9741, 9742, 9743, 9744, 9745, 9746, 9747, 9748, 9749, 9750, 9751, 9752, 9753, 9754, 9755, 9756, 9757, 9758, 9759, 9760, 9761, 9762, 9763, 9764, 9765, 9766, 9767, 9768, 9769, 9770, 9771, 9772, 9773, 9774, 9775, 9776, 9777, 9778, 9779, 9780, 9781, 9782, 9783, 9784, 9785, 9786, 9787, 9788, 9789, 9790, 9791, 9792, 9793, 9794, 9795, 9796, 9797, 9798, 9799, 9800, 9801, 9802, 9803, 9804, 9805, 9806, 9807, 9808, 9809, 9810, 9811, 9812, 9813, 9814, 9815, 9816, 9817, 9818, 9819, 9820, 9821, 9822, 9823, 9824, 9825, 9826, 9827, 9828, 9829, 9830, 9831, 9832, 9833, 9834, 9835, 9836, 9837, 9838, 9839, 9840, 9841, 9842, 9843, 9844, 9845, 9846, 9847, 9848, 9849, 9850, 9851, 9852, 9853, 9854, 9855, 9856, 9857, 9858, 9859, 9860, 9861, 9862, 9863, 9864, 9865, 9866, 9867, 9868, 9869, 9870, 9871, 9872, 9873, 9874, 9875, 9876, 9877, 9878, 9879, 9880, 9881, 9882, 9883, 9884, 9885, 9886, 9887, 9888, 9889, 9890, 9891, 9892, 9893, 9894, 9895, 9896, 9897, 9898, 9899, 9900, 9901, 9902, 9903, 9904, 9905, 9906, 9907, 9908, 9909, 9910, 9911, 9912, 9913, 9914, 9915, 9916, 9917, 9918, 9919, 9920, 9921, 9922, 9923, 9924, 9925, 9926, 9927, 9928, 9929, 9930, 9931, 9932, 9933, 9934, 9935, 9936, 9937, 9938, 9939, 9940, 9941, 9942, 9943, 9944, 9945, 9946, 9947, 9948, 9949, 9950, 9951, 9952, 9953, 9954, 9955, 9956, 9957, 9958, 9959, 9960, 9961, 9962, 9963, 9964, 9965, 9966, 9967, 9968, 9969, 9970, 9971, 9972, 9973, 9974, 9975, 9976, 9977, 9978, 9979, 9980, 9981, 9982, 9983, 9984, 9985, 9986, 9987, 9988, 9989, 9990, 9991, 9992, 9993, 9994, 9995, 9996, 9997, 9998, 9999)\n", + "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2337, 2338, 2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2351, 2352, 2353, 2354, 2355, 2356, 2357, 2358, 2359, 2360, 2361, 2362, 2363, 2364, 2365, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2384, 2385, 2386, 2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399, 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2413, 2414, 2415, 2416, 2417, 2418, 2419, 2420, 2421, 2422, 2423, 2424, 2425, 2426, 2427, 2428, 2429, 2430, 2431, 2432, 2433, 2434, 2435, 2436, 2437, 2438, 2439, 2440, 2441, 2442, 2443, 2444, 2445, 2446, 2447, 2448, 2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 2467, 2468, 2469, 2470, 2471, 2472, 2473, 2474, 2475, 2476, 2477, 2478, 2479, 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2492, 2493, 2494, 2495, 2496, 2497, 2498, 2499, 2500, 2501, 2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2512, 2513, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524, 2525, 2526, 2527, 2528, 2529, 2530, 2531, 2532, 2533, 2534, 2535, 2536, 2537, 2538, 2539, 2540, 2541, 2542, 2543, 2544, 2545, 2546, 2547, 2548, 2549, 2550, 2551, 2552, 2553, 2554, 2555, 2556, 2557, 2558, 2559, 2560, 2561, 2562, 2563, 2564, 2565, 2566, 2567, 2568, 2569, 2570, 2571, 2572, 2573, 2574, 2575, 2576, 2577, 2578, 2579, 2580, 2581, 2582, 2583, 2584, 2585, 2586, 2587, 2588, 2589, 2590, 2591, 2592, 2593, 2594, 2595, 2596, 2597, 2598, 2599, 2600, 2601, 2602, 2603, 2604, 2605, 2606, 2607, 2608, 2609, 2610, 2611, 2612, 2613, 2614, 2615, 2616, 2617, 2618, 2619, 2620, 2621, 2622, 2623, 2624, 2625, 2626, 2627, 2628, 2629, 2630, 2631, 2632, 2633, 2634, 2635, 2636, 2637, 2638, 2639, 2640, 2641, 2642, 2643, 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651, 2652, 2653, 2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661, 2662, 2663, 2664, 2665, 2666, 2667, 2668, 2669, 2670, 2671, 2672, 2673, 2674, 2675, 2676, 2677, 2678, 2679, 2680, 2681, 2682, 2683, 2684, 2685, 2686, 2687, 2688, 2689, 2690, 2691, 2692, 2693, 2694, 2695, 2696, 2697, 2698, 2699, 2700, 2701, 2702, 2703, 2704, 2705, 2706, 2707, 2708, 2709, 2710, 2711, 2712, 2713, 2714, 2715, 2716, 2717, 2718, 2719, 2720, 2721, 2722, 2723, 2724, 2725, 2726, 2727, 2728, 2729, 2730, 2731, 2732, 2733, 2734, 2735, 2736, 2737, 2738, 2739, 2740, 2741, 2742, 2743, 2744, 2745, 2746, 2747, 2748, 2749, 2750, 2751, 2752, 2753, 2754, 2755, 2756, 2757, 2758, 2759, 2760, 2761, 2762, 2763, 2764, 2765, 2766, 2767, 2768, 2769, 2770, 2771, 2772, 2773, 2774, 2775, 2776, 2777, 2778, 2779, 2780, 2781, 2782, 2783, 2784, 2785, 2786, 2787, 2788, 2789, 2790, 2791, 2792, 2793, 2794, 2795, 2796, 2797, 2798, 2799, 2800, 2801, 2802, 2803, 2804, 2805, 2806, 2807, 2808, 2809, 2810, 2811, 2812, 2813, 2814, 2815, 2816, 2817, 2818, 2819, 2820, 2821, 2822, 2823, 2824, 2825, 2826, 2827, 2828, 2829, 2830, 2831, 2832, 2833, 2834, 2835, 2836, 2837, 2838, 2839, 2840, 2841, 2842, 2843, 2844, 2845, 2846, 2847, 2848, 2849, 2850, 2851, 2852, 2853, 2854, 2855, 2856, 2857, 2858, 2859, 2860, 2861, 2862, 2863, 2864, 2865, 2866, 2867, 2868, 2869, 2870, 2871, 2872, 2873, 2874, 2875, 2876, 2877, 2878, 2879, 2880, 2881, 2882, 2883, 2884, 2885, 2886, 2887, 2888, 2889, 2890, 2891, 2892, 2893, 2894, 2895, 2896, 2897, 2898, 2899, 2900, 2901, 2902, 2903, 2904, 2905, 2906, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, 2916, 2917, 2918, 2919, 2920, 2921, 2922, 2923, 2924, 2925, 2926, 2927, 2928, 2929, 2930, 2931, 2932, 2933, 2934, 2935, 2936, 2937, 2938, 2939, 2940, 2941, 2942, 2943, 2944, 2945, 2946, 2947, 2948, 2949, 2950, 2951, 2952, 2953, 2954, 2955, 2956, 2957, 2958, 2959, 2960, 2961, 2962, 2963, 2964, 2965, 2966, 2967, 2968, 2969, 2970, 2971, 2972, 2973, 2974, 2975, 2976, 2977, 2978, 2979, 2980, 2981, 2982, 2983, 2984, 2985, 2986, 2987, 2988, 2989, 2990, 2991, 2992, 2993, 2994, 2995, 2996, 2997, 2998, 2999, 3000, 3001, 3002, 3003, 3004, 3005, 3006, 3007, 3008, 3009, 3010, 3011, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 3019, 3020, 3021, 3022, 3023, 3024, 3025, 3026, 3027, 3028, 3029, 3030, 3031, 3032, 3033, 3034, 3035, 3036, 3037, 3038, 3039, 3040, 3041, 3042, 3043, 3044, 3045, 3046, 3047, 3048, 3049, 3050, 3051, 3052, 3053, 3054, 3055, 3056, 3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064, 3065, 3066, 3067, 3068, 3069, 3070, 3071, 3072, 3073, 3074, 3075, 3076, 3077, 3078, 3079, 3080, 3081, 3082, 3083, 3084, 3085, 3086, 3087, 3088, 3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3099, 3100, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, 3110, 3111, 3112, 3113, 3114, 3115, 3116, 3117, 3118, 3119, 3120, 3121, 3122, 3123, 3124, 3125, 3126, 3127, 3128, 3129, 3130, 3131, 3132, 3133, 3134, 3135, 3136, 3137, 3138, 3139, 3140, 3141, 3142, 3143, 3144, 3145, 3146, 3147, 3148, 3149, 3150, 3151, 3152, 3153, 3154, 3155, 3156, 3157, 3158, 3159, 3160, 3161, 3162, 3163, 3164, 3165, 3166, 3167, 3168, 3169, 3170, 3171, 3172, 3173, 3174, 3175, 3176, 3177, 3178, 3179, 3180, 3181, 3182, 3183, 3184, 3185, 3186, 3187, 3188, 3189, 3190, 3191, 3192, 3193, 3194, 3195, 3196, 3197, 3198, 3199, 3200, 3201, 3202, 3203, 3204, 3205, 3206, 3207, 3208, 3209, 3210, 3211, 3212, 3213, 3214, 3215, 3216, 3217, 3218, 3219, 3220, 3221, 3222, 3223, 3224, 3225, 3226, 3227, 3228, 3229, 3230, 3231, 3232, 3233, 3234, 3235, 3236, 3237, 3238, 3239, 3240, 3241, 3242, 3243, 3244, 3245, 3246, 3247, 3248, 3249, 3250, 3251, 3252, 3253, 3254, 3255, 3256, 3257, 3258, 3259, 3260, 3261, 3262, 3263, 3264, 3265, 3266, 3267, 3268, 3269, 3270, 3271, 3272, 3273, 3274, 3275, 3276, 3277, 3278, 3279, 3280, 3281, 3282, 3283, 3284, 3285, 3286, 3287, 3288, 3289, 3290, 3291, 3292, 3293, 3294, 3295, 3296, 3297, 3298, 3299, 3300, 3301, 3302, 3303, 3304, 3305, 3306, 3307, 3308, 3309, 3310, 3311, 3312, 3313, 3314, 3315, 3316, 3317, 3318, 3319, 3320, 3321, 3322, 3323, 3324, 3325, 3326, 3327, 3328, 3329, 3330, 3331, 3332, 3333, 3334, 3335, 3336, 3337, 3338, 3339, 3340, 3341, 3342, 3343, 3344, 3345, 3346, 3347, 3348, 3349, 3350, 3351, 3352, 3353, 3354, 3355, 3356, 3357, 3358, 3359, 3360, 3361, 3362, 3363, 3364, 3365, 3366, 3367, 3368, 3369, 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377, 3378, 3379, 3380, 3381, 3382, 3383, 3384, 3385, 3386, 3387, 3388, 3389, 3390, 3391, 3392, 3393, 3394, 3395, 3396, 3397, 3398, 3399, 3400, 3401, 3402, 3403, 3404, 3405, 3406, 3407, 3408, 3409, 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417, 3418, 3419, 3420, 3421, 3422, 3423, 3424, 3425, 3426, 3427, 3428, 3429, 3430, 3431, 3432, 3433, 3434, 3435, 3436, 3437, 3438, 3439, 3440, 3441, 3442, 3443, 3444, 3445, 3446, 3447, 3448, 3449, 3450, 3451, 3452, 3453, 3454, 3455, 3456, 3457, 3458, 3459, 3460, 3461, 3462, 3463, 3464, 3465, 3466, 3467, 3468, 3469, 3470, 3471, 3472, 3473, 3474, 3475, 3476, 3477, 3478, 3479, 3480, 3481, 3482, 3483, 3484, 3485, 3486, 3487, 3488, 3489, 3490, 3491, 3492, 3493, 3494, 3495, 3496, 3497, 3498, 3499, 3500, 3501, 3502, 3503, 3504, 3505, 3506, 3507, 3508, 3509, 3510, 3511, 3512, 3513, 3514, 3515, 3516, 3517, 3518, 3519, 3520, 3521, 3522, 3523, 3524, 3525, 3526, 3527, 3528, 3529, 3530, 3531, 3532, 3533, 3534, 3535, 3536, 3537, 3538, 3539, 3540, 3541, 3542, 3543, 3544, 3545, 3546, 3547, 3548, 3549, 3550, 3551, 3552, 3553, 3554, 3555, 3556, 3557, 3558, 3559, 3560, 3561, 3562, 3563, 3564, 3565, 3566, 3567, 3568, 3569, 3570, 3571, 3572, 3573, 3574, 3575, 3576, 3577, 3578, 3579, 3580, 3581, 3582, 3583, 3584, 3585, 3586, 3587, 3588, 3589, 3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597, 3598, 3599, 3600, 3601, 3602, 3603, 3604, 3605, 3606, 3607, 3608, 3609, 3610, 3611, 3612, 3613, 3614, 3615, 3616, 3617, 3618, 3619, 3620, 3621, 3622, 3623, 3624, 3625, 3626, 3627, 3628, 3629, 3630, 3631, 3632, 3633, 3634, 3635, 3636, 3637, 3638, 3639, 3640, 3641, 3642, 3643, 3644, 3645, 3646, 3647, 3648, 3649, 3650, 3651, 3652, 3653, 3654, 3655, 3656, 3657, 3658, 3659, 3660, 3661, 3662, 3663, 3664, 3665, 3666, 3667, 3668, 3669, 3670, 3671, 3672, 3673, 3674, 3675, 3676, 3677, 3678, 3679, 3680, 3681, 3682, 3683, 3684, 3685, 3686, 3687, 3688, 3689, 3690, 3691, 3692, 3693, 3694, 3695, 3696, 3697, 3698, 3699, 3700, 3701, 3702, 3703, 3704, 3705, 3706, 3707, 3708, 3709, 3710, 3711, 3712, 3713, 3714, 3715, 3716, 3717, 3718, 3719, 3720, 3721, 3722, 3723, 3724, 3725, 3726, 3727, 3728, 3729, 3730, 3731, 3732, 3733, 3734, 3735, 3736, 3737, 3738, 3739, 3740, 3741, 3742, 3743, 3744, 3745, 3746, 3747, 3748, 3749, 3750, 3751, 3752, 3753, 3754, 3755, 3756, 3757, 3758, 3759, 3760, 3761, 3762, 3763, 3764, 3765, 3766, 3767, 3768, 3769, 3770, 3771, 3772, 3773, 3774, 3775, 3776, 3777, 3778, 3779, 3780, 3781, 3782, 3783, 3784, 3785, 3786, 3787, 3788, 3789, 3790, 3791, 3792, 3793, 3794, 3795, 3796, 3797, 3798, 3799, 3800, 3801, 3802, 3803, 3804, 3805, 3806, 3807, 3808, 3809, 3810, 3811, 3812, 3813, 3814, 3815, 3816, 3817, 3818, 3819, 3820, 3821, 3822, 3823, 3824, 3825, 3826, 3827, 3828, 3829, 3830, 3831, 3832, 3833, 3834, 3835, 3836, 3837, 3838, 3839, 3840, 3841, 3842, 3843, 3844, 3845, 3846, 3847, 3848, 3849, 3850, 3851, 3852, 3853, 3854, 3855, 3856, 3857, 3858, 3859, 3860, 3861, 3862, 3863, 3864, 3865, 3866, 3867, 3868, 3869, 3870, 3871, 3872, 3873, 3874, 3875, 3876, 3877, 3878, 3879, 3880, 3881, 3882, 3883, 3884, 3885, 3886, 3887, 3888, 3889, 3890, 3891, 3892, 3893, 3894, 3895, 3896, 3897, 3898, 3899, 3900, 3901, 3902, 3903, 3904, 3905, 3906, 3907, 3908, 3909, 3910, 3911, 3912, 3913, 3914, 3915, 3916, 3917, 3918, 3919, 3920, 3921, 3922, 3923, 3924, 3925, 3926, 3927, 3928, 3929, 3930, 3931, 3932, 3933, 3934, 3935, 3936, 3937, 3938, 3939, 3940, 3941, 3942, 3943, 3944, 3945, 3946, 3947, 3948, 3949, 3950, 3951, 3952, 3953, 3954, 3955, 3956, 3957, 3958, 3959, 3960, 3961, 3962, 3963, 3964, 3965, 3966, 3967, 3968, 3969, 3970, 3971, 3972, 3973, 3974, 3975, 3976, 3977, 3978, 3979, 3980, 3981, 3982, 3983, 3984, 3985, 3986, 3987, 3988, 3989, 3990, 3991, 3992, 3993, 3994, 3995, 3996, 3997, 3998, 3999, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, 4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023, 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, 4037, 4038, 4039, 4040, 4041, 4042, 4043, 4044, 4045, 4046, 4047, 4048, 4049, 4050, 4051, 4052, 4053, 4054, 4055, 4056, 4057, 4058, 4059, 4060, 4061, 4062, 4063, 4064, 4065, 4066, 4067, 4068, 4069, 4070, 4071, 4072, 4073, 4074, 4075, 4076, 4077, 4078, 4079, 4080, 4081, 4082, 4083, 4084, 4085, 4086, 4087, 4088, 4089, 4090, 4091, 4092, 4093, 4094, 4095, 4096, 4097, 4098, 4099, 4100, 4101, 4102, 4103, 4104, 4105, 4106, 4107, 4108, 4109, 4110, 4111, 4112, 4113, 4114, 4115, 4116, 4117, 4118, 4119, 4120, 4121, 4122, 4123, 4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131, 4132, 4133, 4134, 4135, 4136, 4137, 4138, 4139, 4140, 4141, 4142, 4143, 4144, 4145, 4146, 4147, 4148, 4149, 4150, 4151, 4152, 4153, 4154, 4155, 4156, 4157, 4158, 4159, 4160, 4161, 4162, 4163, 4164, 4165, 4166, 4167, 4168, 4169, 4170, 4171, 4172, 4173, 4174, 4175, 4176, 4177, 4178, 4179, 4180, 4181, 4182, 4183, 4184, 4185, 4186, 4187, 4188, 4189, 4190, 4191, 4192, 4193, 4194, 4195, 4196, 4197, 4198, 4199, 4200, 4201, 4202, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4210, 4211, 4212, 4213, 4214, 4215, 4216, 4217, 4218, 4219, 4220, 4221, 4222, 4223, 4224, 4225, 4226, 4227, 4228, 4229, 4230, 4231, 4232, 4233, 4234, 4235, 4236, 4237, 4238, 4239, 4240, 4241, 4242, 4243, 4244, 4245, 4246, 4247, 4248, 4249, 4250, 4251, 4252, 4253, 4254, 4255, 4256, 4257, 4258, 4259, 4260, 4261, 4262, 4263, 4264, 4265, 4266, 4267, 4268, 4269, 4270, 4271, 4272, 4273, 4274, 4275, 4276, 4277, 4278, 4279, 4280, 4281, 4282, 4283, 4284, 4285, 4286, 4287, 4288, 4289, 4290, 4291, 4292, 4293, 4294, 4295, 4296, 4297, 4298, 4299, 4300, 4301, 4302, 4303, 4304, 4305, 4306, 4307, 4308, 4309, 4310, 4311, 4312, 4313, 4314, 4315, 4316, 4317, 4318, 4319, 4320, 4321, 4322, 4323, 4324, 4325, 4326, 4327, 4328, 4329, 4330, 4331, 4332, 4333, 4334, 4335, 4336, 4337, 4338, 4339, 4340, 4341, 4342, 4343, 4344, 4345, 4346, 4347, 4348, 4349, 4350, 4351, 4352, 4353, 4354, 4355, 4356, 4357, 4358, 4359, 4360, 4361, 4362, 4363, 4364, 4365, 4366, 4367, 4368, 4369, 4370, 4371, 4372, 4373, 4374, 4375, 4376, 4377, 4378, 4379, 4380, 4381, 4382, 4383, 4384, 4385, 4386, 4387, 4388, 4389, 4390, 4391, 4392, 4393, 4394, 4395, 4396, 4397, 4398, 4399, 4400, 4401, 4402, 4403, 4404, 4405, 4406, 4407, 4408, 4409, 4410, 4411, 4412, 4413, 4414, 4415, 4416, 4417, 4418, 4419, 4420, 4421, 4422, 4423, 4424, 4425, 4426, 4427, 4428, 4429, 4430, 4431, 4432, 4433, 4434, 4435, 4436, 4437, 4438, 4439, 4440, 4441, 4442, 4443, 4444, 4445, 4446, 4447, 4448, 4449, 4450, 4451, 4452, 4453, 4454, 4455, 4456, 4457, 4458, 4459, 4460, 4461, 4462, 4463, 4464, 4465, 4466, 4467, 4468, 4469, 4470, 4471, 4472, 4473, 4474, 4475, 4476, 4477, 4478, 4479, 4480, 4481, 4482, 4483, 4484, 4485, 4486, 4487, 4488, 4489, 4490, 4491, 4492, 4493, 4494, 4495, 4496, 4497, 4498, 4499, 4500, 4501, 4502, 4503, 4504, 4505, 4506, 4507, 4508, 4509, 4510, 4511, 4512, 4513, 4514, 4515, 4516, 4517, 4518, 4519, 4520, 4521, 4522, 4523, 4524, 4525, 4526, 4527, 4528, 4529, 4530, 4531, 4532, 4533, 4534, 4535, 4536, 4537, 4538, 4539, 4540, 4541, 4542, 4543, 4544, 4545, 4546, 4547, 4548, 4549, 4550, 4551, 4552, 4553, 4554, 4555, 4556, 4557, 4558, 4559, 4560, 4561, 4562, 4563, 4564, 4565, 4566, 4567, 4568, 4569, 4570, 4571, 4572, 4573, 4574, 4575, 4576, 4577, 4578, 4579, 4580, 4581, 4582, 4583, 4584, 4585, 4586, 4587, 4588, 4589, 4590, 4591, 4592, 4593, 4594, 4595, 4596, 4597, 4598, 4599, 4600, 4601, 4602, 4603, 4604, 4605, 4606, 4607, 4608, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4626, 4627, 4628, 4629, 4630, 4631, 4632, 4633, 4634, 4635, 4636, 4637, 4638, 4639, 4640, 4641, 4642, 4643, 4644, 4645, 4646, 4647, 4648, 4649, 4650, 4651, 4652, 4653, 4654, 4655, 4656, 4657, 4658, 4659, 4660, 4661, 4662, 4663, 4664, 4665, 4666, 4667, 4668, 4669, 4670, 4671, 4672, 4673, 4674, 4675, 4676, 4677, 4678, 4679, 4680, 4681, 4682, 4683, 4684, 4685, 4686, 4687, 4688, 4689, 4690, 4691, 4692, 4693, 4694, 4695, 4696, 4697, 4698, 4699, 4700, 4701, 4702, 4703, 4704, 4705, 4706, 4707, 4708, 4709, 4710, 4711, 4712, 4713, 4714, 4715, 4716, 4717, 4718, 4719, 4720, 4721, 4722, 4723, 4724, 4725, 4726, 4727, 4728, 4729, 4730, 4731, 4732, 4733, 4734, 4735, 4736, 4737, 4738, 4739, 4740, 4741, 4742, 4743, 4744, 4745, 4746, 4747, 4748, 4749, 4750, 4751, 4752, 4753, 4754, 4755, 4756, 4757, 4758, 4759, 4760, 4761, 4762, 4763, 4764, 4765, 4766, 4767, 4768, 4769, 4770, 4771, 4772, 4773, 4774, 4775, 4776, 4777, 4778, 4779, 4780, 4781, 4782, 4783, 4784, 4785, 4786, 4787, 4788, 4789, 4790, 4791, 4792, 4793, 4794, 4795, 4796, 4797, 4798, 4799, 4800, 4801, 4802, 4803, 4804, 4805, 4806, 4807, 4808, 4809, 4810, 4811, 4812, 4813, 4814, 4815, 4816, 4817, 4818, 4819, 4820, 4821, 4822, 4823, 4824, 4825, 4826, 4827, 4828, 4829, 4830, 4831, 4832, 4833, 4834, 4835, 4836, 4837, 4838, 4839, 4840, 4841, 4842, 4843, 4844, 4845, 4846, 4847, 4848, 4849, 4850, 4851, 4852, 4853, 4854, 4855, 4856, 4857, 4858, 4859, 4860, 4861, 4862, 4863, 4864, 4865, 4866, 4867, 4868, 4869, 4870, 4871, 4872, 4873, 4874, 4875, 4876, 4877, 4878, 4879, 4880, 4881, 4882, 4883, 4884, 4885, 4886, 4887, 4888, 4889, 4890, 4891, 4892, 4893, 4894, 4895, 4896, 4897, 4898, 4899, 4900, 4901, 4902, 4903, 4904, 4905, 4906, 4907, 4908, 4909, 4910, 4911, 4912, 4913, 4914, 4915, 4916, 4917, 4918, 4919, 4920, 4921, 4922, 4923, 4924, 4925, 4926, 4927, 4928, 4929, 4930, 4931, 4932, 4933, 4934, 4935, 4936, 4937, 4938, 4939, 4940, 4941, 4942, 4943, 4944, 4945, 4946, 4947, 4948, 4949, 4950, 4951, 4952, 4953, 4954, 4955, 4956, 4957, 4958, 4959, 4960, 4961, 4962, 4963, 4964, 4965, 4966, 4967, 4968, 4969, 4970, 4971, 4972, 4973, 4974, 4975, 4976, 4977, 4978, 4979, 4980, 4981, 4982, 4983, 4984, 4985, 4986, 4987, 4988, 4989, 4990, 4991, 4992, 4993, 4994, 4995, 4996, 4997, 4998, 4999, 5000, 5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008, 5009, 5010, 5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5019, 5020, 5021, 5022, 5023, 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, 5032, 5033, 5034, 5035, 5036, 5037, 5038, 5039, 5040, 5041, 5042, 5043, 5044, 5045, 5046, 5047, 5048, 5049, 5050, 5051, 5052, 5053, 5054, 5055, 5056, 5057, 5058, 5059, 5060, 5061, 5062, 5063, 5064, 5065, 5066, 5067, 5068, 5069, 5070, 5071, 5072, 5073, 5074, 5075, 5076, 5077, 5078, 5079, 5080, 5081, 5082, 5083, 5084, 5085, 5086, 5087, 5088, 5089, 5090, 5091, 5092, 5093, 5094, 5095, 5096, 5097, 5098, 5099, 5100, 5101, 5102, 5103, 5104, 5105, 5106, 5107, 5108, 5109, 5110, 5111, 5112, 5113, 5114, 5115, 5116, 5117, 5118, 5119, 5120, 5121, 5122, 5123, 5124, 5125, 5126, 5127, 5128, 5129, 5130, 5131, 5132, 5133, 5134, 5135, 5136, 5137, 5138, 5139, 5140, 5141, 5142, 5143, 5144, 5145, 5146, 5147, 5148, 5149, 5150, 5151, 5152, 5153, 5154, 5155, 5156, 5157, 5158, 5159, 5160, 5161, 5162, 5163, 5164, 5165, 5166, 5167, 5168, 5169, 5170, 5171, 5172, 5173, 5174, 5175, 5176, 5177, 5178, 5179, 5180, 5181, 5182, 5183, 5184, 5185, 5186, 5187, 5188, 5189, 5190, 5191, 5192, 5193, 5194, 5195, 5196, 5197, 5198, 5199, 5200, 5201, 5202, 5203, 5204, 5205, 5206, 5207, 5208, 5209, 5210, 5211, 5212, 5213, 5214, 5215, 5216, 5217, 5218, 5219, 5220, 5221, 5222, 5223, 5224, 5225, 5226, 5227, 5228, 5229, 5230, 5231, 5232, 5233, 5234, 5235, 5236, 5237, 5238, 5239, 5240, 5241, 5242, 5243, 5244, 5245, 5246, 5247, 5248, 5249, 5250, 5251, 5252, 5253, 5254, 5255, 5256, 5257, 5258, 5259, 5260, 5261, 5262, 5263, 5264, 5265, 5266, 5267, 5268, 5269, 5270, 5271, 5272, 5273, 5274, 5275, 5276, 5277, 5278, 5279, 5280, 5281, 5282, 5283, 5284, 5285, 5286, 5287, 5288, 5289, 5290, 5291, 5292, 5293, 5294, 5295, 5296, 5297, 5298, 5299, 5300, 5301, 5302, 5303, 5304, 5305, 5306, 5307, 5308, 5309, 5310, 5311, 5312, 5313, 5314, 5315, 5316, 5317, 5318, 5319, 5320, 5321, 5322, 5323, 5324, 5325, 5326, 5327, 5328, 5329, 5330, 5331, 5332, 5333, 5334, 5335, 5336, 5337, 5338, 5339, 5340, 5341, 5342, 5343, 5344, 5345, 5346, 5347, 5348, 5349, 5350, 5351, 5352, 5353, 5354, 5355, 5356, 5357, 5358, 5359, 5360, 5361, 5362, 5363, 5364, 5365, 5366, 5367, 5368, 5369, 5370, 5371, 5372, 5373, 5374, 5375, 5376, 5377, 5378, 5379, 5380, 5381, 5382, 5383, 5384, 5385, 5386, 5387, 5388, 5389, 5390, 5391, 5392, 5393, 5394, 5395, 5396, 5397, 5398, 5399, 5400, 5401, 5402, 5403, 5404, 5405, 5406, 5407, 5408, 5409, 5410, 5411, 5412, 5413, 5414, 5415, 5416, 5417, 5418, 5419, 5420, 5421, 5422, 5423, 5424, 5425, 5426, 5427, 5428, 5429, 5430, 5431, 5432, 5433, 5434, 5435, 5436, 5437, 5438, 5439, 5440, 5441, 5442, 5443, 5444, 5445, 5446, 5447, 5448, 5449, 5450, 5451, 5452, 5453, 5454, 5455, 5456, 5457, 5458, 5459, 5460, 5461, 5462, 5463, 5464, 5465, 5466, 5467, 5468, 5469, 5470, 5471, 5472, 5473, 5474, 5475, 5476, 5477, 5478, 5479, 5480, 5481, 5482, 5483, 5484, 5485, 5486, 5487, 5488, 5489, 5490, 5491, 5492, 5493, 5494, 5495, 5496, 5497, 5498, 5499, 5500, 5501, 5502, 5503, 5504, 5505, 5506, 5507, 5508, 5509, 5510, 5511, 5512, 5513, 5514, 5515, 5516, 5517, 5518, 5519, 5520, 5521, 5522, 5523, 5524, 5525, 5526, 5527, 5528, 5529, 5530, 5531, 5532, 5533, 5534, 5535, 5536, 5537, 5538, 5539, 5540, 5541, 5542, 5543, 5544, 5545, 5546, 5547, 5548, 5549, 5550, 5551, 5552, 5553, 5554, 5555, 5556, 5557, 5558, 5559, 5560, 5561, 5562, 5563, 5564, 5565, 5566, 5567, 5568, 5569, 5570, 5571, 5572, 5573, 5574, 5575, 5576, 5577, 5578, 5579, 5580, 5581, 5582, 5583, 5584, 5585, 5586, 5587, 5588, 5589, 5590, 5591, 5592, 5593, 5594, 5595, 5596, 5597, 5598, 5599, 5600, 5601, 5602, 5603, 5604, 5605, 5606, 5607, 5608, 5609, 5610, 5611, 5612, 5613, 5614, 5615, 5616, 5617, 5618, 5619, 5620, 5621, 5622, 5623, 5624, 5625, 5626, 5627, 5628, 5629, 5630, 5631, 5632, 5633, 5634, 5635, 5636, 5637, 5638, 5639, 5640, 5641, 5642, 5643, 5644, 5645, 5646, 5647, 5648, 5649, 5650, 5651, 5652, 5653, 5654, 5655, 5656, 5657, 5658, 5659, 5660, 5661, 5662, 5663, 5664, 5665, 5666, 5667, 5668, 5669, 5670, 5671, 5672, 5673, 5674, 5675, 5676, 5677, 5678, 5679, 5680, 5681, 5682, 5683, 5684, 5685, 5686, 5687, 5688, 5689, 5690, 5691, 5692, 5693, 5694, 5695, 5696, 5697, 5698, 5699, 5700, 5701, 5702, 5703, 5704, 5705, 5706, 5707, 5708, 5709, 5710, 5711, 5712, 5713, 5714, 5715, 5716, 5717, 5718, 5719, 5720, 5721, 5722, 5723, 5724, 5725, 5726, 5727, 5728, 5729, 5730, 5731, 5732, 5733, 5734, 5735, 5736, 5737, 5738, 5739, 5740, 5741, 5742, 5743, 5744, 5745, 5746, 5747, 5748, 5749, 5750, 5751, 5752, 5753, 5754, 5755, 5756, 5757, 5758, 5759, 5760, 5761, 5762, 5763, 5764, 5765, 5766, 5767, 5768, 5769, 5770, 5771, 5772, 5773, 5774, 5775, 5776, 5777, 5778, 5779, 5780, 5781, 5782, 5783, 5784, 5785, 5786, 5787, 5788, 5789, 5790, 5791, 5792, 5793, 5794, 5795, 5796, 5797, 5798, 5799, 5800, 5801, 5802, 5803, 5804, 5805, 5806, 5807, 5808, 5809, 5810, 5811, 5812, 5813, 5814, 5815, 5816, 5817, 5818, 5819, 5820, 5821, 5822, 5823, 5824, 5825, 5826, 5827, 5828, 5829, 5830, 5831, 5832, 5833, 5834, 5835, 5836, 5837, 5838, 5839, 5840, 5841, 5842, 5843, 5844, 5845, 5846, 5847, 5848, 5849, 5850, 5851, 5852, 5853, 5854, 5855, 5856, 5857, 5858, 5859, 5860, 5861, 5862, 5863, 5864, 5865, 5866, 5867, 5868, 5869, 5870, 5871, 5872, 5873, 5874, 5875, 5876, 5877, 5878, 5879, 5880, 5881, 5882, 5883, 5884, 5885, 5886, 5887, 5888, 5889, 5890, 5891, 5892, 5893, 5894, 5895, 5896, 5897, 5898, 5899, 5900, 5901, 5902, 5903, 5904, 5905, 5906, 5907, 5908, 5909, 5910, 5911, 5912, 5913, 5914, 5915, 5916, 5917, 5918, 5919, 5920, 5921, 5922, 5923, 5924, 5925, 5926, 5927, 5928, 5929, 5930, 5931, 5932, 5933, 5934, 5935, 5936, 5937, 5938, 5939, 5940, 5941, 5942, 5943, 5944, 5945, 5946, 5947, 5948, 5949, 5950, 5951, 5952, 5953, 5954, 5955, 5956, 5957, 5958, 5959, 5960, 5961, 5962, 5963, 5964, 5965, 5966, 5967, 5968, 5969, 5970, 5971, 5972, 5973, 5974, 5975, 5976, 5977, 5978, 5979, 5980, 5981, 5982, 5983, 5984, 5985, 5986, 5987, 5988, 5989, 5990, 5991, 5992, 5993, 5994, 5995, 5996, 5997, 5998, 5999, 6000, 6001, 6002, 6003, 6004, 6005, 6006, 6007, 6008, 6009, 6010, 6011, 6012, 6013, 6014, 6015, 6016, 6017, 6018, 6019, 6020, 6021, 6022, 6023, 6024, 6025, 6026, 6027, 6028, 6029, 6030, 6031, 6032, 6033, 6034, 6035, 6036, 6037, 6038, 6039, 6040, 6041, 6042, 6043, 6044, 6045, 6046, 6047, 6048, 6049, 6050, 6051, 6052, 6053, 6054, 6055, 6056, 6057, 6058, 6059, 6060, 6061, 6062, 6063, 6064, 6065, 6066, 6067, 6068, 6069, 6070, 6071, 6072, 6073, 6074, 6075, 6076, 6077, 6078, 6079, 6080, 6081, 6082, 6083, 6084, 6085, 6086, 6087, 6088, 6089, 6090, 6091, 6092, 6093, 6094, 6095, 6096, 6097, 6098, 6099, 6100, 6101, 6102, 6103, 6104, 6105, 6106, 6107, 6108, 6109, 6110, 6111, 6112, 6113, 6114, 6115, 6116, 6117, 6118, 6119, 6120, 6121, 6122, 6123, 6124, 6125, 6126, 6127, 6128, 6129, 6130, 6131, 6132, 6133, 6134, 6135, 6136, 6137, 6138, 6139, 6140, 6141, 6142, 6143, 6144, 6145, 6146, 6147, 6148, 6149, 6150, 6151, 6152, 6153, 6154, 6155, 6156, 6157, 6158, 6159, 6160, 6161, 6162, 6163, 6164, 6165, 6166, 6167, 6168, 6169, 6170, 6171, 6172, 6173, 6174, 6175, 6176, 6177, 6178, 6179, 6180, 6181, 6182, 6183, 6184, 6185, 6186, 6187, 6188, 6189, 6190, 6191, 6192, 6193, 6194, 6195, 6196, 6197, 6198, 6199, 6200, 6201, 6202, 6203, 6204, 6205, 6206, 6207, 6208, 6209, 6210, 6211, 6212, 6213, 6214, 6215, 6216, 6217, 6218, 6219, 6220, 6221, 6222, 6223, 6224, 6225, 6226, 6227, 6228, 6229, 6230, 6231, 6232, 6233, 6234, 6235, 6236, 6237, 6238, 6239, 6240, 6241, 6242, 6243, 6244, 6245, 6246, 6247, 6248, 6249, 6250, 6251, 6252, 6253, 6254, 6255, 6256, 6257, 6258, 6259, 6260, 6261, 6262, 6263, 6264, 6265, 6266, 6267, 6268, 6269, 6270, 6271, 6272, 6273, 6274, 6275, 6276, 6277, 6278, 6279, 6280, 6281, 6282, 6283, 6284, 6285, 6286, 6287, 6288, 6289, 6290, 6291, 6292, 6293, 6294, 6295, 6296, 6297, 6298, 6299, 6300, 6301, 6302, 6303, 6304, 6305, 6306, 6307, 6308, 6309, 6310, 6311, 6312, 6313, 6314, 6315, 6316, 6317, 6318, 6319, 6320, 6321, 6322, 6323, 6324, 6325, 6326, 6327, 6328, 6329, 6330, 6331, 6332, 6333, 6334, 6335, 6336, 6337, 6338, 6339, 6340, 6341, 6342, 6343, 6344, 6345, 6346, 6347, 6348, 6349, 6350, 6351, 6352, 6353, 6354, 6355, 6356, 6357, 6358, 6359, 6360, 6361, 6362, 6363, 6364, 6365, 6366, 6367, 6368, 6369, 6370, 6371, 6372, 6373, 6374, 6375, 6376, 6377, 6378, 6379, 6380, 6381, 6382, 6383, 6384, 6385, 6386, 6387, 6388, 6389, 6390, 6391, 6392, 6393, 6394, 6395, 6396, 6397, 6398, 6399, 6400, 6401, 6402, 6403, 6404, 6405, 6406, 6407, 6408, 6409, 6410, 6411, 6412, 6413, 6414, 6415, 6416, 6417, 6418, 6419, 6420, 6421, 6422, 6423, 6424, 6425, 6426, 6427, 6428, 6429, 6430, 6431, 6432, 6433, 6434, 6435, 6436, 6437, 6438, 6439, 6440, 6441, 6442, 6443, 6444, 6445, 6446, 6447, 6448, 6449, 6450, 6451, 6452, 6453, 6454, 6455, 6456, 6457, 6458, 6459, 6460, 6461, 6462, 6463, 6464, 6465, 6466, 6467, 6468, 6469, 6470, 6471, 6472, 6473, 6474, 6475, 6476, 6477, 6478, 6479, 6480, 6481, 6482, 6483, 6484, 6485, 6486, 6487, 6488, 6489, 6490, 6491, 6492, 6493, 6494, 6495, 6496, 6497, 6498, 6499, 6500, 6501, 6502, 6503, 6504, 6505, 6506, 6507, 6508, 6509, 6510, 6511, 6512, 6513, 6514, 6515, 6516, 6517, 6518, 6519, 6520, 6521, 6522, 6523, 6524, 6525, 6526, 6527, 6528, 6529, 6530, 6531, 6532, 6533, 6534, 6535, 6536, 6537, 6538, 6539, 6540, 6541, 6542, 6543, 6544, 6545, 6546, 6547, 6548, 6549, 6550, 6551, 6552, 6553, 6554, 6555, 6556, 6557, 6558, 6559, 6560, 6561, 6562, 6563, 6564, 6565, 6566, 6567, 6568, 6569, 6570, 6571, 6572, 6573, 6574, 6575, 6576, 6577, 6578, 6579, 6580, 6581, 6582, 6583, 6584, 6585, 6586, 6587, 6588, 6589, 6590, 6591, 6592, 6593, 6594, 6595, 6596, 6597, 6598, 6599, 6600, 6601, 6602, 6603, 6604, 6605, 6606, 6607, 6608, 6609, 6610, 6611, 6612, 6613, 6614, 6615, 6616, 6617, 6618, 6619, 6620, 6621, 6622, 6623, 6624, 6625, 6626, 6627, 6628, 6629, 6630, 6631, 6632, 6633, 6634, 6635, 6636, 6637, 6638, 6639, 6640, 6641, 6642, 6643, 6644, 6645, 6646, 6647, 6648, 6649, 6650, 6651, 6652, 6653, 6654, 6655, 6656, 6657, 6658, 6659, 6660, 6661, 6662, 6663, 6664, 6665, 6666, 6667, 6668, 6669, 6670, 6671, 6672, 6673, 6674, 6675, 6676, 6677, 6678, 6679, 6680, 6681, 6682, 6683, 6684, 6685, 6686, 6687, 6688, 6689, 6690, 6691, 6692, 6693, 6694, 6695, 6696, 6697, 6698, 6699, 6700, 6701, 6702, 6703, 6704, 6705, 6706, 6707, 6708, 6709, 6710, 6711, 6712, 6713, 6714, 6715, 6716, 6717, 6718, 6719, 6720, 6721, 6722, 6723, 6724, 6725, 6726, 6727, 6728, 6729, 6730, 6731, 6732, 6733, 6734, 6735, 6736, 6737, 6738, 6739, 6740, 6741, 6742, 6743, 6744, 6745, 6746, 6747, 6748, 6749, 6750, 6751, 6752, 6753, 6754, 6755, 6756, 6757, 6758, 6759, 6760, 6761, 6762, 6763, 6764, 6765, 6766, 6767, 6768, 6769, 6770, 6771, 6772, 6773, 6774, 6775, 6776, 6777, 6778, 6779, 6780, 6781, 6782, 6783, 6784, 6785, 6786, 6787, 6788, 6789, 6790, 6791, 6792, 6793, 6794, 6795, 6796, 6797, 6798, 6799, 6800, 6801, 6802, 6803, 6804, 6805, 6806, 6807, 6808, 6809, 6810, 6811, 6812, 6813, 6814, 6815, 6816, 6817, 6818, 6819, 6820, 6821, 6822, 6823, 6824, 6825, 6826, 6827, 6828, 6829, 6830, 6831, 6832, 6833, 6834, 6835, 6836, 6837, 6838, 6839, 6840, 6841, 6842, 6843, 6844, 6845, 6846, 6847, 6848, 6849, 6850, 6851, 6852, 6853, 6854, 6855, 6856, 6857, 6858, 6859, 6860, 6861, 6862, 6863, 6864, 6865, 6866, 6867, 6868, 6869, 6870, 6871, 6872, 6873, 6874, 6875, 6876, 6877, 6878, 6879, 6880, 6881, 6882, 6883, 6884, 6885, 6886, 6887, 6888, 6889, 6890, 6891, 6892, 6893, 6894, 6895, 6896, 6897, 6898, 6899, 6900, 6901, 6902, 6903, 6904, 6905, 6906, 6907, 6908, 6909, 6910, 6911, 6912, 6913, 6914, 6915, 6916, 6917, 6918, 6919, 6920, 6921, 6922, 6923, 6924, 6925, 6926, 6927, 6928, 6929, 6930, 6931, 6932, 6933, 6934, 6935, 6936, 6937, 6938, 6939, 6940, 6941, 6942, 6943, 6944, 6945, 6946, 6947, 6948, 6949, 6950, 6951, 6952, 6953, 6954, 6955, 6956, 6957, 6958, 6959, 6960, 6961, 6962, 6963, 6964, 6965, 6966, 6967, 6968, 6969, 6970, 6971, 6972, 6973, 6974, 6975, 6976, 6977, 6978, 6979, 6980, 6981, 6982, 6983, 6984, 6985, 6986, 6987, 6988, 6989, 6990, 6991, 6992, 6993, 6994, 6995, 6996, 6997, 6998, 6999, 7000, 7001, 7002, 7003, 7004, 7005, 7006, 7007, 7008, 7009, 7010, 7011, 7012, 7013, 7014, 7015, 7016, 7017, 7018, 7019, 7020, 7021, 7022, 7023, 7024, 7025, 7026, 7027, 7028, 7029, 7030, 7031, 7032, 7033, 7034, 7035, 7036, 7037, 7038, 7039, 7040, 7041, 7042, 7043, 7044, 7045, 7046, 7047, 7048, 7049, 7050, 7051, 7052, 7053, 7054, 7055, 7056, 7057, 7058, 7059, 7060, 7061, 7062, 7063, 7064, 7065, 7066, 7067, 7068, 7069, 7070, 7071, 7072, 7073, 7074, 7075, 7076, 7077, 7078, 7079, 7080, 7081, 7082, 7083, 7084, 7085, 7086, 7087, 7088, 7089, 7090, 7091, 7092, 7093, 7094, 7095, 7096, 7097, 7098, 7099, 7100, 7101, 7102, 7103, 7104, 7105, 7106, 7107, 7108, 7109, 7110, 7111, 7112, 7113, 7114, 7115, 7116, 7117, 7118, 7119, 7120, 7121, 7122, 7123, 7124, 7125, 7126, 7127, 7128, 7129, 7130, 7131, 7132, 7133, 7134, 7135, 7136, 7137, 7138, 7139, 7140, 7141, 7142, 7143, 7144, 7145, 7146, 7147, 7148, 7149, 7150, 7151, 7152, 7153, 7154, 7155, 7156, 7157, 7158, 7159, 7160, 7161, 7162, 7163, 7164, 7165, 7166, 7167, 7168, 7169, 7170, 7171, 7172, 7173, 7174, 7175, 7176, 7177, 7178, 7179, 7180, 7181, 7182, 7183, 7184, 7185, 7186, 7187, 7188, 7189, 7190, 7191, 7192, 7193, 7194, 7195, 7196, 7197, 7198, 7199, 7200, 7201, 7202, 7203, 7204, 7205, 7206, 7207, 7208, 7209, 7210, 7211, 7212, 7213, 7214, 7215, 7216, 7217, 7218, 7219, 7220, 7221, 7222, 7223, 7224, 7225, 7226, 7227, 7228, 7229, 7230, 7231, 7232, 7233, 7234, 7235, 7236, 7237, 7238, 7239, 7240, 7241, 7242, 7243, 7244, 7245, 7246, 7247, 7248, 7249, 7250, 7251, 7252, 7253, 7254, 7255, 7256, 7257, 7258, 7259, 7260, 7261, 7262, 7263, 7264, 7265, 7266, 7267, 7268, 7269, 7270, 7271, 7272, 7273, 7274, 7275, 7276, 7277, 7278, 7279, 7280, 7281, 7282, 7283, 7284, 7285, 7286, 7287, 7288, 7289, 7290, 7291, 7292, 7293, 7294, 7295, 7296, 7297, 7298, 7299, 7300, 7301, 7302, 7303, 7304, 7305, 7306, 7307, 7308, 7309, 7310, 7311, 7312, 7313, 7314, 7315, 7316, 7317, 7318, 7319, 7320, 7321, 7322, 7323, 7324, 7325, 7326, 7327, 7328, 7329, 7330, 7331, 7332, 7333, 7334, 7335, 7336, 7337, 7338, 7339, 7340, 7341, 7342, 7343, 7344, 7345, 7346, 7347, 7348, 7349, 7350, 7351, 7352, 7353, 7354, 7355, 7356, 7357, 7358, 7359, 7360, 7361, 7362, 7363, 7364, 7365, 7366, 7367, 7368, 7369, 7370, 7371, 7372, 7373, 7374, 7375, 7376, 7377, 7378, 7379, 7380, 7381, 7382, 7383, 7384, 7385, 7386, 7387, 7388, 7389, 7390, 7391, 7392, 7393, 7394, 7395, 7396, 7397, 7398, 7399, 7400, 7401, 7402, 7403, 7404, 7405, 7406, 7407, 7408, 7409, 7410, 7411, 7412, 7413, 7414, 7415, 7416, 7417, 7418, 7419, 7420, 7421, 7422, 7423, 7424, 7425, 7426, 7427, 7428, 7429, 7430, 7431, 7432, 7433, 7434, 7435, 7436, 7437, 7438, 7439, 7440, 7441, 7442, 7443, 7444, 7445, 7446, 7447, 7448, 7449, 7450, 7451, 7452, 7453, 7454, 7455, 7456, 7457, 7458, 7459, 7460, 7461, 7462, 7463, 7464, 7465, 7466, 7467, 7468, 7469, 7470, 7471, 7472, 7473, 7474, 7475, 7476, 7477, 7478, 7479, 7480, 7481, 7482, 7483, 7484, 7485, 7486, 7487, 7488, 7489, 7490, 7491, 7492, 7493, 7494, 7495, 7496, 7497, 7498, 7499, 7500, 7501, 7502, 7503, 7504, 7505, 7506, 7507, 7508, 7509, 7510, 7511, 7512, 7513, 7514, 7515, 7516, 7517, 7518, 7519, 7520, 7521, 7522, 7523, 7524, 7525, 7526, 7527, 7528, 7529, 7530, 7531, 7532, 7533, 7534, 7535, 7536, 7537, 7538, 7539, 7540, 7541, 7542, 7543, 7544, 7545, 7546, 7547, 7548, 7549, 7550, 7551, 7552, 7553, 7554, 7555, 7556, 7557, 7558, 7559, 7560, 7561, 7562, 7563, 7564, 7565, 7566, 7567, 7568, 7569, 7570, 7571, 7572, 7573, 7574, 7575, 7576, 7577, 7578, 7579, 7580, 7581, 7582, 7583, 7584, 7585, 7586, 7587, 7588, 7589, 7590, 7591, 7592, 7593, 7594, 7595, 7596, 7597, 7598, 7599, 7600, 7601, 7602, 7603, 7604, 7605, 7606, 7607, 7608, 7609, 7610, 7611, 7612, 7613, 7614, 7615, 7616, 7617, 7618, 7619, 7620, 7621, 7622, 7623, 7624, 7625, 7626, 7627, 7628, 7629, 7630, 7631, 7632, 7633, 7634, 7635, 7636, 7637, 7638, 7639, 7640, 7641, 7642, 7643, 7644, 7645, 7646, 7647, 7648, 7649, 7650, 7651, 7652, 7653, 7654, 7655, 7656, 7657, 7658, 7659, 7660, 7661, 7662, 7663, 7664, 7665, 7666, 7667, 7668, 7669, 7670, 7671, 7672, 7673, 7674, 7675, 7676, 7677, 7678, 7679, 7680, 7681, 7682, 7683, 7684, 7685, 7686, 7687, 7688, 7689, 7690, 7691, 7692, 7693, 7694, 7695, 7696, 7697, 7698, 7699, 7700, 7701, 7702, 7703, 7704, 7705, 7706, 7707, 7708, 7709, 7710, 7711, 7712, 7713, 7714, 7715, 7716, 7717, 7718, 7719, 7720, 7721, 7722, 7723, 7724, 7725, 7726, 7727, 7728, 7729, 7730, 7731, 7732, 7733, 7734, 7735, 7736, 7737, 7738, 7739, 7740, 7741, 7742, 7743, 7744, 7745, 7746, 7747, 7748, 7749, 7750, 7751, 7752, 7753, 7754, 7755, 7756, 7757, 7758, 7759, 7760, 7761, 7762, 7763, 7764, 7765, 7766, 7767, 7768, 7769, 7770, 7771, 7772, 7773, 7774, 7775, 7776, 7777, 7778, 7779, 7780, 7781, 7782, 7783, 7784, 7785, 7786, 7787, 7788, 7789, 7790, 7791, 7792, 7793, 7794, 7795, 7796, 7797, 7798, 7799, 7800, 7801, 7802, 7803, 7804, 7805, 7806, 7807, 7808, 7809, 7810, 7811, 7812, 7813, 7814, 7815, 7816, 7817, 7818, 7819, 7820, 7821, 7822, 7823, 7824, 7825, 7826, 7827, 7828, 7829, 7830, 7831, 7832, 7833, 7834, 7835, 7836, 7837, 7838, 7839, 7840, 7841, 7842, 7843, 7844, 7845, 7846, 7847, 7848, 7849, 7850, 7851, 7852, 7853, 7854, 7855, 7856, 7857, 7858, 7859, 7860, 7861, 7862, 7863, 7864, 7865, 7866, 7867, 7868, 7869, 7870, 7871, 7872, 7873, 7874, 7875, 7876, 7877, 7878, 7879, 7880, 7881, 7882, 7883, 7884, 7885, 7886, 7887, 7888, 7889, 7890, 7891, 7892, 7893, 7894, 7895, 7896, 7897, 7898, 7899, 7900, 7901, 7902, 7903, 7904, 7905, 7906, 7907, 7908, 7909, 7910, 7911, 7912, 7913, 7914, 7915, 7916, 7917, 7918, 7919, 7920, 7921, 7922, 7923, 7924, 7925, 7926, 7927, 7928, 7929, 7930, 7931, 7932, 7933, 7934, 7935, 7936, 7937, 7938, 7939, 7940, 7941, 7942, 7943, 7944, 7945, 7946, 7947, 7948, 7949, 7950, 7951, 7952, 7953, 7954, 7955, 7956, 7957, 7958, 7959, 7960, 7961, 7962, 7963, 7964, 7965, 7966, 7967, 7968, 7969, 7970, 7971, 7972, 7973, 7974, 7975, 7976, 7977, 7978, 7979, 7980, 7981, 7982, 7983, 7984, 7985, 7986, 7987, 7988, 7989, 7990, 7991, 7992, 7993, 7994, 7995, 7996, 7997, 7998, 7999, 8000, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 8011, 8012, 8013, 8014, 8015, 8016, 8017, 8018, 8019, 8020, 8021, 8022, 8023, 8024, 8025, 8026, 8027, 8028, 8029, 8030, 8031, 8032, 8033, 8034, 8035, 8036, 8037, 8038, 8039, 8040, 8041, 8042, 8043, 8044, 8045, 8046, 8047, 8048, 8049, 8050, 8051, 8052, 8053, 8054, 8055, 8056, 8057, 8058, 8059, 8060, 8061, 8062, 8063, 8064, 8065, 8066, 8067, 8068, 8069, 8070, 8071, 8072, 8073, 8074, 8075, 8076, 8077, 8078, 8079, 8080, 8081, 8082, 8083, 8084, 8085, 8086, 8087, 8088, 8089, 8090, 8091, 8092, 8093, 8094, 8095, 8096, 8097, 8098, 8099, 8100, 8101, 8102, 8103, 8104, 8105, 8106, 8107, 8108, 8109, 8110, 8111, 8112, 8113, 8114, 8115, 8116, 8117, 8118, 8119, 8120, 8121, 8122, 8123, 8124, 8125, 8126, 8127, 8128, 8129, 8130, 8131, 8132, 8133, 8134, 8135, 8136, 8137, 8138, 8139, 8140, 8141, 8142, 8143, 8144, 8145, 8146, 8147, 8148, 8149, 8150, 8151, 8152, 8153, 8154, 8155, 8156, 8157, 8158, 8159, 8160, 8161, 8162, 8163, 8164, 8165, 8166, 8167, 8168, 8169, 8170, 8171, 8172, 8173, 8174, 8175, 8176, 8177, 8178, 8179, 8180, 8181, 8182, 8183, 8184, 8185, 8186, 8187, 8188, 8189, 8190, 8191, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200, 8201, 8202, 8203, 8204, 8205, 8206, 8207, 8208, 8209, 8210, 8211, 8212, 8213, 8214, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8223, 8224, 8225, 8226, 8227, 8228, 8229, 8230, 8231, 8232, 8233, 8234, 8235, 8236, 8237, 8238, 8239, 8240, 8241, 8242, 8243, 8244, 8245, 8246, 8247, 8248, 8249, 8250, 8251, 8252, 8253, 8254, 8255, 8256, 8257, 8258, 8259, 8260, 8261, 8262, 8263, 8264, 8265, 8266, 8267, 8268, 8269, 8270, 8271, 8272, 8273, 8274, 8275, 8276, 8277, 8278, 8279, 8280, 8281, 8282, 8283, 8284, 8285, 8286, 8287, 8288, 8289, 8290, 8291, 8292, 8293, 8294, 8295, 8296, 8297, 8298, 8299, 8300, 8301, 8302, 8303, 8304, 8305, 8306, 8307, 8308, 8309, 8310, 8311, 8312, 8313, 8314, 8315, 8316, 8317, 8318, 8319, 8320, 8321, 8322, 8323, 8324, 8325, 8326, 8327, 8328, 8329, 8330, 8331, 8332, 8333, 8334, 8335, 8336, 8337, 8338, 8339, 8340, 8341, 8342, 8343, 8344, 8345, 8346, 8347, 8348, 8349, 8350, 8351, 8352, 8353, 8354, 8355, 8356, 8357, 8358, 8359, 8360, 8361, 8362, 8363, 8364, 8365, 8366, 8367, 8368, 8369, 8370, 8371, 8372, 8373, 8374, 8375, 8376, 8377, 8378, 8379, 8380, 8381, 8382, 8383, 8384, 8385, 8386, 8387, 8388, 8389, 8390, 8391, 8392, 8393, 8394, 8395, 8396, 8397, 8398, 8399, 8400, 8401, 8402, 8403, 8404, 8405, 8406, 8407, 8408, 8409, 8410, 8411, 8412, 8413, 8414, 8415, 8416, 8417, 8418, 8419, 8420, 8421, 8422, 8423, 8424, 8425, 8426, 8427, 8428, 8429, 8430, 8431, 8432, 8433, 8434, 8435, 8436, 8437, 8438, 8439, 8440, 8441, 8442, 8443, 8444, 8445, 8446, 8447, 8448, 8449, 8450, 8451, 8452, 8453, 8454, 8455, 8456, 8457, 8458, 8459, 8460, 8461, 8462, 8463, 8464, 8465, 8466, 8467, 8468, 8469, 8470, 8471, 8472, 8473, 8474, 8475, 8476, 8477, 8478, 8479, 8480, 8481, 8482, 8483, 8484, 8485, 8486, 8487, 8488, 8489, 8490, 8491, 8492, 8493, 8494, 8495, 8496, 8497, 8498, 8499, 8500, 8501, 8502, 8503, 8504, 8505, 8506, 8507, 8508, 8509, 8510, 8511, 8512, 8513, 8514, 8515, 8516, 8517, 8518, 8519, 8520, 8521, 8522, 8523, 8524, 8525, 8526, 8527, 8528, 8529, 8530, 8531, 8532, 8533, 8534, 8535, 8536, 8537, 8538, 8539, 8540, 8541, 8542, 8543, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, 8554, 8555, 8556, 8557, 8558, 8559, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, 8570, 8571, 8572, 8573, 8574, 8575, 8576, 8577, 8578, 8579, 8580, 8581, 8582, 8583, 8584, 8585, 8586, 8587, 8588, 8589, 8590, 8591, 8592, 8593, 8594, 8595, 8596, 8597, 8598, 8599, 8600, 8601, 8602, 8603, 8604, 8605, 8606, 8607, 8608, 8609, 8610, 8611, 8612, 8613, 8614, 8615, 8616, 8617, 8618, 8619, 8620, 8621, 8622, 8623, 8624, 8625, 8626, 8627, 8628, 8629, 8630, 8631, 8632, 8633, 8634, 8635, 8636, 8637, 8638, 8639, 8640, 8641, 8642, 8643, 8644, 8645, 8646, 8647, 8648, 8649, 8650, 8651, 8652, 8653, 8654, 8655, 8656, 8657, 8658, 8659, 8660, 8661, 8662, 8663, 8664, 8665, 8666, 8667, 8668, 8669, 8670, 8671, 8672, 8673, 8674, 8675, 8676, 8677, 8678, 8679, 8680, 8681, 8682, 8683, 8684, 8685, 8686, 8687, 8688, 8689, 8690, 8691, 8692, 8693, 8694, 8695, 8696, 8697, 8698, 8699, 8700, 8701, 8702, 8703, 8704, 8705, 8706, 8707, 8708, 8709, 8710, 8711, 8712, 8713, 8714, 8715, 8716, 8717, 8718, 8719, 8720, 8721, 8722, 8723, 8724, 8725, 8726, 8727, 8728, 8729, 8730, 8731, 8732, 8733, 8734, 8735, 8736, 8737, 8738, 8739, 8740, 8741, 8742, 8743, 8744, 8745, 8746, 8747, 8748, 8749, 8750, 8751, 8752, 8753, 8754, 8755, 8756, 8757, 8758, 8759, 8760, 8761, 8762, 8763, 8764, 8765, 8766, 8767, 8768, 8769, 8770, 8771, 8772, 8773, 8774, 8775, 8776, 8777, 8778, 8779, 8780, 8781, 8782, 8783, 8784, 8785, 8786, 8787, 8788, 8789, 8790, 8791, 8792, 8793, 8794, 8795, 8796, 8797, 8798, 8799, 8800, 8801, 8802, 8803, 8804, 8805, 8806, 8807, 8808, 8809, 8810, 8811, 8812, 8813, 8814, 8815, 8816, 8817, 8818, 8819, 8820, 8821, 8822, 8823, 8824, 8825, 8826, 8827, 8828, 8829, 8830, 8831, 8832, 8833, 8834, 8835, 8836, 8837, 8838, 8839, 8840, 8841, 8842, 8843, 8844, 8845, 8846, 8847, 8848, 8849, 8850, 8851, 8852, 8853, 8854, 8855, 8856, 8857, 8858, 8859, 8860, 8861, 8862, 8863, 8864, 8865, 8866, 8867, 8868, 8869, 8870, 8871, 8872, 8873, 8874, 8875, 8876, 8877, 8878, 8879, 8880, 8881, 8882, 8883, 8884, 8885, 8886, 8887, 8888, 8889, 8890, 8891, 8892, 8893, 8894, 8895, 8896, 8897, 8898, 8899, 8900, 8901, 8902, 8903, 8904, 8905, 8906, 8907, 8908, 8909, 8910, 8911, 8912, 8913, 8914, 8915, 8916, 8917, 8918, 8919, 8920, 8921, 8922, 8923, 8924, 8925, 8926, 8927, 8928, 8929, 8930, 8931, 8932, 8933, 8934, 8935, 8936, 8937, 8938, 8939, 8940, 8941, 8942, 8943, 8944, 8945, 8946, 8947, 8948, 8949, 8950, 8951, 8952, 8953, 8954, 8955, 8956, 8957, 8958, 8959, 8960, 8961, 8962, 8963, 8964, 8965, 8966, 8967, 8968, 8969, 8970, 8971, 8972, 8973, 8974, 8975, 8976, 8977, 8978, 8979, 8980, 8981, 8982, 8983, 8984, 8985, 8986, 8987, 8988, 8989, 8990, 8991, 8992, 8993, 8994, 8995, 8996, 8997, 8998, 8999, 9000, 9001, 9002, 9003, 9004, 9005, 9006, 9007, 9008, 9009, 9010, 9011, 9012, 9013, 9014, 9015, 9016, 9017, 9018, 9019, 9020, 9021, 9022, 9023, 9024, 9025, 9026, 9027, 9028, 9029, 9030, 9031, 9032, 9033, 9034, 9035, 9036, 9037, 9038, 9039, 9040, 9041, 9042, 9043, 9044, 9045, 9046, 9047, 9048, 9049, 9050, 9051, 9052, 9053, 9054, 9055, 9056, 9057, 9058, 9059, 9060, 9061, 9062, 9063, 9064, 9065, 9066, 9067, 9068, 9069, 9070, 9071, 9072, 9073, 9074, 9075, 9076, 9077, 9078, 9079, 9080, 9081, 9082, 9083, 9084, 9085, 9086, 9087, 9088, 9089, 9090, 9091, 9092, 9093, 9094, 9095, 9096, 9097, 9098, 9099, 9100, 9101, 9102, 9103, 9104, 9105, 9106, 9107, 9108, 9109, 9110, 9111, 9112, 9113, 9114, 9115, 9116, 9117, 9118, 9119, 9120, 9121, 9122, 9123, 9124, 9125, 9126, 9127, 9128, 9129, 9130, 9131, 9132, 9133, 9134, 9135, 9136, 9137, 9138, 9139, 9140, 9141, 9142, 9143, 9144, 9145, 9146, 9147, 9148, 9149, 9150, 9151, 9152, 9153, 9154, 9155, 9156, 9157, 9158, 9159, 9160, 9161, 9162, 9163, 9164, 9165, 9166, 9167, 9168, 9169, 9170, 9171, 9172, 9173, 9174, 9175, 9176, 9177, 9178, 9179, 9180, 9181, 9182, 9183, 9184, 9185, 9186, 9187, 9188, 9189, 9190, 9191, 9192, 9193, 9194, 9195, 9196, 9197, 9198, 9199, 9200, 9201, 9202, 9203, 9204, 9205, 9206, 9207, 9208, 9209, 9210, 9211, 9212, 9213, 9214, 9215, 9216, 9217, 9218, 9219, 9220, 9221, 9222, 9223, 9224, 9225, 9226, 9227, 9228, 9229, 9230, 9231, 9232, 9233, 9234, 9235, 9236, 9237, 9238, 9239, 9240, 9241, 9242, 9243, 9244, 9245, 9246, 9247, 9248, 9249, 9250, 9251, 9252, 9253, 9254, 9255, 9256, 9257, 9258, 9259, 9260, 9261, 9262, 9263, 9264, 9265, 9266, 9267, 9268, 9269, 9270, 9271, 9272, 9273, 9274, 9275, 9276, 9277, 9278, 9279, 9280, 9281, 9282, 9283, 9284, 9285, 9286, 9287, 9288, 9289, 9290, 9291, 9292, 9293, 9294, 9295, 9296, 9297, 9298, 9299, 9300, 9301, 9302, 9303, 9304, 9305, 9306, 9307, 9308, 9309, 9310, 9311, 9312, 9313, 9314, 9315, 9316, 9317, 9318, 9319, 9320, 9321, 9322, 9323, 9324, 9325, 9326, 9327, 9328, 9329, 9330, 9331, 9332, 9333, 9334, 9335, 9336, 9337, 9338, 9339, 9340, 9341, 9342, 9343, 9344, 9345, 9346, 9347, 9348, 9349, 9350, 9351, 9352, 9353, 9354, 9355, 9356, 9357, 9358, 9359, 9360, 9361, 9362, 9363, 9364, 9365, 9366, 9367, 9368, 9369, 9370, 9371, 9372, 9373, 9374, 9375, 9376, 9377, 9378, 9379, 9380, 9381, 9382, 9383, 9384, 9385, 9386, 9387, 9388, 9389, 9390, 9391, 9392, 9393, 9394, 9395, 9396, 9397, 9398, 9399, 9400, 9401, 9402, 9403, 9404, 9405, 9406, 9407, 9408, 9409, 9410, 9411, 9412, 9413, 9414, 9415, 9416, 9417, 9418, 9419, 9420, 9421, 9422, 9423, 9424, 9425, 9426, 9427, 9428, 9429, 9430, 9431, 9432, 9433, 9434, 9435, 9436, 9437, 9438, 9439, 9440, 9441, 9442, 9443, 9444, 9445, 9446, 9447, 9448, 9449, 9450, 9451, 9452, 9453, 9454, 9455, 9456, 9457, 9458, 9459, 9460, 9461, 9462, 9463, 9464, 9465, 9466, 9467, 9468, 9469, 9470, 9471, 9472, 9473, 9474, 9475, 9476, 9477, 9478, 9479, 9480, 9481, 9482, 9483, 9484, 9485, 9486, 9487, 9488, 9489, 9490, 9491, 9492, 9493, 9494, 9495, 9496, 9497, 9498, 9499, 9500, 9501, 9502, 9503, 9504, 9505, 9506, 9507, 9508, 9509, 9510, 9511, 9512, 9513, 9514, 9515, 9516, 9517, 9518, 9519, 9520, 9521, 9522, 9523, 9524, 9525, 9526, 9527, 9528, 9529, 9530, 9531, 9532, 9533, 9534, 9535, 9536, 9537, 9538, 9539, 9540, 9541, 9542, 9543, 9544, 9545, 9546, 9547, 9548, 9549, 9550, 9551, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9581, 9582, 9583, 9584, 9585, 9586, 9587, 9588, 9589, 9590, 9591, 9592, 9593, 9594, 9595, 9596, 9597, 9598, 9599, 9600, 9601, 9602, 9603, 9604, 9605, 9606, 9607, 9608, 9609, 9610, 9611, 9612, 9613, 9614, 9615, 9616, 9617, 9618, 9619, 9620, 9621, 9622, 9623, 9624, 9625, 9626, 9627, 9628, 9629, 9630, 9631, 9632, 9633, 9634, 9635, 9636, 9637, 9638, 9639, 9640, 9641, 9642, 9643, 9644, 9645, 9646, 9647, 9648, 9649, 9650, 9651, 9652, 9653, 9654, 9655, 9656, 9657, 9658, 9659, 9660, 9661, 9662, 9663, 9664, 9665, 9666, 9667, 9668, 9669, 9670, 9671, 9672, 9673, 9674, 9675, 9676, 9677, 9678, 9679, 9680, 9681, 9682, 9683, 9684, 9685, 9686, 9687, 9688, 9689, 9690, 9691, 9692, 9693, 9694, 9695, 9696, 9697, 9698, 9699, 9700, 9701, 9702, 9703, 9704, 9705, 9706, 9707, 9708, 9709, 9710, 9711, 9712, 9713, 9714, 9715, 9716, 9717, 9718, 9719, 9720, 9721, 9722, 9723, 9724, 9725, 9726, 9727, 9728, 9729, 9730, 9731, 9732, 9733, 9734, 9735, 9736, 9737, 9738, 9739, 9740, 9741, 9742, 9743, 9744, 9745, 9746, 9747, 9748, 9749, 9750, 9751, 9752, 9753, 9754, 9755, 9756, 9757, 9758, 9759, 9760, 9761, 9762, 9763, 9764, 9765, 9766, 9767, 9768, 9769, 9770, 9771, 9772, 9773, 9774, 9775, 9776, 9777, 9778, 9779, 9780, 9781, 9782, 9783, 9784, 9785, 9786, 9787, 9788, 9789, 9790, 9791, 9792, 9793, 9794, 9795, 9796, 9797, 9798, 9799, 9800, 9801, 9802, 9803, 9804, 9805, 9806, 9807, 9808, 9809, 9810, 9811, 9812, 9813, 9814, 9815, 9816, 9817, 9818, 9819, 9820, 9821, 9822, 9823, 9824, 9825, 9826, 9827, 9828, 9829, 9830, 9831, 9832, 9833, 9834, 9835, 9836, 9837, 9838, 9839, 9840, 9841, 9842, 9843, 9844, 9845, 9846, 9847, 9848, 9849, 9850, 9851, 9852, 9853, 9854, 9855, 9856, 9857, 9858, 9859, 9860, 9861, 9862, 9863, 9864, 9865, 9866, 9867, 9868, 9869, 9870, 9871, 9872, 9873, 9874, 9875, 9876, 9877, 9878, 9879, 9880, 9881, 9882, 9883, 9884, 9885, 9886, 9887, 9888, 9889, 9890, 9891, 9892, 9893, 9894, 9895, 9896, 9897, 9898, 9899, 9900, 9901, 9902, 9903, 9904, 9905, 9906, 9907, 9908, 9909, 9910, 9911, 9912, 9913, 9914, 9915, 9916, 9917, 9918, 9919, 9920, 9921, 9922, 9923, 9924, 9925, 9926, 9927, 9928, 9929, 9930, 9931, 9932, 9933, 9934, 9935, 9936, 9937, 9938, 9939, 9940, 9941, 9942, 9943, 9944, 9945, 9946, 9947, 9948, 9949, 9950, 9951, 9952, 9953, 9954, 9955, 9956, 9957, 9958, 9959, 9960, 9961, 9962, 9963, 9964, 9965, 9966, 9967, 9968, 9969, 9970, 9971, 9972, 9973, 9974, 9975, 9976, 9977, 9978, 9979, 9980, 9981, 9982, 9983, 9984, 9985, 9986, 9987, 9988, 9989, 9990, 9991, 9992, 9993, 9994, 9995, 9996, 9997, 9998, 9999]\n" + ] + }, { "data": { "text/plain": [ "48" ] }, - "execution_count": 18, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, @@ -1071,17 +1080,17 @@ "80024" ] }, - "execution_count": 18, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ - "90088" + "80040" ] }, - "execution_count": 18, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -1094,6 +1103,9 @@ "a = range(n)\n", "b = tuple(a) # 把 a 转换成元组\n", "c = list(a) # 把 a 转换成列表\n", + "print(a)\n", + "print(b)\n", + "print(c)\n", "a.__sizeof__()\n", "b.__sizeof__()\n", "c.__sizeof__()" @@ -1428,7 +1440,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "

" ] @@ -2670,7 +2682,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.3" + "version": "3.9.21" }, "toc-autonumbering": true }, diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.7\346\225\260\346\215\256\345\256\271\345\231\250.md" "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.7\346\225\260\346\215\256\345\256\271\345\231\250.md" index 500bef10f..04c52be0d 100644 --- "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.7\346\225\260\346\215\256\345\256\271\345\231\250.md" +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.7\346\225\260\346\215\256\345\256\271\345\231\250.md" @@ -1,2 +1,461 @@ # 数据容器 +> 数据容器(Container)的范围:由字符串、range()函数生成的等差数列、列表、元组、字典、集合等。 +> 可变容器:列表、字典、集合(Set(可变)和FrozenSet(不可变集合)) +> 不可变容器:字符串、range()函数生成的等差数列、元组 +# 迭代(Iterate) +> 数据容器里元素是可以被迭代的(Iterable),它们其中包含的元素可以被逐个访问。对于数据容器,有一个操作符in用来判断某个元素是否属于某个容器。 +```python +for c in 'Python': + print(c) +``` +> python相比较C等其他语言,只需要指定一个range函数的次数就行了。range函数自身具备了迭代性,因此不需要再继续设定函数内部的k++等逻辑。 +```python +for i in range(10): + print(i) +``` +# 列表(List) +> 数据清洗:解决现实问题,我们倾向于创建同一个类型的数据构成的列表,想办法把不同类型的数据分门别类的拆分处理,整理清楚。 +## 列表的生成 +```python +a_list=[] +a_list.append(1) +a_list.append(2) +print(a_list,f'has a length of {len(a_list)}.') +#append就是在list中追加数据,但是需要确保追加的对象是list类型,否则会报错。 +#range()返回的不是list,需要用list()转换,否则没办法调用.append() +#类>对象>方法 注意:对象与方法的对应关系 +b_list=list(range(1,9)) +b_list.append(11) +print(b_list,f'has a length of {len(b_list)}.') +# List Comprehensions(列表生成器、列表生成式) +# List Comprehensions可以嵌套使用for,甚至可以加上条件if +c_list=[2**x for x in range(8)] +print(c_list,f'has a length of {len(c_list)}.') +``` +官方文档中的实例:把两个元素并不完全相同的列表去同后拼成一个列表: +```python +import random +n=10 +#生成a列表,1-100的随机数 +a_list=[random.randrange(1,100) for i in range(n)] +print(f'a_list comprehends {len(a_list)} randomm numbers:{a_list}') +#从a_list中提取出偶数 +b_list=[x for x in a_list if x%2==0] +print(f'b_list comprehends {len(b_list)} even numbers:{b_list}') +``` +> [表达式 for 变量 in 可迭代对象] +> 注意列表推导式的用法:表达式指的是对遍历出的每一个变量进行处理。a_list对每个i进行取随机数,因此写random.randrange(1,100),b_list对每个x进行取偶数,带if的写法将表达式写在for前面,if写在最后。 +## 列表的操作符 +> 同字符串,也是有序容器 +> * 拼接:+ +> * 复制:* +> * 比较:==、!=、>、<、>=、<=,in和not in + +## 根据索引提取列表元素 +> 列表也可以根据索引操作,同时列表是可变序列,除了提取还可以进行删除和替换。 +> 列表(List)是可变序列,而字符串(String)是不可变序列。因此,字符串可以根据索引提取,但是无法对字符串根据索引进行删除或替换。 +> 字符串常量(String Literal)是不可变序列,虽然字符串也有一些Methods可用,但那些Methods并不会改变字符串本身,而是返回一个新的字符串。 +```python +s='Python'[2:5] +print(s) +del s[2]# 会报错 +s='Python' +L=list(s) +print(s) +print(L) +del L[2] +print(L)#del对L操作后,L本身少了一个元素 +``` +## 列表可用的内建函数 +> 列表和字符串都是容器,它们可使用的内建函数也其实是一样的: +> * len() +> * max() +> * min() +## Methods +> 字符串常量和range()都是不可变的(Immutable),而列表是可变的(Mutable)。所以,列表有一些Methods可以对List进行操作,而字符串常量和range()没有。 +1. sort() +> sort()方法用于对列表进行原地排序,即对原列表进行操作,而不是返回一个新的列表。列表中被比较的元素应该是同一类型,不是由同一类型的数据类型元素构成的列表,不能使用sort()Method。 +可变序列还有一系列Methods: +2. append() +3. clear() +4. copy() +5. extend() +6. insert() +7. pop() +8. remove() +9. reverse() +... +## 小结 +> 把列表与字符串的Methods进行对比,整理成表格。 +# 元组(Tuple) +> * List是可变有序容器,Tuple是不可变有序容器。 +> * List用方括号标识[],Tuple用圆括号标识()。 +创建一个元组时用()圆括号: +a=() +这样就创建了一个空元组。 +```python +a=(1,2,3)#建议元组永远带上() +b=1,2,3#不建议这种写法 +print(a) +print(b) +a==b#True +``` +> 创建单个元素元组,无论是否使用圆括号,在那唯一的元素后面一定要补上逗号,: +```python +from IPython.core.interactiveshell import InteractiveShell +InteractiveShell.ast_node_interactivity = "all" + +a = 2, # 注意这个末尾的逗号 , 它使得 a 变量被定义为一个元组,而不是数字 +a + +b = 2 # 整数,赋值 +b + +c = (2) # 不是元组 +c +type(c) # 还是 int + +d = (2,) # 这才是元组 +d +a == d +``` +> 元组是不可变序列,所以,你没办法从里面删除元素。但是你可以在末尾追加元素,因此,元组“不可变”的意思是“当前已有的部分不可变” +```python +a = 1, +print(a) +print(id(a)) +a += 3, 5 +print(a) +print(id(a)) # id 并不相同 —— 实际上是在内存中另外新创建了一个元组…… +# 注意内存与id的关系。 +``` +> List和Tuple的区别:使用场景:将来需要更改的时候,创建List;在将来不需要更改的时候,创建Tuple。其次,Tuple占用更小内存。 +> 对象._sizeof_():对象占用内存的字节数。 +```python +n=10000 #param{type:"number"} +a=range(n) +b=tuple(a)#把a转换成元组 +c=list(a)#把a转换成列表 +a._sizeof_() +b._sizeof_() +c._sizeof_() +``` +> 注意到:range(n)返回的等差数列就是一个Tuple,即range(6)就相当于(0,1,2,3,4,5)。 +# 集合(Set) +> 集合(Set)不包括重合元素,其次是无序的。 +> 集合又分为Set(可变的)和Frozen(不可变的) +```python +primes={2,3,5,7,11,13,17} +primes +``` +## 创建 +```python +a={}#创建字典 +b=set()#创建空集合 +type(a) +type(b) +``` +> 序列数据转换为集合,返回的是一个已经去重的集合。 +```python +a="abcabcdebcasfs" +b=range(10) +c=[1,2,2,3,3,1] +d=('a','b','c','e','d') +set(a) +set(b) +set(c) +set(d) +``` +> Comprehension:Set同样也可以进行。 +```python +a='abcdfbcadghsv' +b={x for x in a if x not in 'abc'} +print(b) +``` +## 操作 +> 将序列类型数据转换成Set,就等于去重。当然,也可以用in来判断某个元素是否属于这个集合。len()、max()、min()可以用来操作Set但是del却不行——因为Set中的元素没有索引。从Set里删除元素,得用set.remove(elem);而Frozen Set是不可变的,所以不能用set.remove(elem)操作。 +> 集合运算 +> * 并集:| +> * 交集:& +> * 差集:- +> * 对称差集:^ + +> 每种数据结构(Data Structures)都有自己的应用场景。比如,需要管理很多用户时,集合就可以派上很大用场。 +```python +admins={'Moose','Joker','Joker'} +moderators={'Ann','Chris','Jane','Moose','Zero'} +admins#自动去重 +'Joker' in admins #包含判断 +'Joker' in moderators #包含判断 +admins | moderators #或 +admins & moderators #交集 +admins - moderators #差集:是admins但不是moderators +admins ^ moderators #对称差集:不是身兼两职 +``` +> 绘制为可视化图形: +```python +# 这个 cell 集合运算图示需要安装 matplotlib 和 matplotlib-venn +# !pip install matplotlib +# !pip install matplotlib-venn +import matplotlib.pyplot as plt +from matplotlib_venn import venn2 + +admins = {'Moose', 'Joker', 'Joker'} +moderators = {'Ann', 'Chris', 'Jane', 'Moose', 'Zero'} + +v = venn2(subsets=(admins, moderators), set_labels=('admins', 'moderators')) +v.get_label_by_id('11').set_text('\n'.join(admins & moderators)) +v.get_label_by_id('10').set_text('\n'.join(admins - moderators)) +v.get_label_by_id('01').set_text('\n'.join(moderators - admins)) + +plt.show() +``` +> 以上集合对应的Set类Methods方法: +以上的操作符,都有另外一个版本,即,用 Set 这个类的 Methods 完成。 + +| 意义 | 操作符 | Methods | Methods 相当于 | +| :------: | :----: | :---------------------: | :--: | +| 并集 | | | `set.union(*others)` | set | other | ... | +| 交集 | `&` | `set.intersection(*others)` | `set & other & ...` | +| 差集 | `-` | `set.difference(*others)` | `set - other - ...` | +| 对称差集 | `^` | `set.symmetric_difference(other)` | `set ^ other` | + +注意,并集、交集、差集的 Methods,可以接收多个集合作为参数 `(*other)`,但对称差集 Method 只接收一个参数 `(other)`。 + +对于集合,推荐更多使用 Methods 而不是操作符的主要原因是:更易读 —— 对人来说,因为有意义、有用处的代码终将需要人去维护。(markdown:|;指html中的“|”转义) + +## 逻辑运算 +两个集合之间可以进行逻辑比较,返回布尔值。 + +**set** `==` **other** +> `True`: set 与 other 相同 + +**set** `!=` **other** +> `True`: set 与 other 不同 + +**isdisjoint**(_other_) +> `True`: set 与 other 非重合;即,`set & other == None` + +**issubset**(_other_),**set** `<=` **other** +> `True`: set 是 other 的子集 + +**set** `<` **other** +> `True`: set 是 other 的真子集,相当于 `set <= other && set != other` + +**issuperset**(_other_),**set** `>=` **other** +> `True`: set 是 other 的超集 + +**set** `>` **other** +> `True`: set 是 other 的真超集,相当于 `set >= other && set != other` + +## 更新 +对于集合,有它自身的Method: +1. add(elem) +2. remove(elem) +3. discard(elem) +4. pop() +5. clear() +6. set.update(*other),相当于set|=other|... +7. set.intersection_update(*other),相当于set&=other|... +8. set.difference_update(*other),相当于set-=other|... +9. set.symmetric_difference_update(other),相当于set^=other + +## 冻结集合 +> 冻结集合(Frozen Set)之于Set相当于Tupple之于List +> https://docs.python.org/3/library/stdtypes.html#frozenset +# 字典(Dictionary) +> Map是容器中的独一类,映射(Map)容器。映射容器只有一种,叫做字典(Dictionary) +```python +phonebook={'ann':6575,'bob':8982,'joe':2598,'zoe':1225} +phonebook +``` +字典里的每个元素由key-value组成 +key作为字典的索引,可以直接取出key对应的value +```python +phonebook = {'ann':6575, 'bob':8982, 'joe':2598, 'zoe':1225} +phonebook['bob'] +``` +key是唯一的,如果有重复的key,就跟Set那样会“自动去重”——保留的是众多重复的key中最后一个key:value(或者说,“最后一个key:value前面的key的value被更新了”)这是因为字典里的key都映射且只映射一个对应的value。 +```python +phonebook = {'ann':6575, 'bob':8982, 'joe':2598, 'zoe':1225, 'ann':6585} +phonebook +``` + +## 字典的生成 +```python +from IPython.core.interactiveshell import InteractiveShell +InteractiveShell.ast_node_interactivity = "all" + +aDict = {} +bDict = {'a':1, 'b':2, 'c':3} +aDict +bDict +``` +## 更新某个元素 +```python +from IPython.core.interactiveshell import InteractiveShell +InteractiveShell.ast_node_interactivity = "all" + +phonebook1 = {'ann':6575, 'bob':8982, 'joe':2598, 'zoe':1225, 'ann':6585} + +phonebook1['joe'] +phonebook1['joe'] = 5802 +phonebook1 +phonebook1['joe'] +``` +## 添加元素 +> .update更新元素 +```python +from IPython.core.interactiveshell import InteractiveShell +InteractiveShell.ast_node_interactivity = "all" + +phonebook1 = {'ann':6575, 'bob':8982, 'joe':2598, 'zoe':1225, 'ann':6585} +phonebook2 = {'john':9876, 'mike':5603, 'stan':6898, 'eric':7898} + +phonebook1.update(phonebook2) +phonebook1 + +``` +## 删除某个元素 +> del 删除某个key-value +```python +from IPython.core.interactiveshell import InteractiveShell +InteractiveShell.ast_node_interactivity = "all" + +phonebook1 = {'ann':6575, 'bob':8982, 'joe':2598, 'zoe':1225, 'ann':6585} + +del phonebook1['ann'] +phonebook1 +``` +## 逻辑操作符 +> 使用keys或values方法,来提取字典的key和value +```python +phonebook1 = {'ann':6575, 'bob':8982, 'joe':2598, 'zoe':1225, 'ann':6585} + +'ann' in phonebook1 + +phonebook1.keys() +# 提取字典中所有的keys到dict_keys中 +# keys方法返回一个动态视图类型(dict_keys类型),不存储键值,只反映当前字典的键状态。 +'stan' in phonebook1.keys() +phonebook1.values() +1225 in phonebook1.values() + +phonebook1.items() +('stan', 6898) in phonebook1.items() +``` +## 可用来操作的内建函数 +```python +from IPython.core.interactiveshell import InteractiveShell +InteractiveShell.ast_node_interactivity = "all" + +phonebook1 = {'ann':6575, 'bob':8982, 'joe':2598, 'zoe':1225, 'ann':6585} +phonebook2 = {'john':9876, 'mike':5603, 'stan':6898, 'eric':7898} +phonebook1.update(phonebook2) + +len(phonebook1) +max(phonebook1) +min(phonebook1) +list(phonebook1) +tuple(phonebook1) +set(phonebook1) +sorted(phonebook1) +sorted(phonebook1, reverse=True) +``` +## 常用Methods +```python +phonebook1 = {'ann':6575, 'bob':8982, 'joe':2598, 'zoe':1225, 'ann':6585} +phonebook2 = {'john':9876, 'mike':5603, 'stan':6898, 'eric':7898} + +phonebook3 = phonebook2.copy() +phonebook3 + +phonebook3.clear() +phonebook3 + +phonebook2 # .copy() 的 “原件” 不会发生变化 + +p = phonebook1.popitem() +p +phonebook1 + +p = phonebook1.pop('adam', 3538) +p +phonebook1 + +p = phonebook1.get('adam', 3538) +p +phonebook1 + +p = phonebook1.setdefault('adam', 3538) +p +phonebook1 +``` +> popitem()用于移除字典最后一个键值对,适合有序字典的场景。(返回并移除最后一个键值对) +> pop(key):精确删除指定键,适合需要安全删除(带默认值)的场景。(返回并移除指定键值对) +> get(key):安全访问键值,避免Keyerror,适合只读操作。(返回对应的值) +> setdafault():初始化键的默认值,适合动态添加缺失值的场景。(返回键对应的值) +# 迭代各种容器中的元素 +我们总是有这样的需求:对容器中的元素逐一进行处理(运算),这样的时候就用`for`循环去迭代它们。 +> 迭代range()和list()中的元素 +```python +#迭代range() +for i in range(3): + print(i) +#迭代list +for i in [1,2,3] + print(i) +``` +## 迭代的同时获取索引 +> 有时在迭代的时候也需要同步获取索引,可以使用enumerate() +```python +s='python' +for i,c in enumerate(s): + print(i,c) +for i,v in enumerate(range(3)): + print(i,v) +L=['ann','bob','john','mike'] +for i,L in enumerate(L) + print(i,L) +t=('ann','bob','joe','john','mike') +for i,t in enumerate(t): + print(i,t) +``` + +## 迭代前排序 +> 可用sorted()和reversed()在迭代前先排好序: +```python +t=('bob','ann','john','mike','joe') +for i,t in enumerate(sorted(t)): + print(i,t) +#sorted(t)按首字母比较ASCII码大小排序,默认从小到大,默认reverse=False +t=('bob','ann','john','mike','joe') +for i,t in enumerate(sorted(t,reverse=True)): + print(i,t) +#reverse=True,按从大到小排序 +t = ('bob', 'ann', 'john', 'mike', 'joe') +for i, t in enumerate(reversed(t)): + print(i, t) +#reversed()通过调用元组的__reversed__()方法元组逆序排序:将元组从末尾到开头遍历 +#enumerate()为逆序后的每个元素生成递增索引 +``` +## 同时迭代多个容器 +> zip()函数迭代两个或者两个以上的容器中的元素 +```python +chars='abcdefghijklmnopqrstuvwxyz' +nums=range(1,27) +for c,n in zip(chars,nums): + print(f"Let's assume {c} represents {n}.") +``` +## 迭代字典中的元素 +```python +phontbook1={'ann':6575,'bob':8982,'joe':2598,'zoe':1225,'ann':6585} +for key in phonebook1: + print(key,phonebook1[key]) +#python中,当使用for key in dict直接遍历字典时,默认提取的是字典的键(key) +``` +# 总结 + +> * https://docs.python.org/3/tutorial/datastructures.html#dictionaries +> * https://docs.python.org/3/library/stdtypes.html#typesmapping \ No newline at end of file diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\227\350\241\250append copy extend insert reverse.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\227\350\241\250append copy extend insert reverse.py" new file mode 100644 index 000000000..b417b91c5 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\227\350\241\250append copy extend insert reverse.py" @@ -0,0 +1,59 @@ +import random +n=3 +a_list=[random.randrange(65,91) for i in range(n)] +b_list=[chr(random.randrange(65,91)) for i in range(n)] +print(a_list) +c_list=a_list+b_list+a_list*2 +print(c_list) + +#appened()方法 +c_list.append('100') +print(c_list) + +#clear()方法 +print(a_list) +a_list.clear() +print(a_list) + +#copy()方法 +d_list=c_list.copy() +print(d_list) +del d_list[6:8] +print(d_list) +print(c_list) + +#.copy和赋值不同 +e_list=d_list +del e_list[6:8] +print(e_list) +print(d_list) #对elist进行操作时,d_list也同步发生了变化 +print(id(e_list) == id(d_list)) # 输出 True +# 证明e_list=d_list这里并非创建了一个列表,而是将两个列表指向了同一个内存地址,因此修改其中任何一个,两者会同时发生改变。 + +#在末尾追加一个列表 +print(a_list) +print(c_list) +a_list.extend(c_list) +print(a_list) +#注意这里extend与append的差异:extend将列表中元素逐一添加到列表末尾,而append将c_list直接作为一整个子列表添加到目标列表末尾:[X,X,[A,B]] +#因此:append是将列表作为整体添加,extend是拆分列表,将其中元素逐一添加。 + +#在索引位置插入一个元素 +print(a_list) +a_list.insert(1,'example') +print(a_list) #插入到索引位置,后续元素依次更新索引 +a_list.insert(2,'exemple') +print(a_list) + +# 报错:a_list.sort(),因为此时a_list中元素类型不统一 + +#排序 +print(a_list) +a_list.reverse() +print(a_list) +# 注意reversereverse() 通过直接交换索引位置的元素完成反转,不触发任何比较操作。即使元素类型混杂,只要列表结构合法,反转就能正常执行。 + +x=a_list.reverse() +print(x) +#同时reverse()方法对当前序列进行操作,返回值为None,因此不能直接赋值给变量 + diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\227\350\241\250pop remove del.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\227\350\241\250pop remove del.py" new file mode 100644 index 000000000..1c03ad53d --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\227\350\241\250pop remove del.py" @@ -0,0 +1,32 @@ +import random +n=3 +a_list=[random.randrange(65,91) for i in range(n)] +print(a_list) + +#插入 +a_list.insert(1,'example') +print(a_list) + +#删除 +#remove去除example,如果有多个,只去除第一个 +a_list.remove('example') +print(a_list) + +#pop删除并返回被删除的值 +p=a_list.pop(2) +print(a_list) +print(p) + +#pop del 和remove的区别 +a_list.insert(2,'example') +a_list.insert(2,'example') +a_list.insert(2,'example') +print(a_list) +del a_list[2] +print(a_list) + +print(a_list.remove('example'))# 返回None +print(a_list) + +#del直接删除了数列中元素,pop删除并返回被删除的值,remove删除第一个元素,并返回None + diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\227\350\241\250sort()-Methods.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\227\350\241\250sort()-Methods.py" new file mode 100644 index 000000000..3aaca4101 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\227\350\241\250sort()-Methods.py" @@ -0,0 +1,36 @@ +import random +n=10 +a_list=[random.randrange(1,100) for i in range(n)] +print(f'a_list comprehends {len(a_list)} random numbers:\n',a_list) + +a_list.sort() +print('the list sorted:\n',a_list) +#sort()函数默认升序排列 +#降序排列,修改参数reverse=True +a_list.sort(reverse=True) +print('the list sorted reversely:\n',a_list) + +#对列表内部的字符串元素也可以进行排序 +c_list=[chr(random.randrange(65,91)) for i in range(n)] +print(f'c_list comprehends {len(c_list)} random letters:\n',c_list) + +c_list.sort() +print('the list sorted:\n',c_list) + +c_list.sort(reverse=True) +print('the list sorted reversely:\n',c_list) + +print(c_list) + +d_list=[chr(random.randrange(65,91))+\ + chr(random.randrange(97,123))\ + for i in range(n)] +#在代码行末加上\,表示换行 + +print(f'd_list comprehends {len(d_list)} random letters:\n',d_list) + +d_list.sort() +print('the list sorted:\n',d_list) + +d_list.sort(key=str.lower,reverse=True) +print('the list sorted reversely:\n',d_list) diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\227\350\241\250\345\217\257\347\224\250\347\232\204\345\206\205\345\273\272\345\207\275\346\225\260.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\227\350\241\250\345\217\257\347\224\250\347\232\204\345\206\205\345\273\272\345\207\275\346\225\260.py" new file mode 100644 index 000000000..25c250d86 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\227\350\241\250\345\217\257\347\224\250\347\232\204\345\206\205\345\273\272\345\207\275\346\225\260.py" @@ -0,0 +1,17 @@ +import random +n=3 +#生成3个随机数 +a_list=[random.randrange(65,91) for i in range(n)] +b_list=[chr(random.randrange(65,91)) for i in range(n)] +print(a_list) +print(b_list) +#操作列表 +c_list=a_list+b_list+a_list*2 +print(c_list) + +#内建函数操作len()、max()、min()、sum() +print(len(c_list)) +print(max(b_list)) +print(min(b_list)) +# 根据Unicode码比较 +print('X' not in b_list) \ No newline at end of file diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\227\350\241\250\346\223\215\344\275\234\347\254\246.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\227\350\241\250\346\223\215\344\275\234\347\254\246.py" new file mode 100644 index 000000000..09b7e3ac8 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\227\350\241\250\346\223\215\344\275\234\347\254\246.py" @@ -0,0 +1,8 @@ +a_list=[1,2,3] +b_list=[4,5,6] +c_list=a_list+b_list*3 +print(c_list) +d=7 not in c_list +print(d) +e=a_list>b_list +print(e) \ No newline at end of file diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\227\350\241\250\347\264\242\345\274\225.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\227\350\241\250\347\264\242\345\274\225.py" new file mode 100644 index 000000000..7e8e5ccf1 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\227\350\241\250\347\264\242\345\274\225.py" @@ -0,0 +1,26 @@ +import random +n=3 +a_list=[random.randrange(65,91) for i in range(n)] +b_list=[chr(random.randrange(65,91)) for i in range(n)] +print(a_list) +print(b_list) +c_list=a_list+b_list+a_list*2 +print(c_list) + +print() +#根据索引提取(Slicing) +print(c_list[3]) #返回索引值为3的元素值 +print(c_list[:]) #返回整个列表 +print(c_list[5:]) #返回从索引为5开始到列表末尾的所有元素 +print(c_list[:3]) #返回从列表开头到索引为3的所有元素 +print(c_list[2:6]) #从索引2开始,直到索引6之前(不包括6) + +print(c_list) +#根据索引删除 +del c_list[3] #del是一个命令 +print(c_list) +del c_list[5:8] #删除最新的c_list列表对应的[5,8) +print(c_list) +#根据索引替换 +c_list[1:5:2]=['a',2] #索引1开始,5结束,2step替换一次,依次替换['a',2] +print(c_list) diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/\345\220\214\346\227\266\350\277\255\344\273\243\345\244\232\344\270\252\345\256\271\345\231\250.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/\345\220\214\346\227\266\350\277\255\344\273\243\345\244\232\344\270\252\345\256\271\345\231\250.py" new file mode 100644 index 000000000..50d27e129 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/\345\220\214\346\227\266\350\277\255\344\273\243\345\244\232\344\270\252\345\256\271\345\231\250.py" @@ -0,0 +1,6 @@ +#zip函数 +chars='abcdefghijklmnopqrstuvwxyz' +nums=range(1,27) +#注意range左闭右开 +for c,n in zip(chars,nums): + print(f"Let's assume {c} represents {n}.") \ No newline at end of file From 2be248d444aeabc84d631cfc15ed87f9476bfe03 Mon Sep 17 00:00:00 2001 From: johoo <57379875+johoo123@users.noreply.github.com> Date: Tue, 13 May 2025 13:53:35 +0800 Subject: [PATCH 10/17] =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Part.1.E.7.files.ipynb | 20 +- results_test file.txt | 3771 +++++++++++++++++ words_alpha_list.txt | 3771 +++++++++++++++++ .../5.12\346\226\207\344\273\266.md" | 70 + .../5.13.md" | 0 .../file.writelines().py" | 10 + ...\231\346\226\207\344\273\266test-file.txt" | 3 + ...\231\346\226\207\344\273\266test-file.txt" | 3 + .../test-file.txt" | 0 ...07\344\273\266\346\223\215\344\275\234.py" | 18 + .../writelines-test-file.txt" | 3 + ...33\345\273\272\346\226\207\344\273\266.py" | 8 + ...40\351\231\244\346\226\207\344\273\266.py" | 9 + ...\273\345\206\231readline()-readlines().py" | 36 + ...73\345\206\231\346\226\207\344\273\266.py" | 12 + ...\231\346\226\207\344\273\266test-file.txt" | 3 + ...02\345\222\214\347\250\213\345\272\217.py" | 55 + 17 files changed, 7783 insertions(+), 9 deletions(-) create mode 100644 results_test file.txt create mode 100644 words_alpha_list.txt create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/5.12\346\226\207\344\273\266.md" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/5.13.md" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/file.writelines().py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/readlines\350\257\273\345\206\231\346\226\207\344\273\266test-file.txt" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/readline\350\257\273\345\206\231\346\226\207\344\273\266test-file.txt" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/test-file.txt" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/with\346\211\223\345\214\205\346\226\207\344\273\266\346\223\215\344\275\234.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/writelines-test-file.txt" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\233\345\273\272\346\226\207\344\273\266.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\240\351\231\244\346\226\207\344\273\266.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/\350\257\273\345\206\231readline()-readlines().py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/\350\257\273\345\206\231\346\226\207\344\273\266.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/\350\257\273\345\206\231\346\226\207\344\273\266test-file.txt" create mode 100644 "\350\256\241\347\256\227\345\255\227\346\257\215\346\261\202\345\222\214\347\250\213\345\272\217.py" diff --git a/Part.1.E.7.files.ipynb b/Part.1.E.7.files.ipynb index 0d179ba01..1613a05ef 100644 --- a/Part.1.E.7.files.ipynb +++ b/Part.1.E.7.files.ipynb @@ -149,17 +149,19 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "first line\n", - "second line\n", - "third line\n", - "\n" + "ename": "FileNotFoundError", + "evalue": "[Errno 2] No such file or directory: '/tmp/test-file.txt'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32mc:\\Users\\Administrator\\Documents\\GitHub\\the-craft-of-selfteaching\\Part.1.E.7.files.ipynb 单元格 13\u001b[0m line \u001b[0;36m1\n\u001b[1;32m----> 1\u001b[0m f \u001b[39m=\u001b[39m \u001b[39mopen\u001b[39;49m(\u001b[39m'\u001b[39;49m\u001b[39m/tmp/test-file.txt\u001b[39;49m\u001b[39m'\u001b[39;49m, \u001b[39m'\u001b[39;49m\u001b[39mw\u001b[39;49m\u001b[39m'\u001b[39;49m)\n\u001b[0;32m 2\u001b[0m f\u001b[39m.\u001b[39mwrite(\u001b[39m'\u001b[39m\u001b[39mfirst line\u001b[39m\u001b[39m\\n\u001b[39;00m\u001b[39msecond line\u001b[39m\u001b[39m\\n\u001b[39;00m\u001b[39mthird line\u001b[39m\u001b[39m\\n\u001b[39;00m\u001b[39m'\u001b[39m)\n\u001b[0;32m 3\u001b[0m f\u001b[39m.\u001b[39mclose()\n", + "File \u001b[1;32mc:\\Users\\Administrator\\miniconda3\\envs\\new_env\\lib\\site-packages\\IPython\\core\\interactiveshell.py:310\u001b[0m, in \u001b[0;36m_modified_open\u001b[1;34m(file, *args, **kwargs)\u001b[0m\n\u001b[0;32m 303\u001b[0m \u001b[39mif\u001b[39;00m file \u001b[39min\u001b[39;00m {\u001b[39m0\u001b[39m, \u001b[39m1\u001b[39m, \u001b[39m2\u001b[39m}:\n\u001b[0;32m 304\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\n\u001b[0;32m 305\u001b[0m \u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mIPython won\u001b[39m\u001b[39m'\u001b[39m\u001b[39mt let you open fd=\u001b[39m\u001b[39m{\u001b[39;00mfile\u001b[39m}\u001b[39;00m\u001b[39m by default \u001b[39m\u001b[39m\"\u001b[39m\n\u001b[0;32m 306\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mas it is likely to crash IPython. If you know what you are doing, \u001b[39m\u001b[39m\"\u001b[39m\n\u001b[0;32m 307\u001b[0m \u001b[39m\"\u001b[39m\u001b[39myou can use builtins\u001b[39m\u001b[39m'\u001b[39m\u001b[39m open.\u001b[39m\u001b[39m\"\u001b[39m\n\u001b[0;32m 308\u001b[0m )\n\u001b[1;32m--> 310\u001b[0m \u001b[39mreturn\u001b[39;00m io_open(file, \u001b[39m*\u001b[39margs, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)\n", + "\u001b[1;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '/tmp/test-file.txt'" ] } ], @@ -9696,7 +9698,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.3" + "version": "3.9.21" } }, "nbformat": 4, diff --git a/results_test file.txt b/results_test file.txt new file mode 100644 index 000000000..4a0e22343 --- /dev/null +++ b/results_test file.txt @@ -0,0 +1,3771 @@ +abactinally +abatements +abbreviatable +abettors +abomasusi +abreption +abrogative +absconders +absinthol +absorbancy +acceptavit +acceptors +acclimation +accounter +accumulate +acenaphthene +achronism +achroous +acylation +acknowledge +acolytes +acquisita +acquitted +acriflavine +acromegaly +acronychal +acronycta +acronyx +actinocarp +activates +acuminose +acurative +addressing +adelocodonic +ademonist +adiabatically +adipopexia +adsessor +adulthood +advantaging +adventual +adverting +aeolipyle +aequorin +aeriality +aerofoils +aerometer +aetosaur +affectation +affricative +afghanistan +africanist +aftercareer +agalactous +agamogenetic +agapornis +agariciform +aggresses +agnations +agrypniai +agrology +agrological +aichmophobia +aydendron +airdrops +airmonger +aistopoda +albedometer +albuminoid +alchemising +alertest +aleurodes +alfaquins +algaeology +algaeological +alienation +alineation +aliturgic +alkalinize +alkoxyl +allenarly +allentato +alligation +alloquial +allottable +allthorn +almoravide +alopecist +alphonso +alpinery +alpinist +alrighty +altarist +alternated +altiplano +altiscope +amanitins +amarillos +ambulating +amelcorns +ameloblast +ametropic +amiableness +amyluria +ammiaceous +amoebobacter +amoralize +amortise +amphiboles +amphisbaenic +amphiumidae +amputees +amusedly +anacamptics +analysis +anapodeictic +anastaltic +anchoritic +andesinite +androclinia +anepiploic +aneurism +angelologic +angerless +angiectopia +anginous +angioblast +angiotribe +angiport +anglemeter +anglophobia +angulates +anhydrated +anhydremic +anilinism +animately +animaters +anisocercal +annapurna +annually +annullate +anomalipod +anomalure +anophelinae +anorchism +answerable +antalkaline +antalkalis +antarctalia +antepaschal +anteporch +anterior +anthozoa +anticathode +antichlor +anticomet +anticult +antifowl +antigalactic +antimarian +antislip +anvilling +apheresis +aphrodisia +apiology +apneumona +apoharmine +apokreos +apoplectic +aporetical +apostacy +apotracheal +appeasers +apperceive +appertain +applicancy +appliedly +applying +appointed +appraisable +apropos +aquamarine +aquiform +araneiform +arbitrages +arbuscles +archaeolith +archaicness +archdiocesan +archenemies +archibenthic +archigony +archilithic +archimagus +archiplasm +archsewer +arcticward +arenilitic +areometer +argillitic +argiopoidea +argumenta +arhatship +aryanism +arightly +arrastre +arrests +arrivals +arrowy +arsenium +artilize +arugulas +asbestos +ascendants +ascyrum +ascophore +asyndetic +asparagyl +aspergilla +asphalter +asplanchnic +assafoetida +asswaging +asterales +asterioid +asthenies +atheromas +athetosic +athyris +athyroid +athreptic +athrogenic +atonally +attargul +attitude +attunes +auctorial +audiophile +augments +aulophobia +auntlier +aureoline +aureous +auriculo +auriscalp +auslaute +autoclave +autoharp +automated +avanters +avernus +aversant +avidious +avocation +avouching +awfully +aworry +azurite +babesiosis +bacilliform +backslashes +backswept +backtracking +backwardly +baconianism +baculiform +baguettes +baldnesses +balistarii +balletomane +ballonets +bananaquit +bandwagons +bannerols +barbarising +bardolphian +bariatrics +barytone +barkeepers +barkpeeling +barleybrake +barleybreak +barometz +baronetical +barracouta +barspoon +bartizaned +bartonella +basidorsal +basilateral +basiotribe +basipodite +bassanello +bassetite +bastinading +bathyscape +batidaceous +batonist +batrachoididae +battailant +battement +baulkiest +bawsunt +beautihood +becarpeting +becrowding +bedazzles +bedposts +beeftongue +beestings +beetroot +beginnings +beguileful +belinuridae +bellwaver +bemajesty +benediction +benzolate +bergamots +beryllate +berlinize +beshrivel +besmircher +bespangles +bespreading +bestirred +bestridden +beswarms +betattered +bettering +bevellers +bewhisker +bewitching +biathlons +bibitory +bibliophobia +bibliotics +biddulphiaceae +bifarious +bigaroons +bikukulla +bilifaction +bilocation +biloculate +bimillennia +bimorphs +bintangor +bioassayed +biologize +biophyte +biovular +bipartite +byplays +birthmark +bisantler +biscutate +bisinuate +bismarckian +bissonata +bittings +biunity +biweeklies +biwinter +blackfriars +blarneyer +blasphemes +blastoffs +blazoning +blennogenic +blethering +blighters +blissful +blockwood +bloodwit +blowtube +bluegums +boatloading +bodyplate +bogberries +bogwoods +bogwort +boycott +boilerful +bolstered +bombacaceous +bonhomies +bonneting +boobyism +boohooing +boomless +boondoggled +bootblacks +bootery +bootmaker +boozers +bordroom +borneols +borrowed +boskiest +bosporan +botanist +bouillon +boulevard +bounceably +boundary +boundure +bountree +boviform +bowerlet +bowerly +bowerlike +bowknot +bowlmaker +boxboards +brachiation +bractlets +brahmaness +braquemard +brawlys +breakshugh +breathily +breediness +breezeful +bremeness +brevetcy +breviary +breviconic +brewises +brezhnev +bridgeless +bridgemaking +brigatry +brightish +bromauric +bronchocele +bronchus +bronzy +broodily +brooklime +broomweed +browser +browsick +bruiting +brushier +brushmen +bufotalin +bugproof +bulgurs +bulliest +bullnose +bullpup +bullskin +bumblekite +burnished +bushlands +busticate +butcherer +buzzy +cacidrosis +cacogenesis +cacomistle +cacophony +cacophonical +caecotomy +calaminaris +calciphyre +calcitonin +calculist +caligraphy +calypter +callitriche +calvarium +calvities +campanular +camphorate +cancriform +candidature +canephoroe +cannibalized +cantrips +capiteaux +capitolian +caponiers +caponiser +caponniere +captaincies +carbazylic +carboluria +carboxyl +carburised +carcharodon +cardiograph +cardioplegia +cardiorenal +caressant +caryatids +carkingly +carlyleian +carlylese +carotenes +carouser +carpenter +carpetweed +carrioles +carroty +cartelism +cashdrawer +cassalty +cassiopeid +castores +catalanist +catamneses +cataphracted +cataphracti +catarinite +catechisms +catechistic +catenative +catholicon +catteries +catwort +causeries +cavernlike +cavitates +celibatist +cellarway +cellfalcicula +celticist +celtophil +cencerros +cenogenetic +censorate +censurable +centipedes +centupled +cephalous +ceramicist +ceratites +ceratomania +cerithioid +cerusite +chaenomeles +chaetosoma +chaiseless +chamecephaly +champignon +chaplaincies +charwomen +chastening +chattery +chaucerism +chaussees +cheesemaking +chemigraphic +chemotactic +chemurgy +chemurgical +cherishing +chickories +chiliasts +chimpanzee +chippewas +chiropodic +chirpily +chivariing +chloranaemia +chlorellaceae +chloropal +choiceness +chondrioma +chondrule +choppers +chorioids +chorisis +chortles +chowries +chrysalida +chromium +chucklers +churchful +churingas +chutist +cyaphenine +cyathium +cycadaceous +cicatricula +cyclitis +cilicious +cymation +cymophane +cinchotine +cingulum +cyniatria +circleting +circumduce +cirurgian +cisjurane +cisleithan +cysteine +cystidean +civilizade +civilizee +claytonia +clangoring +clangoured +clarifiers +classily +claudetite +clausure +cleanliest +clearhearted +clementine +clerically +clerkdoms +cleveites +climatarchic +clinically +clockwise +clomiphene +clotting +clovery +clubster +clumsier +coannexes +coarsest +coassert +coassumed +coasters +coatroom +coattails +coauthered +cobleskill +cobwebbery +cockneyfied +cockshut +cocottes +coderives +coenures +cofactors +cognatus +cogredient +coyness +coislander +cojuror +colascioni +colazione +colleagues +collecting +colloque +colonials +colopexia +colophenic +colubrinae +columbite +columels +cometary +commandeered +commercing +companero +companion +compering +competible +complanate +complicacy +comport +concavely +conchitis +concludible +condensate +confabulate +confederated +confrater +congeners +congenital +congiaries +congress +conjoint +conjugated +conjunct +connivance +conniver +conodont +consigns +consumo +contented +contoise +contrude +cooingly +cookeries +cookout +cooniest +coonskin +coonties +coparceny +copyism +coplots +coproduce +coprosma +coquets +coquito +corbeilles +coresidence +corinthiac +coryphaei +coryzal +corkiest +corkwing +cornette +cornmeals +cornuted +corollet +corollike +coromandel +corridor +corticole +cosmetical +cossets +costumed +cotabulate +cotenancy +cotillon +cotters +couchette +coulombs +courses +courter +courtin +cousins +covalency +coverlet +coverside +coverup +cowardish +coxcomby +coxcombical +crackleware +craniomalacia +crankiest +craspedum +cravenly +crebrity +credentialed +creepiest +creosote +crepehanger +crepeiest +cresoline +cryalgesia +crimison +crimsoned +criticule +crowdweed +crudity +cruising +cruisken +crummier +crusados +crusts +cuadrillas +cubicities +cuculus +culicoides +cullises +cultrate +culture +culvers +cumulated +curcuddoch +curdlers +curettage +curioso +curledly +curlily +curtalax +cuspidine +customed +cutdown +cutesier +cutinise +cutlases +cutlets +cutlips +cutout +cuttles +cutups +czarship +dacryuria +daywrit +danewort +dartrose +dawsoniaceae +deadeningly +deadworks +deathshot +debamboozle +debarkation +debaucheries +debordment +debussing +decalcomanias +decerebrize +deciduity +declarative +declension +decompiler +decorous +decouples +decremental +decrypted +deepfroze +deerberry +deescalating +defections +defeminized +deferrized +definitise +definitor +deflators +deflexure +degausses +deglaciation +degreewise +dehorting +deywoman +delectating +deliberates +delineating +deliquesce +delivery +delouses +deltation +demibuckram +demigriffin +demisuit +demivolt +demobilize +demodulate +demoniast +dempster +denasalized +dendrocoele +denitrated +denominate +denounces +dentalized +denumerable +denunciated +dephycercal +dephlegmated +depilator +deplaster +depletion +deploring +deprivate +derbylite +deresinate +derivers +derogating +derrickmen +describably +descriers +desegregated +desiccative +designers +desmidiales +desmodus +desolates +despatches +desponder +despotat +destuffs +deterring +developpe +dewberry +diagonally +diakinesis +dialysing +dialyzer +diamondize +diaphyseal +diaphonies +diaschisis +dichotomal +dichromasia +differencing +digestive +digladiator +dihexagonal +dykereeve +dilatants +dilatator +dimensive +dimethoate +dinginess +dinitrate +dinitrile +dioctahedral +diodontidae +dioecious +diopsides +diphygenic +diphtheric +diplodus +diplomaing +diplotene +disarranged +discanting +discernible +discipline +disclaiming +discommode +discophile +discredited +discrepate +disembogue +disgavelled +disgress +dishelming +dishouse +disimpark +disjecting +disjoinable +disjoint +disjunct +dyslectic +dislodging +dismarket +disobliger +disomus +disparageable +disparple +dispeller +dysphemia +disponer +dispraise +disroot +disrump +disseized +dissuader +distancing +distrait +disunified +ditchdown +dithyramb +ditroite +diureses +diurons +divekeeper +divertila +divinely +diviners +divorcees +dochmiasis +dockyards +dogmatize +dogwinkle +dollymen +dolomitic +domiciliate +dominates +dooryard +doormaker +dormette +dormeuse +dorosoma +dorsigrade +doubleheader +doughty +downcut +downlier +downset +dowsabels +draftsmen +dragonism +drawlers +drawplate +drybrained +dryrot +driveling +drizzle +droopier +droshky +droskies +drossy +drumbling +drumlier +druttle +dualities +duckhearted +ducklings +ducktails +duetting +dulcimore +dumbfound +dumpily +duologue +durative +durdenite +durions +duvetine +earthmaker +earthwall +earwigging +earwort +ebullient +ecchymosed +echiniform +echinoderidae +echopraxia +eclecticize +ecstasies +ectosteal +educatedly +effectless +efoliolate +egoistical +eyeleteer +eightsmen +ejections +elaeothesia +elargement +eldmother +electives +electorial +elementate +elephantidae +elephants +elevenfold +elohistic +elotillo +elsewhere +emasculate +embodiment +emboldening +embolismic +embowers +emendation +emotioned +empathetic +emperess +empresse +emptily +enaluron +encapsuled +encarpium +enclasping +encrust +encumbers +endochrome +endocritic +endoplasma +endostraca +endothecate +energiser +enflagellate +enfoulder +engagedness +enharmonic +enlivens +enneadianome +enoplion +enrolles +ensorceled +enstyle +enstool +ensurance +ensurer +entohyal +entrains +envoys +enweaving +epibolism +epicostal +epigaster +epigonos +epilimnial +epimerite +epimerum +episcleral +episematic +epistlar +epitaphical +epitaxy +epizoon +eponymic +equalized +equative +equipages +equiradical +equison +equispaced +erasement +erasions +erubescence +espouse +esprove +essoins +esterified +estheses +esthesio +estopped +estuant +eteoclus +ethanoyl +etherized +ethylated +ethnicism +ethnogenic +eucrites +eugenist +eulogize +eunuchoid +eupatridae +euphenics +eutony +evechurr +eventual +everting +evolute +evolves +exanthine +excavates +excellent +excerpted +excoriate +excussed +exdividend +execrates +exergonic +exhibiter +exigencies +exintine +exister +exocyclica +exophasic +exoterica +expalpate +explains +explodes +exsculp +exserted +extendible +extracted +exzodiacal +faculative +fairyism +faithwise +falciparum +falseness +falsities +fanflower +fantasts +fantoddish +farnovian +farriery +farrows +fasciculate +fascinery +fatalisms +fatalistic +fatherhood +fatherling +fattiest +fauvette +featherlet +featherlike +featherweed +feldspars +felinity +fellowred +feltness +fenestral +feoffeeship +ferments +fermillet +ferrament +ferryman +ferrites +ferrums +fervanite +festally +fewterer +fiddlerfish +fierasferid +filiciform +filipiniana +fillagreing +filtering +finitely +firebombing +firebricks +firmity +fishnets +fishpool +fissioned +fissipedal +fivepins +flaccidities +flagellates +flaggingly +flangeless +flankwise +flatlings +flavanilin +fleawort +fleysome +flyboats +flichters +flyness +flywinch +flockiest +floodwall +floosies +fluidist +fluorine +fluoroid +flurry +fluxweed +focometer +foenngreek +foetalism +fogscoffer +follying +fondlings +foolship +footfolk +footpaces +footsy +forbearant +forebearing +foredoomed +forefoot +foreiron +forepast +foreshock +foresides +forespeech +forewarn +forgiver +formeret +forsaking +forsung +fortranh +forwoden +forwore +foujdary +fountain +fourbagger +foveolet +foziest +fractural +fraughts +freetrader +freewoman +frenchily +freshest +freshets +friendlier +frigorific +fringillid +frisson +frogeyes +frolicly +froughy +fuehrers +fugacities +fulgour +fulimart +fumaroidal +fumeless +fundless +furcular +furless +furnacemen +fursemide +furuncle +gablatores +galactagogue +gallberry +galleasses +gallicanism +galliwasp +gangliomata +garlandry +garnishes +gascoigny +gasconism +gasoliner +gasoscope +gasteralgia +gauntlet +gauntly +gawkhammer +gecarcinus +gemsbucks +generating +genetmoil +gentianella +gentisate +gentrices +geococcyx +geographer +geomantical +geophagism +geotaxis +geraniols +gerenuks +germanely +germanhood +gestening +ghostland +giftwrap +gigartinaceae +gilravager +gymnogen +gingerline +ginkgoales +ginneries +gypsies +gyrally +girasols +gyromele +giustina +gladatorial +gladfully +gladiolus +glairiest +glassfish +glassteel +glauberite +glaucidium +glycogenic +glycolate +glyconian +glimpses +glissando +glittered +glomerella +glorifies +glossoid +glowfly +glucinum +glucosin +gluemaking +glutamate +glutelin +gnatcatcher +gnathopod +gnostical +gobbledegook +gobernadora +gobletful +goblinism +godparent +goldbricks +goldurned +golliwog +goloshes +goniatite +gonothecal +gooneys +gorgonacean +gorgonian +goutweed +governs +graybeards +grainsmen +graithly +grandaunt +granogabbro +granville +grapeskin +grappling +gravamens +greatening +greenflies +grenadiers +griefless +grillers +grimiest +grindery +grivets +grizelin +groenendael +groggily +grooty +groover +grouper +grouts +grovelled +growly +gruelly +grumpy +grunzie +guayaberas +guaiasanol +guarantied +guildsman +gullery +gullibly +gunshop +gusseted +guttered +guttier +hackbarrow +haematinon +haemophiliac +hailproof +hainberry +hairgrass +halakists +halftones +halleflinta +hamesucken +hammerers +hammerfish +hammerkop +handstone +haranguing +harmonics +harrying +haruspice +hastifly +haustral +hawknosed +headclothes +headhunts +healthily +healthward +heartblood +heatedness +heelpost +hegemonies +heydeguy +helianthin +heliophobia +hellbroth +helleborin +helmetlike +helotize +hematites +hematogenic +hemiablepsia +hemicollin +hemidactyl +hemidomatic +hemiekton +hemiplegy +hemiterata +hemoglobin +hemology +hennebique +henrietta +hepatomata +hepteris +heraldship +herbarist +heritably +hermetics +herpetoid +heterocerc +hexacoralla +hexarchies +hexaster +hyalescence +hydrachnidae +hydrates +hydrazide +hydromel +hifalutin +highways +hyingly +hylarchical +hillfort +hinderers +hindwards +hinnying +hyperemia +hypohemia +hypopnea +hypothec +hypoxic +hippidion +hippuric +hyraxes +hiroshima +hirsute +hysons +hitchhikes +hlidhskjalf +hobbyist +hobbistical +hoboisms +hodoscope +hoggaster +hollandaise +hollandite +hollantide +hollering +holocarpic +holograph +homomeral +honduras +hondurean +honeycomb +honoring +honoured +hoofbound +hookerman +hooligans +hooters +hoppercar +horation +horntip +horologia +horseherd +horsify +hospitage +hospital +hostaging +hotblooded +hotelize +hotness +housemen +houtou +howlers +huccatoon +huehuetl +humblest +hungrier +huronian +hurrayed +husbandland +hussies +hutzpah +yahooish +yalensian +yankton +yaourt +yappers +yardbirds +yarners +yarrow +yarwhip +ichorrhoea +ichthyol +ideagenous +identifies +ideologies +ideologise +idyllion +idiogenetic +idiotry +idolisms +idolistic +yeasting +yelpers +ignatius +ignifying +iguanodon +yirring +illyrian +illoricata +illuminee +illutate +imbroglio +immature +immitigable +immusical +impaction +impaneling +impartance +imparter +impellor +impendent +imperent +imported +impotence +impresas +impressa +imprest +impugnable +inadequacy +inaneness +inanities +inapplicable +inbreather +incensive +inceptor +inchoating +incogitance +incongealable +increeping +incubating +indetectable +indicolite +indignancy +indirubin +indologian +inductees +indument +indurite +ineconomic +inefficient +inexist +infantive +infernos +inferring +infidelism +infixion +inflation +infringer +infuneral +ingroup +ingrown +inkiness +innately +innovate +inoculate +inrooted +insecticide +inshoot +inshrined +insooth +inspinne +instars +instore +intellect +intelsat +interbreed +interfaces +interfere +intermat +interpale +interpeal +interplea +intertie +intexine +intrados +intrapial +intrenched +introfied +inulases +inwound +inwraps +iodonium +iodophor +yohimbine +yokeldom +ioniums +irideous +irishly +irritate +isleless +ismaelism +ismaelitic +isocephalic +isocheims +isochimes +isolates +isophasal +isthmics +ytterbia +yukaghir +yuruna +iwberry +jackpudding +jaguarondi +jailhouse +japishly +jarveys +jasminum +jatrophic +javitero +jawfishes +jazzlike +jean-christophe +jessamies +jillions +jimberjawed +jimmying +jostles +journaled +judiciary +jumblers +jumbucks +juncoides +junkets +jurassic +justing +juvavian +kailyards +keelsons +keeshonden +keeshonds +kehilloth +keyboards +keyholes +ketonimid +keurboom +kibitzer +kiddushes +kimeridgian +kingcups +kingsize +kissers +kytoon +kleistian +knappers +knifeless +knockoffs +knothole +knouts +knowledged +knulling +kohlrabies +koimesis +kolinski +kookery +kousso +krakowiak +kristin +kuvasz +laborsome +laceflower +lachrymable +laciniform +lacquerer +ladderwise +lageniform +lagniappes +laliophobia +lamarckism +lambskins +laminating +lampstand +landholding +landscaping +landsting +languished +lapulapu +larcinry +largeness +laterigrade +latinized +latirus +lavature +lavenders +lazybone +lazyish +lazuline +lazulis +leaderless +leaseholds +leashless +leaveless +leftness +legatorial +legumins +lemmitis +lennilite +lepidity +leucocism +leucojum +leucophane +leveraging +levigates +libellist +liberalism +liberator +libytheidae +libration +lyctus +lievrite +liferoot +lifeways +ligaments +lightest +lightning +likelihood +limbuses +liminess +limpidly +lyngbyaceae +lingtow +lyricise +lysimachia +litation +literato +litotes +lyxose +localness +lodicules +loftsman +logicity +loginess +logophobia +logrolled +longeron +longobardic +longship +longsome +loopers +loricarian +loviers +lowigite +lowlands +lowlifer +lubricant +luckiest +lugsails +lumpens +lunchers +luniest +lunkers +lupinine +luteins +lutraria +lutrinae +macabreness +macartney +machismos +macrocosm +macrograph +macromazia +macrozamia +madreporacea +madrilenian +maenadically +magistral +magnetify +magnetize +mahzors +maieutics +mailboxes +maintains +makership +mallophagan +mamelukes +mammalogy +mammalogical +mammutidae +mandarinate +mandritta +mangonels +mannoses +mantises +marauders +margarins +marginicidal +marinates +marmatite +marshalcy +marshalman +martiloge +martinet +martingale +maskanonge +masochism +masseter +masticot +mastoids +matagory +matchless +matchmaking +matiness +matrons +mattedly +mattulla +maximize +maximus +mealworm +meaningly +measurer +medianity +medicamental +medusalike +meetness +megalensian +melampus +melanoderm +melanous +melopiano +membranelle +membranula +meningioma +menoplania +menoxenia +mentery +mephitinae +mercantile +merciment +mercurial +merganser +meridional +merocrine +merrily +mesentera +mesitite +mesocranic +mesohepar +mesomeric +mesosoma +metaborate +metallised +metamery +metanomen +metaplasm +metatheria +metergram +methanolic +metregram +metrized +mezuzah +myatonic +mycoplana +microbrachia +microbus +micromelic +microseme +microzoa +midparent +midpoint +miffiness +milkless +millimole +milwaukee +mimickers +mineraloid +minious +minitant +mynpacht +minuses +minuter +myosis +myrabolam +miracidium +myrmicidae +mirrored +misatoned +misbiassed +misbinding +miscipher +miscopy +miscredit +misdirect +miseducate +misenus +misguggle +mislearned +mismanager +mismoved +misogallic +misparse +missus +mistcoat +mistful +miswired +miswish +mythos +mitoses +mittens +mniaceous +mobproof +moderates +modiation +modulant +modumite +molecular +mollient +mollifies +moneyman +monetise +mongolian +monilioid +monocline +monogerm +monokini +monomark +montaging +montanin +montero +moodiest +moosebird +moralism +morceaux +morfrey +morocota +morphemic +morpion +moshavim +moslemin +motors +moulten +moults +mourns +mousier +moussaka +mouther +mowstead +mozarabian +mozetta +muckment +mucusin +mufflers +muyusa +muktatma +mullers +multiped +multum +mummify +munnion +muradiyah +muraenoid +murillo +murkly +murrey +murzim +muscicole +mushru +muskish +musths +mutagens +mutedly +mutillid +nahuatlecan +nayword +naloxone +nanocurie +napellus +nappiest +nastily +natuary +nauticals +necrophil +necturidae +needlemaking +negotiated +negroism +neoblastic +neoclassic +neonomian +neossine +neotype +nervism +nesters +nestling +netheist +neurergic +neurofil +neuronal +newsful +newstand +nextly +nidulus +niellist +niggardize +niggertoe +nighters +nightfish +nihilist +nimious +ninepins +nitrolic +nivellate +nodality +nonaccepted +nonamendable +nonanarchic +nonaphasic +nonblockaded +nonblooded +nonbreakable +nonbreeder +noncasual +noncausal +nonchokable +nonciteable +noncredence +nondairy +nondeist +nonfebrile +nonhuman +nonplacet +nonpliable +nonsabbatic +nonsaleable +nonserif +nonspecie +nonteachable +norites +nosairian +nosebleeds +nosohaemia +nostalgic +notating +notchboard +notional +noveldom +novellas +nucleates +nugacity +nullism +numeracy +nutates +nutty +oarfishes +obligatos +obligatum +obliques +obouracy +obscenely +obsidional +obtests +obtuser +occultate +oceanarium +octachordal +octactiniae +octaeterid +octameter +octodecimal +odontalgic +oecumenian +oestrin +offhandedly +offishly +ogrisms +oilheating +oiltight +okruzi +oligochaete +olonets +omittance +omitter +omniarchs +omophagy +onymatic +oniscus +onomancy +oogametes +opaquing +operagoer +operatical +operetta +ophiurid +opticly +orality +orbitelar +orchestic +ordures +oreamnos +orients +ornament +orphancy +orthose +ortygan +oscillated +osculated +osnappar +osseins +ossifier +osteitic +osteogen +ostracode +otorrhea +outbaking +outbragged +outcept +outcook +outcut +outfawn +outflank +outflue +outgambled +outhired +outkill +outlier +outlined +outoffice +outpaces +outpeer +outray +outrank +outrate +outreached +outscape +outset +outshake +outslid +outsped +outtalk +outtear +ovately +overably +overblanch +overboard +overbore +overbow +overcapable +overchased +overcup +overdazed +overdried +overfilm +overflog +overgamble +overlash +overlave +overleer +overline +overmind +overneat +overrim +overtoe +overwake +overweak +ovulated +owelty +oxammite +oxcarts +oxyacids +oxydasic +oxygon +oxtails +padcluoth +paedology +paedological +paillette +paintably +pairwise +pakistani +palaeograph +palaeophile +palagonite +palatally +palmipedes +palpitate +palpless +paludrine +panathenaean +panderers +pandurate +panhandling +pansmith +pantoum +papality +papyrian +papists +parablepsia +parachaplain +parachutic +paracmasis +paracress +paradeless +parageusic +paralleler +paramecium +paranuclei +pararctalia +parentate +parleyer +parousia +parricidial +pasteur +pastiches +pasture +patellula +pathless +patinize +pauraque +paviors +pavisor +paxillate +peculium +pedagogues +pedantize +pederastic +pediadontic +pediculated +pediculati +pediculicide +pedicures +peirastic +pelargonic +pelleting +penalises +penchants +penduline +penlites +penorcon +penutian +peoplish +perborate +percents +perforata +performed +periauger +peridermic +perijove +perilune +peripherad +perisome +permits +peroxided +perscent +personage +personal +perturb +pesthole +pestify +pettiagua +petunse +phagocyte +phalangitic +phalanxes +phantasmag +pharisees +phasiron +phenacetine +phenetole +phenixes +phenocoll +phenolated +phenoxide +phycitidae +physicked +phlebitis +phlogisma +pholidota +phoronida +phosphide +photechy +photism +photoeng +photogen +photogs +photonic +photopia +phrynidae +phulwara +pianisms +pianistic +piblokto +picarooned +pictural +pigeonite +piggybacks +pigroot +pilaster +pililloo +pilloried +pilotman +pinecones +piniform +pintails +piperidin +pipkinet +piquiere +pyralidan +pyralis +pyraloid +pyrexic +pyridine +pyritic +pyrogen +pishogue +pisidium +pistaches +pistachio +pistoled +pitcairnia +pitiedly +pitying +pitless +pitmaking +pituite +pixilated +placentoma +placodermal +placodont +plagioclase +playgirl +playoffs +plaister +plaiters +playward +plantlet +plantlike +plasmagenic +plastered +plastids +plateaux +platinoid +plebianism +plebiscite +plecotinae +plenties +plenums +pleuroid +pliskies +plosion +plouky +plumbagine +plumcot +plumdamas +plummet +plummy +plumule +plunging +pluries +plushes +plussage +pneograph +pocketing +podicipedidae +podsols +podzolic +poetito +poetized +poitrail +pokomoo +polyamide +polygalic +pollenate +pollux +pompilidae +pondokkie +ponying +poorish +poplitic +popply +poriferal +portland +poseuse +postdate +postfact +posting +postpaid +potbellied +potentee +pothook +potoos +potpies +pouchlike +pounding +pouring +powders +practicing +pratty +preachings +preacness +preadapts +preatomic +prebenefit +precambrian +precents +prechordal +precising +preclaimer +precombine +preconfer +predative +predawns +predeceases +predicates +preeligible +preeners +preentail +prefeudalic +preformed +prelithic +preludes +preludio +premorbid +prenaris +prenomen +preobtain +preofficial +preordain +prepacking +prepays +prerefined +prereject +prerelate +presley +presser +presteel +pretonic +prevalue +prevent +priapus +priestal +priggess +primary +primeur +primitiae +princeps +princify +printer +prionine +prismy +prisoned +prittle +privant +proavis +probings +problems +procaines +proclive +procured +prodroma +producer +profaning +profiles +profundae +profuse +progamete +progeny +proleague +promisee +pronging +prononce +proofing +propjet +proreader +prorebate +prorecall +proscenia +prosier +prosodal +prosodiac +prothmia +proximad +proxime +pseudaphia +psychon +pteridoid +ptomainic +publicly +pucksey +puddingy +pueblito +puerpera +pugilant +pulicose +pullalue +pumpkin +punaluan +punctate +pupilate +purbeckian +pureayn +pursue +purty +pussy +putchuk +putois +putter +quadplex +quadrangle +qualmish +quarry +quarter +quartin +quassin +quatrin +quebrith +quemeful +querent +quesited +quicklime +quietened +quillais +quillon +quinyie +quinnet +quintar +quints +quippu +quittal +quomodo +racemisms +rachitism +rackettail +rackingly +rackwork +radarscope +radiocarbon +radiolitic +radioteria +raillery +raincoats +ramellose +rammermen +randannite +rangeless +rankwise +ransomable +rasters +rastling +ratatats +ratchety +ratheripe +rattails +raughty +ravelers +ravelins +ravelling +ravisher +reaccelerated +reaccount +reaccusing +reappliance +reapplier +rearguing +rearising +reattaches +reattired +rebozos +receptor +recidivated +reciprocal +recommendee +recompete +recompiled +reconclude +recreating +rectrices +redamation +redeclining +redeploy +redesigns +redespise +redoubler +redounds +redrying +redrives +reduzate +reeffishes +reenclosed +reevokes +reexhibit +referring +refinancing +refinery +reflation +reflexing +refought +refugium +refuting +regalement +regalness +regimented +regionals +regorging +regraduate +regressed +regroup +regrown +rehammers +reimpart +reimpose +reinjure +reinvoice +reissued +relacquer +relatival +releasably +remedying +remeditate +remigrated +renegating +renovate +reophore +repaginated +repower +repress +reprint +reprobate +repugns +repulsed +reputable +reradiates +reschedule +rescous +researcher +resecting +resents +reserval +resewing +reshipped +reshoeing +reshoot +reshuffle +residencer +residues +resimmer +resinfiable +resizer +resolved +respicing +responded +restaging +restocked +restore +restow +resumes +resurfaced +retaught +retemper +retinite +retinker +retinula +retiring +retotaled +retreatal +retrenched +retroact +retrocecal +revacating +reversal +revibrate +revives +rewearing +rewound +rewraps +rhabdosome +rhagadiform +rhyton +ricinulei +ricochets +ridicules +rigescent +rimeless +rindless +ringnecks +riptides +rituals +riverbank +riverine +riverman +roadblocks +roadster +rocketeer +rockiest +rodentian +romagnole +rondelier +roofward +rookeried +roomful +roommate +rootages +rootier +rooving +rosery +rosillo +rosiny +roubouh +rouping +ruction +ruddiest +rufous +rulings +rumpadder +runkles +runneth +runtime +rutelian +saccharifier +saddleless +sagebrush +sagginess +saintly +saintlike +salacious +salampore +salariats +saltery +saltmaker +salvifics +samolus +samshus +sanitised +santirs +santols +sanukite +sapiencies +sapindales +sapogenin +sarcolemma +sarcophagic +sarothra +sassagum +sateless +satiating +satinlike +satirise +satrapy +satrapical +saucepot +savory +saxifragaceae +scabiophobia +scannings +scaphites +scapiform +scapolite +scarfskin +scawtite +scenarize +scentful +schediastic +schematics +schiavoni +schnapper +scholarian +scholium +schoolmaam +schoolman +schorly +sciaticky +scincoidian +scintler +scivvy +scleranth +sclerosed +scobiform +scoreboard +scorepads +scotchmen +scotopic +scrapbook +scratchman +screwier +scrieves +scriggly +scripto +scrublike +scrummage +sculpted +scumbling +scuppet +scurril +scuttle +seafowls +seamster +searness +seashells +seatless +secours +secreting +secundum +seemlily +seignorage +seignoral +seiyukai +selective +selenates +semaphore +sementera +semibarbaric +semichemical +semicircled +semiclose +semicrome +semicurl +semideltaic +semihoral +semimatt +seminifical +semipupa +semishaft +semitone +senilism +sennits +sensoria +septicemia +septleva +serfship +serioso +serjeancy +serphoidea +sertion +sertule +services +sescuple +session +setdown +setout +settles +setups +setwise +sextole +shadberry +shadowing +shaggymane +shaivism +shakedown +shakeout +shakeups +shaktism +shamoys +shanksman +sharezer +sharpens +shattered +shawllike +sheeneys +sheepwalk +shellshake +shelterage +sheraton +sheroot +shibboleth +shieldfern +shipbuild +shipcraft +shipyard +shiplaps +shipplane +shivaism +shivers +shlimazl +shochetim +shoofly +shooter +shopboy +shortcake +shovels +shredders +shrewder +shrieking +shrives +syagush +sicklily +sycoceric +sycones +sienites +sightly +sigillarid +significian +signiori +silicifies +silicons +syllabaria +sillery +sylviid +simulate +synacmy +sinapism +synapte +sincipita +syndicate +synergic +sinewing +syntagma +syphered +siphons +syrens +siskins +sissone +sixtine +skatings +skewers +skiddiest +skimpier +skirret +skirter +skittled +skyugle +sklents +skully +slangrell +slaverer +sleepyhead +sleepry +slenderer +slyest +slighty +slithered +slumps +smackeroo +smashboard +smellful +smirching +smirking +smitten +smokelike +smokers +smoorich +snarlish +sneerful +sneeshing +sniffily +snipelike +snipers +snivels +snobbery +snorker +snubbers +snuffkin +sobersided +socialism +sociogram +socrates +sodiums +sodomite +softboard +soybeans +solidism +solunar +somites +sompner +sonship +soonly +soother +sordello +sorehawk +sotols +soughing +soundheaded +soupfin +soupon +sourball +sources +sourdre +spacewalked +spanceling +sparganiaceae +sparily +sparkler +spavins +speakablies +specificated +speckledy +speltoid +spenders +speranza +sperling +sphecius +sphendone +sphenion +spherula +sphygmic +spiciest +spiflicate +spyhole +spikehole +spillages +spinelet +spinelike +spiracula +spirifer +spirited +spitish +spizella +splashy +splining +spoliaria +spondaics +spooler +sporangia +spouted +springald +springle +sprucer +sprugs +spunks +spurdog +squares +squaws +squibbing +squinched +squint +srikanth +stabilised +stagecraft +staggerer +stagiary +stagiest +stagskin +staynil +stalemated +stalklet +stalklike +staminode +standards +standers +stanzas +starers +starfish +starling +statize +status +steadiers +steamers +stearyl +steckling +stemming +steppes +steptoe +stereome +stiacciato +stickboat +styles +stillman +stinkball +stipels +stockier +stockmen +stokavci +stomatic +stonehand +stonier +stooges +stools +stoping +stoves +stower +straddleback +strains +strangled +strawen +straws +streetage +stress +striatal +striding +striker +strobile +strolld +stroth +struv +stubbles +stuccos +stupes +sturdied +subadjacent +subadult +subalgebraic +subcosta +subcranial +subdeliria +subducing +subduple +subgallate +subhooked +subjectable +subjugable +sublethal +sublimes +subloral +subnets +subpool +subradiate +subrepand +subscience +subsellia +subsmile +subsume +subucula +succour +sucrose +sufficience +suffocated +suffragial +sugarloaf +sulfamine +sulfonal +sumbulic +sumerian +summula +sunbeamy +sunders +sunfast +sunnier +sunward +superceded +supracaecal +surcharge +surely +surmit +suttas +suzanne +swampine +swankier +swanmark +swashing +swattle +sweatier +sweepdom +sweepier +sweetened +sweetman +sweptback +swifter +swimmer +swinebread +swingman +swipple +swirls +swythe +swollen +tabernacles +tablature +taborets +tabourer +tabourin +tabulary +tagliarini +tailcoats +tailgating +tailory +tailspin +takhtadjy +tallying +talocalcaneal +talpetate +tamehearted +tanchelmian +tangents +tanzanian +tariffize +tarquin +tastably +tatarize +tattooed +taurus +tautens +taxeopod +taxying +taxless +teagardeny +teardown +tectricial +teethers +telegrams +telephone +telescope +tellinoid +telluric +teloptic +temperance +temperer +templum +temporal +tensely +tenurial +teroxide +terranes +tersion +tessaradecad +tetanize +tetanus +tetrachical +tetragon +tetrahedra +tetramer +tetramin +tetrapoda +tetryl +tettigidae +tewsome +thalidomide +thaneship +thegither +theists +theomagics +theorum +therapsid +therebeside +therefore +thermels +thickening +thievish +thinghood +thynnidae +thiobacilli +thiolactic +thiophene +thioxene +thirdendeal +thirty +thondraki +thorny +thrawing +threatened +thrifts +thriver +thumbnail +tyburn +tidemarks +tiderips +tiefenthal +tigerism +tightish +tilesherd +timbrelled +tinkerer +tinselled +tipburn +typefaces +tipless +tyramin +tiredest +tiremaker +tiresias +tironian +toasty +tobaccoism +tobaccosim +toboggans +toddymen +toffyman +toilets +toitish +tolerated +toluids +toluole +tonguer +toomly +tooting +tornesi +toroids +torqued +torrefied +torsalo +torteau +tosily +totty +totuava +tousy +tovariaceae +towards +towers +townman +towser +toxicaemia +toxicon +toxotae +trachyte +traction +trailboard +tramells +tramyard +trammelhead +trampcock +trampdom +tranceful +transbay +transect +transom +travelog +trecento +treeship +trembling +tremellaceae +trepangs +triadist +tricarbon +trickful +trierarch +triones +triplet +triply +tristam +trisula +tritor +trizoic +trochlear +troller +tropics +troppo +troths +trotol +trounced +trudging +truism +trutta +tsarevna +tsktsk +tsunamic +tubeform +tubules +tularemia +tummies +tumoral +tuneably +tunnland +tuppence +turgite +turkey +turnoff +turtled +tussled +twangler +tweenies +tweesht +twisted +twitchel +twoling +uigurian +uitotan +uitspan +umbratical +umpirer +unaborted +unabsurd +unabundance +unadmirable +unadopted +unalerted +unaltered +unamerceable +unangry +unappended +unattacked +unavailable +unbalconied +unbarreled +unbarricaded +unbedraggled +unbeguiled +unbeholden +unbeloved +unbendably +unbenight +unboring +unbounded +unboxes +unbragging +unbreast +unbreeches +unbridgeable +unbroiled +unbroken +unbullied +uncenter +uncentre +unchaining +unchiseled +uncialize +unclever +unclipped +unclubby +uncoaxial +uncombined +uncrest +uncrisp +unculted +uncupped +undamnified +undeducible +undeferred +undelight +underbalance +underbodice +underboil +underchime +underclub +underdone +underfiend +underfire +undergird +underkind +underlay +underseam +undertide +undertied +undowned +undraws +undress +unduloid +unelectable +unenchant +unequaled +unevocable +unfasten +unfauceted +unferried +unfevered +unfiducial +unfinish +unfoaming +unfogging +unfooted +unformal +unfreeze +unfriended +unfrugal +unfuelled +unfundable +ungambling +ungloved +unhaggling +unhorse +unhumbled +unhushed +uniflow +unimbibing +unindexed +unironed +unitive +unjapanned +unkempt +unkindred +unlaving +unleveled +unlighted +unlinks +unloathed +unloyal +unmackly +unmaligned +unmanly +unmanlike +unmanner +unmantle +unmatchable +unmental +unmetred +unminted +unmiracled +unmiry +unmiter +unmitre +unmodified +unmould +unmown +unpalpable +unpapered +unpasted +unpegging +unpitched +unplashed +unprimed +unprince +unprop +unramified +unrandom +unrankled +unreceding +unrecent +unrelated +unrisen +unrobing +unrowed +unsaccharic +unsayable +unscaling +unseven +unshamefaced +unshelled +unshocked +unshore +unsicker +unsmeared +unsnatch +unsolar +unstanch +unstate +unsteep +unsunk +untacking +untaste +untaxable +untermed +unthewed +unthreaded +untidier +untipt +untoiled +unturf +unugly +unuseable +unvalued +unvendable +unwaking +unwarbled +unwarned +unwearied +unwhite +unwilled +unwove +upbuoy +upcover +upcrowd +upcurled +uperize +upgrow +uppluck +upsets +upspew +upspread +upstare +uptears +urbanest +urbanized +urceolate +ureteral +urobilin +urohyal +urologic +urticaria +useless +uspanteca +utensil +uucpnet +uxorial +vaccinist +vacuolate +vacuums +valbellite +vallums +vamosing +vampyre +variety +varnished +vasovagal +vedettes +vegetism +vehemency +velatura +veliform +velocipeded +veloute +venantes +venation +venditate +venially +ventifact +ventose +verbalize +verbenone +verbomania +verdancies +verdicts +vergery +verriere +vetchling +veuglaire +vibists +victrola +vietminh +vilipended +villancico +villanella +vinagron +vincular +vinous +violins +virbius +virgater +visammin +visionic +vitameric +vitaminic +vitasti +vitrailed +vitrics +vivency +vivifier +voyaging +volleyed +volvell +vortical +vouchsafe +vulgars +vulpinae +wachuset +walycoat +wamefuls +wanrest +wanters +warpers +warragals +washdays +washings +washway +wastemen +wasterie +wastern +watchdogs +watergate +wattles +waveshape +weariest +webworn +wedgewise +wednesday +weelfaured +weeniest +wehrlite +wellyard +wellmaker +wellring +whaleries +wheatears +wheelabrate +wheelsman +whelpish +whenever +wherves +whichway +whinnier +whipray +whirley +whirling +whiskey +whisking +whistled +whitebill +whitfinch +wholely +wholesale +whooper +whorish +whumps +widdendream +widewhere +wigglers +wigwagger +wildsome +willets +windfallen +windfalls +windigos +wiredancer +wirehaired +wiselier +wissing +wistaria +wistit +witchlike +witchweed +witcraft +withnay +witloof +witwall +wizards +woeness +wolframic +wollomai +woodblock +woolfell +wordably +worldman +wormgear +worset +wouhleche +wounder +wrathing +wrawler +wreakers +wreathy +wriggles +writing +wronger +xylose +zamouse +zaptiahs +zaratite +zesting +zeuxian +zincifies +zinkify +zithern +zoogleas +zorgite diff --git a/words_alpha_list.txt b/words_alpha_list.txt new file mode 100644 index 000000000..4a0e22343 --- /dev/null +++ b/words_alpha_list.txt @@ -0,0 +1,3771 @@ +abactinally +abatements +abbreviatable +abettors +abomasusi +abreption +abrogative +absconders +absinthol +absorbancy +acceptavit +acceptors +acclimation +accounter +accumulate +acenaphthene +achronism +achroous +acylation +acknowledge +acolytes +acquisita +acquitted +acriflavine +acromegaly +acronychal +acronycta +acronyx +actinocarp +activates +acuminose +acurative +addressing +adelocodonic +ademonist +adiabatically +adipopexia +adsessor +adulthood +advantaging +adventual +adverting +aeolipyle +aequorin +aeriality +aerofoils +aerometer +aetosaur +affectation +affricative +afghanistan +africanist +aftercareer +agalactous +agamogenetic +agapornis +agariciform +aggresses +agnations +agrypniai +agrology +agrological +aichmophobia +aydendron +airdrops +airmonger +aistopoda +albedometer +albuminoid +alchemising +alertest +aleurodes +alfaquins +algaeology +algaeological +alienation +alineation +aliturgic +alkalinize +alkoxyl +allenarly +allentato +alligation +alloquial +allottable +allthorn +almoravide +alopecist +alphonso +alpinery +alpinist +alrighty +altarist +alternated +altiplano +altiscope +amanitins +amarillos +ambulating +amelcorns +ameloblast +ametropic +amiableness +amyluria +ammiaceous +amoebobacter +amoralize +amortise +amphiboles +amphisbaenic +amphiumidae +amputees +amusedly +anacamptics +analysis +anapodeictic +anastaltic +anchoritic +andesinite +androclinia +anepiploic +aneurism +angelologic +angerless +angiectopia +anginous +angioblast +angiotribe +angiport +anglemeter +anglophobia +angulates +anhydrated +anhydremic +anilinism +animately +animaters +anisocercal +annapurna +annually +annullate +anomalipod +anomalure +anophelinae +anorchism +answerable +antalkaline +antalkalis +antarctalia +antepaschal +anteporch +anterior +anthozoa +anticathode +antichlor +anticomet +anticult +antifowl +antigalactic +antimarian +antislip +anvilling +apheresis +aphrodisia +apiology +apneumona +apoharmine +apokreos +apoplectic +aporetical +apostacy +apotracheal +appeasers +apperceive +appertain +applicancy +appliedly +applying +appointed +appraisable +apropos +aquamarine +aquiform +araneiform +arbitrages +arbuscles +archaeolith +archaicness +archdiocesan +archenemies +archibenthic +archigony +archilithic +archimagus +archiplasm +archsewer +arcticward +arenilitic +areometer +argillitic +argiopoidea +argumenta +arhatship +aryanism +arightly +arrastre +arrests +arrivals +arrowy +arsenium +artilize +arugulas +asbestos +ascendants +ascyrum +ascophore +asyndetic +asparagyl +aspergilla +asphalter +asplanchnic +assafoetida +asswaging +asterales +asterioid +asthenies +atheromas +athetosic +athyris +athyroid +athreptic +athrogenic +atonally +attargul +attitude +attunes +auctorial +audiophile +augments +aulophobia +auntlier +aureoline +aureous +auriculo +auriscalp +auslaute +autoclave +autoharp +automated +avanters +avernus +aversant +avidious +avocation +avouching +awfully +aworry +azurite +babesiosis +bacilliform +backslashes +backswept +backtracking +backwardly +baconianism +baculiform +baguettes +baldnesses +balistarii +balletomane +ballonets +bananaquit +bandwagons +bannerols +barbarising +bardolphian +bariatrics +barytone +barkeepers +barkpeeling +barleybrake +barleybreak +barometz +baronetical +barracouta +barspoon +bartizaned +bartonella +basidorsal +basilateral +basiotribe +basipodite +bassanello +bassetite +bastinading +bathyscape +batidaceous +batonist +batrachoididae +battailant +battement +baulkiest +bawsunt +beautihood +becarpeting +becrowding +bedazzles +bedposts +beeftongue +beestings +beetroot +beginnings +beguileful +belinuridae +bellwaver +bemajesty +benediction +benzolate +bergamots +beryllate +berlinize +beshrivel +besmircher +bespangles +bespreading +bestirred +bestridden +beswarms +betattered +bettering +bevellers +bewhisker +bewitching +biathlons +bibitory +bibliophobia +bibliotics +biddulphiaceae +bifarious +bigaroons +bikukulla +bilifaction +bilocation +biloculate +bimillennia +bimorphs +bintangor +bioassayed +biologize +biophyte +biovular +bipartite +byplays +birthmark +bisantler +biscutate +bisinuate +bismarckian +bissonata +bittings +biunity +biweeklies +biwinter +blackfriars +blarneyer +blasphemes +blastoffs +blazoning +blennogenic +blethering +blighters +blissful +blockwood +bloodwit +blowtube +bluegums +boatloading +bodyplate +bogberries +bogwoods +bogwort +boycott +boilerful +bolstered +bombacaceous +bonhomies +bonneting +boobyism +boohooing +boomless +boondoggled +bootblacks +bootery +bootmaker +boozers +bordroom +borneols +borrowed +boskiest +bosporan +botanist +bouillon +boulevard +bounceably +boundary +boundure +bountree +boviform +bowerlet +bowerly +bowerlike +bowknot +bowlmaker +boxboards +brachiation +bractlets +brahmaness +braquemard +brawlys +breakshugh +breathily +breediness +breezeful +bremeness +brevetcy +breviary +breviconic +brewises +brezhnev +bridgeless +bridgemaking +brigatry +brightish +bromauric +bronchocele +bronchus +bronzy +broodily +brooklime +broomweed +browser +browsick +bruiting +brushier +brushmen +bufotalin +bugproof +bulgurs +bulliest +bullnose +bullpup +bullskin +bumblekite +burnished +bushlands +busticate +butcherer +buzzy +cacidrosis +cacogenesis +cacomistle +cacophony +cacophonical +caecotomy +calaminaris +calciphyre +calcitonin +calculist +caligraphy +calypter +callitriche +calvarium +calvities +campanular +camphorate +cancriform +candidature +canephoroe +cannibalized +cantrips +capiteaux +capitolian +caponiers +caponiser +caponniere +captaincies +carbazylic +carboluria +carboxyl +carburised +carcharodon +cardiograph +cardioplegia +cardiorenal +caressant +caryatids +carkingly +carlyleian +carlylese +carotenes +carouser +carpenter +carpetweed +carrioles +carroty +cartelism +cashdrawer +cassalty +cassiopeid +castores +catalanist +catamneses +cataphracted +cataphracti +catarinite +catechisms +catechistic +catenative +catholicon +catteries +catwort +causeries +cavernlike +cavitates +celibatist +cellarway +cellfalcicula +celticist +celtophil +cencerros +cenogenetic +censorate +censurable +centipedes +centupled +cephalous +ceramicist +ceratites +ceratomania +cerithioid +cerusite +chaenomeles +chaetosoma +chaiseless +chamecephaly +champignon +chaplaincies +charwomen +chastening +chattery +chaucerism +chaussees +cheesemaking +chemigraphic +chemotactic +chemurgy +chemurgical +cherishing +chickories +chiliasts +chimpanzee +chippewas +chiropodic +chirpily +chivariing +chloranaemia +chlorellaceae +chloropal +choiceness +chondrioma +chondrule +choppers +chorioids +chorisis +chortles +chowries +chrysalida +chromium +chucklers +churchful +churingas +chutist +cyaphenine +cyathium +cycadaceous +cicatricula +cyclitis +cilicious +cymation +cymophane +cinchotine +cingulum +cyniatria +circleting +circumduce +cirurgian +cisjurane +cisleithan +cysteine +cystidean +civilizade +civilizee +claytonia +clangoring +clangoured +clarifiers +classily +claudetite +clausure +cleanliest +clearhearted +clementine +clerically +clerkdoms +cleveites +climatarchic +clinically +clockwise +clomiphene +clotting +clovery +clubster +clumsier +coannexes +coarsest +coassert +coassumed +coasters +coatroom +coattails +coauthered +cobleskill +cobwebbery +cockneyfied +cockshut +cocottes +coderives +coenures +cofactors +cognatus +cogredient +coyness +coislander +cojuror +colascioni +colazione +colleagues +collecting +colloque +colonials +colopexia +colophenic +colubrinae +columbite +columels +cometary +commandeered +commercing +companero +companion +compering +competible +complanate +complicacy +comport +concavely +conchitis +concludible +condensate +confabulate +confederated +confrater +congeners +congenital +congiaries +congress +conjoint +conjugated +conjunct +connivance +conniver +conodont +consigns +consumo +contented +contoise +contrude +cooingly +cookeries +cookout +cooniest +coonskin +coonties +coparceny +copyism +coplots +coproduce +coprosma +coquets +coquito +corbeilles +coresidence +corinthiac +coryphaei +coryzal +corkiest +corkwing +cornette +cornmeals +cornuted +corollet +corollike +coromandel +corridor +corticole +cosmetical +cossets +costumed +cotabulate +cotenancy +cotillon +cotters +couchette +coulombs +courses +courter +courtin +cousins +covalency +coverlet +coverside +coverup +cowardish +coxcomby +coxcombical +crackleware +craniomalacia +crankiest +craspedum +cravenly +crebrity +credentialed +creepiest +creosote +crepehanger +crepeiest +cresoline +cryalgesia +crimison +crimsoned +criticule +crowdweed +crudity +cruising +cruisken +crummier +crusados +crusts +cuadrillas +cubicities +cuculus +culicoides +cullises +cultrate +culture +culvers +cumulated +curcuddoch +curdlers +curettage +curioso +curledly +curlily +curtalax +cuspidine +customed +cutdown +cutesier +cutinise +cutlases +cutlets +cutlips +cutout +cuttles +cutups +czarship +dacryuria +daywrit +danewort +dartrose +dawsoniaceae +deadeningly +deadworks +deathshot +debamboozle +debarkation +debaucheries +debordment +debussing +decalcomanias +decerebrize +deciduity +declarative +declension +decompiler +decorous +decouples +decremental +decrypted +deepfroze +deerberry +deescalating +defections +defeminized +deferrized +definitise +definitor +deflators +deflexure +degausses +deglaciation +degreewise +dehorting +deywoman +delectating +deliberates +delineating +deliquesce +delivery +delouses +deltation +demibuckram +demigriffin +demisuit +demivolt +demobilize +demodulate +demoniast +dempster +denasalized +dendrocoele +denitrated +denominate +denounces +dentalized +denumerable +denunciated +dephycercal +dephlegmated +depilator +deplaster +depletion +deploring +deprivate +derbylite +deresinate +derivers +derogating +derrickmen +describably +descriers +desegregated +desiccative +designers +desmidiales +desmodus +desolates +despatches +desponder +despotat +destuffs +deterring +developpe +dewberry +diagonally +diakinesis +dialysing +dialyzer +diamondize +diaphyseal +diaphonies +diaschisis +dichotomal +dichromasia +differencing +digestive +digladiator +dihexagonal +dykereeve +dilatants +dilatator +dimensive +dimethoate +dinginess +dinitrate +dinitrile +dioctahedral +diodontidae +dioecious +diopsides +diphygenic +diphtheric +diplodus +diplomaing +diplotene +disarranged +discanting +discernible +discipline +disclaiming +discommode +discophile +discredited +discrepate +disembogue +disgavelled +disgress +dishelming +dishouse +disimpark +disjecting +disjoinable +disjoint +disjunct +dyslectic +dislodging +dismarket +disobliger +disomus +disparageable +disparple +dispeller +dysphemia +disponer +dispraise +disroot +disrump +disseized +dissuader +distancing +distrait +disunified +ditchdown +dithyramb +ditroite +diureses +diurons +divekeeper +divertila +divinely +diviners +divorcees +dochmiasis +dockyards +dogmatize +dogwinkle +dollymen +dolomitic +domiciliate +dominates +dooryard +doormaker +dormette +dormeuse +dorosoma +dorsigrade +doubleheader +doughty +downcut +downlier +downset +dowsabels +draftsmen +dragonism +drawlers +drawplate +drybrained +dryrot +driveling +drizzle +droopier +droshky +droskies +drossy +drumbling +drumlier +druttle +dualities +duckhearted +ducklings +ducktails +duetting +dulcimore +dumbfound +dumpily +duologue +durative +durdenite +durions +duvetine +earthmaker +earthwall +earwigging +earwort +ebullient +ecchymosed +echiniform +echinoderidae +echopraxia +eclecticize +ecstasies +ectosteal +educatedly +effectless +efoliolate +egoistical +eyeleteer +eightsmen +ejections +elaeothesia +elargement +eldmother +electives +electorial +elementate +elephantidae +elephants +elevenfold +elohistic +elotillo +elsewhere +emasculate +embodiment +emboldening +embolismic +embowers +emendation +emotioned +empathetic +emperess +empresse +emptily +enaluron +encapsuled +encarpium +enclasping +encrust +encumbers +endochrome +endocritic +endoplasma +endostraca +endothecate +energiser +enflagellate +enfoulder +engagedness +enharmonic +enlivens +enneadianome +enoplion +enrolles +ensorceled +enstyle +enstool +ensurance +ensurer +entohyal +entrains +envoys +enweaving +epibolism +epicostal +epigaster +epigonos +epilimnial +epimerite +epimerum +episcleral +episematic +epistlar +epitaphical +epitaxy +epizoon +eponymic +equalized +equative +equipages +equiradical +equison +equispaced +erasement +erasions +erubescence +espouse +esprove +essoins +esterified +estheses +esthesio +estopped +estuant +eteoclus +ethanoyl +etherized +ethylated +ethnicism +ethnogenic +eucrites +eugenist +eulogize +eunuchoid +eupatridae +euphenics +eutony +evechurr +eventual +everting +evolute +evolves +exanthine +excavates +excellent +excerpted +excoriate +excussed +exdividend +execrates +exergonic +exhibiter +exigencies +exintine +exister +exocyclica +exophasic +exoterica +expalpate +explains +explodes +exsculp +exserted +extendible +extracted +exzodiacal +faculative +fairyism +faithwise +falciparum +falseness +falsities +fanflower +fantasts +fantoddish +farnovian +farriery +farrows +fasciculate +fascinery +fatalisms +fatalistic +fatherhood +fatherling +fattiest +fauvette +featherlet +featherlike +featherweed +feldspars +felinity +fellowred +feltness +fenestral +feoffeeship +ferments +fermillet +ferrament +ferryman +ferrites +ferrums +fervanite +festally +fewterer +fiddlerfish +fierasferid +filiciform +filipiniana +fillagreing +filtering +finitely +firebombing +firebricks +firmity +fishnets +fishpool +fissioned +fissipedal +fivepins +flaccidities +flagellates +flaggingly +flangeless +flankwise +flatlings +flavanilin +fleawort +fleysome +flyboats +flichters +flyness +flywinch +flockiest +floodwall +floosies +fluidist +fluorine +fluoroid +flurry +fluxweed +focometer +foenngreek +foetalism +fogscoffer +follying +fondlings +foolship +footfolk +footpaces +footsy +forbearant +forebearing +foredoomed +forefoot +foreiron +forepast +foreshock +foresides +forespeech +forewarn +forgiver +formeret +forsaking +forsung +fortranh +forwoden +forwore +foujdary +fountain +fourbagger +foveolet +foziest +fractural +fraughts +freetrader +freewoman +frenchily +freshest +freshets +friendlier +frigorific +fringillid +frisson +frogeyes +frolicly +froughy +fuehrers +fugacities +fulgour +fulimart +fumaroidal +fumeless +fundless +furcular +furless +furnacemen +fursemide +furuncle +gablatores +galactagogue +gallberry +galleasses +gallicanism +galliwasp +gangliomata +garlandry +garnishes +gascoigny +gasconism +gasoliner +gasoscope +gasteralgia +gauntlet +gauntly +gawkhammer +gecarcinus +gemsbucks +generating +genetmoil +gentianella +gentisate +gentrices +geococcyx +geographer +geomantical +geophagism +geotaxis +geraniols +gerenuks +germanely +germanhood +gestening +ghostland +giftwrap +gigartinaceae +gilravager +gymnogen +gingerline +ginkgoales +ginneries +gypsies +gyrally +girasols +gyromele +giustina +gladatorial +gladfully +gladiolus +glairiest +glassfish +glassteel +glauberite +glaucidium +glycogenic +glycolate +glyconian +glimpses +glissando +glittered +glomerella +glorifies +glossoid +glowfly +glucinum +glucosin +gluemaking +glutamate +glutelin +gnatcatcher +gnathopod +gnostical +gobbledegook +gobernadora +gobletful +goblinism +godparent +goldbricks +goldurned +golliwog +goloshes +goniatite +gonothecal +gooneys +gorgonacean +gorgonian +goutweed +governs +graybeards +grainsmen +graithly +grandaunt +granogabbro +granville +grapeskin +grappling +gravamens +greatening +greenflies +grenadiers +griefless +grillers +grimiest +grindery +grivets +grizelin +groenendael +groggily +grooty +groover +grouper +grouts +grovelled +growly +gruelly +grumpy +grunzie +guayaberas +guaiasanol +guarantied +guildsman +gullery +gullibly +gunshop +gusseted +guttered +guttier +hackbarrow +haematinon +haemophiliac +hailproof +hainberry +hairgrass +halakists +halftones +halleflinta +hamesucken +hammerers +hammerfish +hammerkop +handstone +haranguing +harmonics +harrying +haruspice +hastifly +haustral +hawknosed +headclothes +headhunts +healthily +healthward +heartblood +heatedness +heelpost +hegemonies +heydeguy +helianthin +heliophobia +hellbroth +helleborin +helmetlike +helotize +hematites +hematogenic +hemiablepsia +hemicollin +hemidactyl +hemidomatic +hemiekton +hemiplegy +hemiterata +hemoglobin +hemology +hennebique +henrietta +hepatomata +hepteris +heraldship +herbarist +heritably +hermetics +herpetoid +heterocerc +hexacoralla +hexarchies +hexaster +hyalescence +hydrachnidae +hydrates +hydrazide +hydromel +hifalutin +highways +hyingly +hylarchical +hillfort +hinderers +hindwards +hinnying +hyperemia +hypohemia +hypopnea +hypothec +hypoxic +hippidion +hippuric +hyraxes +hiroshima +hirsute +hysons +hitchhikes +hlidhskjalf +hobbyist +hobbistical +hoboisms +hodoscope +hoggaster +hollandaise +hollandite +hollantide +hollering +holocarpic +holograph +homomeral +honduras +hondurean +honeycomb +honoring +honoured +hoofbound +hookerman +hooligans +hooters +hoppercar +horation +horntip +horologia +horseherd +horsify +hospitage +hospital +hostaging +hotblooded +hotelize +hotness +housemen +houtou +howlers +huccatoon +huehuetl +humblest +hungrier +huronian +hurrayed +husbandland +hussies +hutzpah +yahooish +yalensian +yankton +yaourt +yappers +yardbirds +yarners +yarrow +yarwhip +ichorrhoea +ichthyol +ideagenous +identifies +ideologies +ideologise +idyllion +idiogenetic +idiotry +idolisms +idolistic +yeasting +yelpers +ignatius +ignifying +iguanodon +yirring +illyrian +illoricata +illuminee +illutate +imbroglio +immature +immitigable +immusical +impaction +impaneling +impartance +imparter +impellor +impendent +imperent +imported +impotence +impresas +impressa +imprest +impugnable +inadequacy +inaneness +inanities +inapplicable +inbreather +incensive +inceptor +inchoating +incogitance +incongealable +increeping +incubating +indetectable +indicolite +indignancy +indirubin +indologian +inductees +indument +indurite +ineconomic +inefficient +inexist +infantive +infernos +inferring +infidelism +infixion +inflation +infringer +infuneral +ingroup +ingrown +inkiness +innately +innovate +inoculate +inrooted +insecticide +inshoot +inshrined +insooth +inspinne +instars +instore +intellect +intelsat +interbreed +interfaces +interfere +intermat +interpale +interpeal +interplea +intertie +intexine +intrados +intrapial +intrenched +introfied +inulases +inwound +inwraps +iodonium +iodophor +yohimbine +yokeldom +ioniums +irideous +irishly +irritate +isleless +ismaelism +ismaelitic +isocephalic +isocheims +isochimes +isolates +isophasal +isthmics +ytterbia +yukaghir +yuruna +iwberry +jackpudding +jaguarondi +jailhouse +japishly +jarveys +jasminum +jatrophic +javitero +jawfishes +jazzlike +jean-christophe +jessamies +jillions +jimberjawed +jimmying +jostles +journaled +judiciary +jumblers +jumbucks +juncoides +junkets +jurassic +justing +juvavian +kailyards +keelsons +keeshonden +keeshonds +kehilloth +keyboards +keyholes +ketonimid +keurboom +kibitzer +kiddushes +kimeridgian +kingcups +kingsize +kissers +kytoon +kleistian +knappers +knifeless +knockoffs +knothole +knouts +knowledged +knulling +kohlrabies +koimesis +kolinski +kookery +kousso +krakowiak +kristin +kuvasz +laborsome +laceflower +lachrymable +laciniform +lacquerer +ladderwise +lageniform +lagniappes +laliophobia +lamarckism +lambskins +laminating +lampstand +landholding +landscaping +landsting +languished +lapulapu +larcinry +largeness +laterigrade +latinized +latirus +lavature +lavenders +lazybone +lazyish +lazuline +lazulis +leaderless +leaseholds +leashless +leaveless +leftness +legatorial +legumins +lemmitis +lennilite +lepidity +leucocism +leucojum +leucophane +leveraging +levigates +libellist +liberalism +liberator +libytheidae +libration +lyctus +lievrite +liferoot +lifeways +ligaments +lightest +lightning +likelihood +limbuses +liminess +limpidly +lyngbyaceae +lingtow +lyricise +lysimachia +litation +literato +litotes +lyxose +localness +lodicules +loftsman +logicity +loginess +logophobia +logrolled +longeron +longobardic +longship +longsome +loopers +loricarian +loviers +lowigite +lowlands +lowlifer +lubricant +luckiest +lugsails +lumpens +lunchers +luniest +lunkers +lupinine +luteins +lutraria +lutrinae +macabreness +macartney +machismos +macrocosm +macrograph +macromazia +macrozamia +madreporacea +madrilenian +maenadically +magistral +magnetify +magnetize +mahzors +maieutics +mailboxes +maintains +makership +mallophagan +mamelukes +mammalogy +mammalogical +mammutidae +mandarinate +mandritta +mangonels +mannoses +mantises +marauders +margarins +marginicidal +marinates +marmatite +marshalcy +marshalman +martiloge +martinet +martingale +maskanonge +masochism +masseter +masticot +mastoids +matagory +matchless +matchmaking +matiness +matrons +mattedly +mattulla +maximize +maximus +mealworm +meaningly +measurer +medianity +medicamental +medusalike +meetness +megalensian +melampus +melanoderm +melanous +melopiano +membranelle +membranula +meningioma +menoplania +menoxenia +mentery +mephitinae +mercantile +merciment +mercurial +merganser +meridional +merocrine +merrily +mesentera +mesitite +mesocranic +mesohepar +mesomeric +mesosoma +metaborate +metallised +metamery +metanomen +metaplasm +metatheria +metergram +methanolic +metregram +metrized +mezuzah +myatonic +mycoplana +microbrachia +microbus +micromelic +microseme +microzoa +midparent +midpoint +miffiness +milkless +millimole +milwaukee +mimickers +mineraloid +minious +minitant +mynpacht +minuses +minuter +myosis +myrabolam +miracidium +myrmicidae +mirrored +misatoned +misbiassed +misbinding +miscipher +miscopy +miscredit +misdirect +miseducate +misenus +misguggle +mislearned +mismanager +mismoved +misogallic +misparse +missus +mistcoat +mistful +miswired +miswish +mythos +mitoses +mittens +mniaceous +mobproof +moderates +modiation +modulant +modumite +molecular +mollient +mollifies +moneyman +monetise +mongolian +monilioid +monocline +monogerm +monokini +monomark +montaging +montanin +montero +moodiest +moosebird +moralism +morceaux +morfrey +morocota +morphemic +morpion +moshavim +moslemin +motors +moulten +moults +mourns +mousier +moussaka +mouther +mowstead +mozarabian +mozetta +muckment +mucusin +mufflers +muyusa +muktatma +mullers +multiped +multum +mummify +munnion +muradiyah +muraenoid +murillo +murkly +murrey +murzim +muscicole +mushru +muskish +musths +mutagens +mutedly +mutillid +nahuatlecan +nayword +naloxone +nanocurie +napellus +nappiest +nastily +natuary +nauticals +necrophil +necturidae +needlemaking +negotiated +negroism +neoblastic +neoclassic +neonomian +neossine +neotype +nervism +nesters +nestling +netheist +neurergic +neurofil +neuronal +newsful +newstand +nextly +nidulus +niellist +niggardize +niggertoe +nighters +nightfish +nihilist +nimious +ninepins +nitrolic +nivellate +nodality +nonaccepted +nonamendable +nonanarchic +nonaphasic +nonblockaded +nonblooded +nonbreakable +nonbreeder +noncasual +noncausal +nonchokable +nonciteable +noncredence +nondairy +nondeist +nonfebrile +nonhuman +nonplacet +nonpliable +nonsabbatic +nonsaleable +nonserif +nonspecie +nonteachable +norites +nosairian +nosebleeds +nosohaemia +nostalgic +notating +notchboard +notional +noveldom +novellas +nucleates +nugacity +nullism +numeracy +nutates +nutty +oarfishes +obligatos +obligatum +obliques +obouracy +obscenely +obsidional +obtests +obtuser +occultate +oceanarium +octachordal +octactiniae +octaeterid +octameter +octodecimal +odontalgic +oecumenian +oestrin +offhandedly +offishly +ogrisms +oilheating +oiltight +okruzi +oligochaete +olonets +omittance +omitter +omniarchs +omophagy +onymatic +oniscus +onomancy +oogametes +opaquing +operagoer +operatical +operetta +ophiurid +opticly +orality +orbitelar +orchestic +ordures +oreamnos +orients +ornament +orphancy +orthose +ortygan +oscillated +osculated +osnappar +osseins +ossifier +osteitic +osteogen +ostracode +otorrhea +outbaking +outbragged +outcept +outcook +outcut +outfawn +outflank +outflue +outgambled +outhired +outkill +outlier +outlined +outoffice +outpaces +outpeer +outray +outrank +outrate +outreached +outscape +outset +outshake +outslid +outsped +outtalk +outtear +ovately +overably +overblanch +overboard +overbore +overbow +overcapable +overchased +overcup +overdazed +overdried +overfilm +overflog +overgamble +overlash +overlave +overleer +overline +overmind +overneat +overrim +overtoe +overwake +overweak +ovulated +owelty +oxammite +oxcarts +oxyacids +oxydasic +oxygon +oxtails +padcluoth +paedology +paedological +paillette +paintably +pairwise +pakistani +palaeograph +palaeophile +palagonite +palatally +palmipedes +palpitate +palpless +paludrine +panathenaean +panderers +pandurate +panhandling +pansmith +pantoum +papality +papyrian +papists +parablepsia +parachaplain +parachutic +paracmasis +paracress +paradeless +parageusic +paralleler +paramecium +paranuclei +pararctalia +parentate +parleyer +parousia +parricidial +pasteur +pastiches +pasture +patellula +pathless +patinize +pauraque +paviors +pavisor +paxillate +peculium +pedagogues +pedantize +pederastic +pediadontic +pediculated +pediculati +pediculicide +pedicures +peirastic +pelargonic +pelleting +penalises +penchants +penduline +penlites +penorcon +penutian +peoplish +perborate +percents +perforata +performed +periauger +peridermic +perijove +perilune +peripherad +perisome +permits +peroxided +perscent +personage +personal +perturb +pesthole +pestify +pettiagua +petunse +phagocyte +phalangitic +phalanxes +phantasmag +pharisees +phasiron +phenacetine +phenetole +phenixes +phenocoll +phenolated +phenoxide +phycitidae +physicked +phlebitis +phlogisma +pholidota +phoronida +phosphide +photechy +photism +photoeng +photogen +photogs +photonic +photopia +phrynidae +phulwara +pianisms +pianistic +piblokto +picarooned +pictural +pigeonite +piggybacks +pigroot +pilaster +pililloo +pilloried +pilotman +pinecones +piniform +pintails +piperidin +pipkinet +piquiere +pyralidan +pyralis +pyraloid +pyrexic +pyridine +pyritic +pyrogen +pishogue +pisidium +pistaches +pistachio +pistoled +pitcairnia +pitiedly +pitying +pitless +pitmaking +pituite +pixilated +placentoma +placodermal +placodont +plagioclase +playgirl +playoffs +plaister +plaiters +playward +plantlet +plantlike +plasmagenic +plastered +plastids +plateaux +platinoid +plebianism +plebiscite +plecotinae +plenties +plenums +pleuroid +pliskies +plosion +plouky +plumbagine +plumcot +plumdamas +plummet +plummy +plumule +plunging +pluries +plushes +plussage +pneograph +pocketing +podicipedidae +podsols +podzolic +poetito +poetized +poitrail +pokomoo +polyamide +polygalic +pollenate +pollux +pompilidae +pondokkie +ponying +poorish +poplitic +popply +poriferal +portland +poseuse +postdate +postfact +posting +postpaid +potbellied +potentee +pothook +potoos +potpies +pouchlike +pounding +pouring +powders +practicing +pratty +preachings +preacness +preadapts +preatomic +prebenefit +precambrian +precents +prechordal +precising +preclaimer +precombine +preconfer +predative +predawns +predeceases +predicates +preeligible +preeners +preentail +prefeudalic +preformed +prelithic +preludes +preludio +premorbid +prenaris +prenomen +preobtain +preofficial +preordain +prepacking +prepays +prerefined +prereject +prerelate +presley +presser +presteel +pretonic +prevalue +prevent +priapus +priestal +priggess +primary +primeur +primitiae +princeps +princify +printer +prionine +prismy +prisoned +prittle +privant +proavis +probings +problems +procaines +proclive +procured +prodroma +producer +profaning +profiles +profundae +profuse +progamete +progeny +proleague +promisee +pronging +prononce +proofing +propjet +proreader +prorebate +prorecall +proscenia +prosier +prosodal +prosodiac +prothmia +proximad +proxime +pseudaphia +psychon +pteridoid +ptomainic +publicly +pucksey +puddingy +pueblito +puerpera +pugilant +pulicose +pullalue +pumpkin +punaluan +punctate +pupilate +purbeckian +pureayn +pursue +purty +pussy +putchuk +putois +putter +quadplex +quadrangle +qualmish +quarry +quarter +quartin +quassin +quatrin +quebrith +quemeful +querent +quesited +quicklime +quietened +quillais +quillon +quinyie +quinnet +quintar +quints +quippu +quittal +quomodo +racemisms +rachitism +rackettail +rackingly +rackwork +radarscope +radiocarbon +radiolitic +radioteria +raillery +raincoats +ramellose +rammermen +randannite +rangeless +rankwise +ransomable +rasters +rastling +ratatats +ratchety +ratheripe +rattails +raughty +ravelers +ravelins +ravelling +ravisher +reaccelerated +reaccount +reaccusing +reappliance +reapplier +rearguing +rearising +reattaches +reattired +rebozos +receptor +recidivated +reciprocal +recommendee +recompete +recompiled +reconclude +recreating +rectrices +redamation +redeclining +redeploy +redesigns +redespise +redoubler +redounds +redrying +redrives +reduzate +reeffishes +reenclosed +reevokes +reexhibit +referring +refinancing +refinery +reflation +reflexing +refought +refugium +refuting +regalement +regalness +regimented +regionals +regorging +regraduate +regressed +regroup +regrown +rehammers +reimpart +reimpose +reinjure +reinvoice +reissued +relacquer +relatival +releasably +remedying +remeditate +remigrated +renegating +renovate +reophore +repaginated +repower +repress +reprint +reprobate +repugns +repulsed +reputable +reradiates +reschedule +rescous +researcher +resecting +resents +reserval +resewing +reshipped +reshoeing +reshoot +reshuffle +residencer +residues +resimmer +resinfiable +resizer +resolved +respicing +responded +restaging +restocked +restore +restow +resumes +resurfaced +retaught +retemper +retinite +retinker +retinula +retiring +retotaled +retreatal +retrenched +retroact +retrocecal +revacating +reversal +revibrate +revives +rewearing +rewound +rewraps +rhabdosome +rhagadiform +rhyton +ricinulei +ricochets +ridicules +rigescent +rimeless +rindless +ringnecks +riptides +rituals +riverbank +riverine +riverman +roadblocks +roadster +rocketeer +rockiest +rodentian +romagnole +rondelier +roofward +rookeried +roomful +roommate +rootages +rootier +rooving +rosery +rosillo +rosiny +roubouh +rouping +ruction +ruddiest +rufous +rulings +rumpadder +runkles +runneth +runtime +rutelian +saccharifier +saddleless +sagebrush +sagginess +saintly +saintlike +salacious +salampore +salariats +saltery +saltmaker +salvifics +samolus +samshus +sanitised +santirs +santols +sanukite +sapiencies +sapindales +sapogenin +sarcolemma +sarcophagic +sarothra +sassagum +sateless +satiating +satinlike +satirise +satrapy +satrapical +saucepot +savory +saxifragaceae +scabiophobia +scannings +scaphites +scapiform +scapolite +scarfskin +scawtite +scenarize +scentful +schediastic +schematics +schiavoni +schnapper +scholarian +scholium +schoolmaam +schoolman +schorly +sciaticky +scincoidian +scintler +scivvy +scleranth +sclerosed +scobiform +scoreboard +scorepads +scotchmen +scotopic +scrapbook +scratchman +screwier +scrieves +scriggly +scripto +scrublike +scrummage +sculpted +scumbling +scuppet +scurril +scuttle +seafowls +seamster +searness +seashells +seatless +secours +secreting +secundum +seemlily +seignorage +seignoral +seiyukai +selective +selenates +semaphore +sementera +semibarbaric +semichemical +semicircled +semiclose +semicrome +semicurl +semideltaic +semihoral +semimatt +seminifical +semipupa +semishaft +semitone +senilism +sennits +sensoria +septicemia +septleva +serfship +serioso +serjeancy +serphoidea +sertion +sertule +services +sescuple +session +setdown +setout +settles +setups +setwise +sextole +shadberry +shadowing +shaggymane +shaivism +shakedown +shakeout +shakeups +shaktism +shamoys +shanksman +sharezer +sharpens +shattered +shawllike +sheeneys +sheepwalk +shellshake +shelterage +sheraton +sheroot +shibboleth +shieldfern +shipbuild +shipcraft +shipyard +shiplaps +shipplane +shivaism +shivers +shlimazl +shochetim +shoofly +shooter +shopboy +shortcake +shovels +shredders +shrewder +shrieking +shrives +syagush +sicklily +sycoceric +sycones +sienites +sightly +sigillarid +significian +signiori +silicifies +silicons +syllabaria +sillery +sylviid +simulate +synacmy +sinapism +synapte +sincipita +syndicate +synergic +sinewing +syntagma +syphered +siphons +syrens +siskins +sissone +sixtine +skatings +skewers +skiddiest +skimpier +skirret +skirter +skittled +skyugle +sklents +skully +slangrell +slaverer +sleepyhead +sleepry +slenderer +slyest +slighty +slithered +slumps +smackeroo +smashboard +smellful +smirching +smirking +smitten +smokelike +smokers +smoorich +snarlish +sneerful +sneeshing +sniffily +snipelike +snipers +snivels +snobbery +snorker +snubbers +snuffkin +sobersided +socialism +sociogram +socrates +sodiums +sodomite +softboard +soybeans +solidism +solunar +somites +sompner +sonship +soonly +soother +sordello +sorehawk +sotols +soughing +soundheaded +soupfin +soupon +sourball +sources +sourdre +spacewalked +spanceling +sparganiaceae +sparily +sparkler +spavins +speakablies +specificated +speckledy +speltoid +spenders +speranza +sperling +sphecius +sphendone +sphenion +spherula +sphygmic +spiciest +spiflicate +spyhole +spikehole +spillages +spinelet +spinelike +spiracula +spirifer +spirited +spitish +spizella +splashy +splining +spoliaria +spondaics +spooler +sporangia +spouted +springald +springle +sprucer +sprugs +spunks +spurdog +squares +squaws +squibbing +squinched +squint +srikanth +stabilised +stagecraft +staggerer +stagiary +stagiest +stagskin +staynil +stalemated +stalklet +stalklike +staminode +standards +standers +stanzas +starers +starfish +starling +statize +status +steadiers +steamers +stearyl +steckling +stemming +steppes +steptoe +stereome +stiacciato +stickboat +styles +stillman +stinkball +stipels +stockier +stockmen +stokavci +stomatic +stonehand +stonier +stooges +stools +stoping +stoves +stower +straddleback +strains +strangled +strawen +straws +streetage +stress +striatal +striding +striker +strobile +strolld +stroth +struv +stubbles +stuccos +stupes +sturdied +subadjacent +subadult +subalgebraic +subcosta +subcranial +subdeliria +subducing +subduple +subgallate +subhooked +subjectable +subjugable +sublethal +sublimes +subloral +subnets +subpool +subradiate +subrepand +subscience +subsellia +subsmile +subsume +subucula +succour +sucrose +sufficience +suffocated +suffragial +sugarloaf +sulfamine +sulfonal +sumbulic +sumerian +summula +sunbeamy +sunders +sunfast +sunnier +sunward +superceded +supracaecal +surcharge +surely +surmit +suttas +suzanne +swampine +swankier +swanmark +swashing +swattle +sweatier +sweepdom +sweepier +sweetened +sweetman +sweptback +swifter +swimmer +swinebread +swingman +swipple +swirls +swythe +swollen +tabernacles +tablature +taborets +tabourer +tabourin +tabulary +tagliarini +tailcoats +tailgating +tailory +tailspin +takhtadjy +tallying +talocalcaneal +talpetate +tamehearted +tanchelmian +tangents +tanzanian +tariffize +tarquin +tastably +tatarize +tattooed +taurus +tautens +taxeopod +taxying +taxless +teagardeny +teardown +tectricial +teethers +telegrams +telephone +telescope +tellinoid +telluric +teloptic +temperance +temperer +templum +temporal +tensely +tenurial +teroxide +terranes +tersion +tessaradecad +tetanize +tetanus +tetrachical +tetragon +tetrahedra +tetramer +tetramin +tetrapoda +tetryl +tettigidae +tewsome +thalidomide +thaneship +thegither +theists +theomagics +theorum +therapsid +therebeside +therefore +thermels +thickening +thievish +thinghood +thynnidae +thiobacilli +thiolactic +thiophene +thioxene +thirdendeal +thirty +thondraki +thorny +thrawing +threatened +thrifts +thriver +thumbnail +tyburn +tidemarks +tiderips +tiefenthal +tigerism +tightish +tilesherd +timbrelled +tinkerer +tinselled +tipburn +typefaces +tipless +tyramin +tiredest +tiremaker +tiresias +tironian +toasty +tobaccoism +tobaccosim +toboggans +toddymen +toffyman +toilets +toitish +tolerated +toluids +toluole +tonguer +toomly +tooting +tornesi +toroids +torqued +torrefied +torsalo +torteau +tosily +totty +totuava +tousy +tovariaceae +towards +towers +townman +towser +toxicaemia +toxicon +toxotae +trachyte +traction +trailboard +tramells +tramyard +trammelhead +trampcock +trampdom +tranceful +transbay +transect +transom +travelog +trecento +treeship +trembling +tremellaceae +trepangs +triadist +tricarbon +trickful +trierarch +triones +triplet +triply +tristam +trisula +tritor +trizoic +trochlear +troller +tropics +troppo +troths +trotol +trounced +trudging +truism +trutta +tsarevna +tsktsk +tsunamic +tubeform +tubules +tularemia +tummies +tumoral +tuneably +tunnland +tuppence +turgite +turkey +turnoff +turtled +tussled +twangler +tweenies +tweesht +twisted +twitchel +twoling +uigurian +uitotan +uitspan +umbratical +umpirer +unaborted +unabsurd +unabundance +unadmirable +unadopted +unalerted +unaltered +unamerceable +unangry +unappended +unattacked +unavailable +unbalconied +unbarreled +unbarricaded +unbedraggled +unbeguiled +unbeholden +unbeloved +unbendably +unbenight +unboring +unbounded +unboxes +unbragging +unbreast +unbreeches +unbridgeable +unbroiled +unbroken +unbullied +uncenter +uncentre +unchaining +unchiseled +uncialize +unclever +unclipped +unclubby +uncoaxial +uncombined +uncrest +uncrisp +unculted +uncupped +undamnified +undeducible +undeferred +undelight +underbalance +underbodice +underboil +underchime +underclub +underdone +underfiend +underfire +undergird +underkind +underlay +underseam +undertide +undertied +undowned +undraws +undress +unduloid +unelectable +unenchant +unequaled +unevocable +unfasten +unfauceted +unferried +unfevered +unfiducial +unfinish +unfoaming +unfogging +unfooted +unformal +unfreeze +unfriended +unfrugal +unfuelled +unfundable +ungambling +ungloved +unhaggling +unhorse +unhumbled +unhushed +uniflow +unimbibing +unindexed +unironed +unitive +unjapanned +unkempt +unkindred +unlaving +unleveled +unlighted +unlinks +unloathed +unloyal +unmackly +unmaligned +unmanly +unmanlike +unmanner +unmantle +unmatchable +unmental +unmetred +unminted +unmiracled +unmiry +unmiter +unmitre +unmodified +unmould +unmown +unpalpable +unpapered +unpasted +unpegging +unpitched +unplashed +unprimed +unprince +unprop +unramified +unrandom +unrankled +unreceding +unrecent +unrelated +unrisen +unrobing +unrowed +unsaccharic +unsayable +unscaling +unseven +unshamefaced +unshelled +unshocked +unshore +unsicker +unsmeared +unsnatch +unsolar +unstanch +unstate +unsteep +unsunk +untacking +untaste +untaxable +untermed +unthewed +unthreaded +untidier +untipt +untoiled +unturf +unugly +unuseable +unvalued +unvendable +unwaking +unwarbled +unwarned +unwearied +unwhite +unwilled +unwove +upbuoy +upcover +upcrowd +upcurled +uperize +upgrow +uppluck +upsets +upspew +upspread +upstare +uptears +urbanest +urbanized +urceolate +ureteral +urobilin +urohyal +urologic +urticaria +useless +uspanteca +utensil +uucpnet +uxorial +vaccinist +vacuolate +vacuums +valbellite +vallums +vamosing +vampyre +variety +varnished +vasovagal +vedettes +vegetism +vehemency +velatura +veliform +velocipeded +veloute +venantes +venation +venditate +venially +ventifact +ventose +verbalize +verbenone +verbomania +verdancies +verdicts +vergery +verriere +vetchling +veuglaire +vibists +victrola +vietminh +vilipended +villancico +villanella +vinagron +vincular +vinous +violins +virbius +virgater +visammin +visionic +vitameric +vitaminic +vitasti +vitrailed +vitrics +vivency +vivifier +voyaging +volleyed +volvell +vortical +vouchsafe +vulgars +vulpinae +wachuset +walycoat +wamefuls +wanrest +wanters +warpers +warragals +washdays +washings +washway +wastemen +wasterie +wastern +watchdogs +watergate +wattles +waveshape +weariest +webworn +wedgewise +wednesday +weelfaured +weeniest +wehrlite +wellyard +wellmaker +wellring +whaleries +wheatears +wheelabrate +wheelsman +whelpish +whenever +wherves +whichway +whinnier +whipray +whirley +whirling +whiskey +whisking +whistled +whitebill +whitfinch +wholely +wholesale +whooper +whorish +whumps +widdendream +widewhere +wigglers +wigwagger +wildsome +willets +windfallen +windfalls +windigos +wiredancer +wirehaired +wiselier +wissing +wistaria +wistit +witchlike +witchweed +witcraft +withnay +witloof +witwall +wizards +woeness +wolframic +wollomai +woodblock +woolfell +wordably +worldman +wormgear +worset +wouhleche +wounder +wrathing +wrawler +wreakers +wreathy +wriggles +writing +wronger +xylose +zamouse +zaptiahs +zaratite +zesting +zeuxian +zincifies +zinkify +zithern +zoogleas +zorgite diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.12\346\226\207\344\273\266.md" "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.12\346\226\207\344\273\266.md" new file mode 100644 index 000000000..ad01f1a14 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.12\346\226\207\344\273\266.md" @@ -0,0 +1,70 @@ +# 文件 +大量数据保存、读取、写入需要的就是文件(Files)。 +## 创建文件 +创建一个文件,最简单的就是python的内建函数`open()`。 +> open(file,mode='r') + +第二个参数,`mode`,默认值是 `'r'`,可用的 `mode` 有以下几种: + +| 参数字符 | 意义 | +| -------- | ------------------------------- | +| `'r'` | 只读模式 | +| `'w'` | 写入模式(重建)| +| `'x'` | 排他模式 —— 如果文件已存在则打开失败 | +| `'a'` | 追加模式 —— 在已有文件末尾追加 | +| `'b'` | 二进制文件模式 | +| `'t'` | 文本文件模式(默认)| +| `'+'` | 读写模式(更新)| +创建一个文件: +```python +open('/tmp/test-file.txt', 'w') +``` +更多时候,还需要把这个函数的返回值,一个所谓file object保存到一个变量中,以便后面调用这个file object的各种Methods,比如获取文件名file.name,比如关闭文件file.close() +```python +f = open('/tmp/test-file.txt', 'w') +print(f.name) +f.close() +#路径三种写法: +#1. r'\ +#2. 使用双反斜杠\\ +#3. 使用正斜杠:“/” +``` +## 删除文件 +删除文件,就得调用os模块了,删除文件之前,要先确认文件是否存在,否则删除命令会失败。 +```python +import os +f=open('/tmp/test-file.txt','w') +print(f.name) +f.close() +if os.path.exists(f.name): + os.remove(f.name) + print(f'{f.name}deleted.') +else: + print(f'{f.name} does not exist.') +``` +## 读写文件 +> f.write()或f.read()读取文件 +> file.radline()每运行一次读一行 +> file.readlines()读取全部内容,以列表返回 +> file.radline().strip()读取后去除文本后的\n +> file.readlines()使用for line in f.realines():遍历返回的列表 +> file.writelines(列表/...)向创建后的文件内部写入内容,注意创建内容时:'w' +## with语句块 +针对文件操作,python有专门的语法块:with +`with open(...) as f:` +` f.write(...)` +` ... ` +把各种对文件的操作打包 +## 另一个完整的程序 +“即便是结论正确,论证过程乱取八糟也不行!” +找得到不仅恰当且又**精彩**的例子和论据的,就是好作者。 +> 找出所有字母加在一起为100的英文单词(a=1,b=2...) +> 1. 遍历英文字典,取出每一个单词 +> 2. 遍历取出的单词的每个字母,在索引基础上+1 +> 3. 判断if是否字母求和==100,如果是,则追加到空列表,否则,contine。 + +## 总结 +1. open(),'r','w' +2. os模块,用来调用file的操作,os.remove() +3. file.read()、file.write()、file.readline()、file.readlines()、file.writelines() +4. 可以使用with把操作放到一个语句块中... \ No newline at end of file diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.13.md" "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.13.md" new file mode 100644 index 000000000..e69de29bb diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/file.writelines().py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/file.writelines().py" new file mode 100644 index 000000000..cb8f7dbca --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/file.writelines().py" @@ -0,0 +1,10 @@ +#把列表写入到文件中 +a_list=['first line test content\n','second line test content\n','third line test content\n'] +f=open(r'\Users\Administrator\Documents\GitHub\the-craft-of-selfteaching\学习笔记\writelines-test-file.txt','w') +f.writelines(a_list) +f.close() + +f=open(r'\Users\Administrator\Documents\GitHub\the-craft-of-selfteaching\学习笔记\writelines-test-file.txt','r') +for line in f.readlines(): + print(line) +f.close() diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/readlines\350\257\273\345\206\231\346\226\207\344\273\266test-file.txt" "b/\345\255\246\344\271\240\347\254\224\350\256\260/readlines\350\257\273\345\206\231\346\226\207\344\273\266test-file.txt" new file mode 100644 index 000000000..20aeba2ba --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/readlines\350\257\273\345\206\231\346\226\207\344\273\266test-file.txt" @@ -0,0 +1,3 @@ +first line +second line +third line diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/readline\350\257\273\345\206\231\346\226\207\344\273\266test-file.txt" "b/\345\255\246\344\271\240\347\254\224\350\256\260/readline\350\257\273\345\206\231\346\226\207\344\273\266test-file.txt" new file mode 100644 index 000000000..20aeba2ba --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/readline\350\257\273\345\206\231\346\226\207\344\273\266test-file.txt" @@ -0,0 +1,3 @@ +first line +second line +third line diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/test-file.txt" "b/\345\255\246\344\271\240\347\254\224\350\256\260/test-file.txt" new file mode 100644 index 000000000..e69de29bb diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/with\346\211\223\345\214\205\346\226\207\344\273\266\346\223\215\344\275\234.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/with\346\211\223\345\214\205\346\226\207\344\273\266\346\223\215\344\275\234.py" new file mode 100644 index 000000000..695c28919 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/with\346\211\223\345\214\205\346\226\207\344\273\266\346\223\215\344\275\234.py" @@ -0,0 +1,18 @@ +import os +with open(r'\Users\Administrator\Documents\GitHub\the-craft-of-selfteaching\学习笔记\with test-file.txt','w') as f: + f.write('first line\nsecond line\n third line\n') + +with open(r'\Users\Administrator\Documents\GitHub\the-craft-of-selfteaching\学习笔记\with test-file.txt','r') as f: + for line in f.readlines(): + print(line) +file_name=r'\Users\Administrator\Documents\GitHub\the-craft-of-selfteaching\学习笔记\with test-file.txt' + +if os.path.exists(file_name): + os.remove(file_name) + print(f'{file_name} deleted') +else: + print(f'{file_name} does not exists') + +# 用with语句块的另外一个好处就是不用写file.close()了 + +# with ... as ... \ No newline at end of file diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/writelines-test-file.txt" "b/\345\255\246\344\271\240\347\254\224\350\256\260/writelines-test-file.txt" new file mode 100644 index 000000000..73be66746 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/writelines-test-file.txt" @@ -0,0 +1,3 @@ +first line test content +second line test content +third line test content diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\233\345\273\272\346\226\207\344\273\266.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\233\345\273\272\346\226\207\344\273\266.py" new file mode 100644 index 000000000..8d8359c5a --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\233\345\273\272\346\226\207\344\273\266.py" @@ -0,0 +1,8 @@ +f=open(r'\Users\Administrator\Documents\GitHub\the-craft-of-selfteaching\学习笔记\test-file.txt','w') +print(f.name) +f.close() +#路径三种方法: +#1. r'\ +#2. 使用双反斜杠\\ +#3. 使用正斜杠:“/” + diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\240\351\231\244\346\226\207\344\273\266.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\240\351\231\244\346\226\207\344\273\266.py" new file mode 100644 index 000000000..ac3ab0bac --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/\345\210\240\351\231\244\346\226\207\344\273\266.py" @@ -0,0 +1,9 @@ +import os +f=open(r'\Users\Administrator\Documents\GitHub\the-craft-of-selfteaching\学习笔记\删除文件test-file.txt','w') +print(f.name) +f.close()#关闭文件,否则无法删除文件 +if os.path.exists(f.name): + os.remove(f.name) + print(f'{f.name} deleted') +else: + print(f'{f.name} does not exist') diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/\350\257\273\345\206\231readline()-readlines().py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/\350\257\273\345\206\231readline()-readlines().py" new file mode 100644 index 000000000..df6bfb602 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/\350\257\273\345\206\231readline()-readlines().py" @@ -0,0 +1,36 @@ +f=open(r'\Users\Administrator\Documents\GitHub\the-craft-of-selfteaching\学习笔记\readline读写文件test-file.txt','w') +f.write('first line\nsecond line\nthird line') +f.close() + +f=open(r'\Users\Administrator\Documents\GitHub\the-craft-of-selfteaching\学习笔记\readline读写文件test-file.txt','r') +s=f.readline() +print(s) +s=f.readline() +print(s) +f.close() +#使用str.strip():\n被去掉了 +f1=open(r'\Users\Administrator\Documents\GitHub\the-craft-of-selfteaching\学习笔记\readline读写文件test-file.txt','w') +f1.write('first line\nsecond line\nthird line\n') +f1.close() + +f1=open(r'\Users\Administrator\Documents\GitHub\the-craft-of-selfteaching\学习笔记\readline读写文件test-file.txt','r') +s1=f1.readline().strip() +print(s1) +s1=f1.readline().strip() +print(s1) +s1=f1.readline().strip() +print(s1) +f1.close() + +#使用readlines()读取文件中的每一行,并作为一个列表返回 +f2=open(r'\Users\Administrator\Documents\GitHub\the-craft-of-selfteaching\学习笔记\readlines读写文件test-file.txt','w') +f2.write('first line\nsecond line\nthird line\n') +f2.close() + +f2=open(r'\Users\Administrator\Documents\GitHub\the-craft-of-selfteaching\学习笔记\readlines读写文件test-file.txt','r') +s2=f2.readlines() +print(s2) +for index, line in enumerate(s2): +#直接使用enumerate获取列表的索引和值,同时在for后面定义接收的变量: + print(f'第{index+1}行:\n 内容:{line}') +f2.close() diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/\350\257\273\345\206\231\346\226\207\344\273\266.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/\350\257\273\345\206\231\346\226\207\344\273\266.py" new file mode 100644 index 000000000..d98a9dcba --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/\350\257\273\345\206\231\346\226\207\344\273\266.py" @@ -0,0 +1,12 @@ +f=open(r'\Users\Administrator\Documents\GitHub\the-craft-of-selfteaching\学习笔记\读写文件test-file.txt','w') +f.write('first line\nsecond line\nthird line') +f.close() + +f=open(r'\Users\Administrator\Documents\GitHub\the-craft-of-selfteaching\学习笔记\读写文件test-file.txt','r') +s=f.read() +print(s) +f.close() + + + + diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/\350\257\273\345\206\231\346\226\207\344\273\266test-file.txt" "b/\345\255\246\344\271\240\347\254\224\350\256\260/\350\257\273\345\206\231\346\226\207\344\273\266test-file.txt" new file mode 100644 index 000000000..272b2e472 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/\350\257\273\345\206\231\346\226\207\344\273\266test-file.txt" @@ -0,0 +1,3 @@ +first line +second line +third line \ No newline at end of file diff --git "a/\350\256\241\347\256\227\345\255\227\346\257\215\346\261\202\345\222\214\347\250\213\345\272\217.py" "b/\350\256\241\347\256\227\345\255\227\346\257\215\346\261\202\345\222\214\347\250\213\345\272\217.py" new file mode 100644 index 000000000..fd1718ea8 --- /dev/null +++ "b/\350\256\241\347\256\227\345\255\227\346\257\215\346\261\202\345\222\214\347\250\213\345\272\217.py" @@ -0,0 +1,55 @@ +#ord()函数,直接使用字母的ASCII进行计算 +print(f"a的ASCII码:{ord('a')}") +#a--97,即对应到1为ord('a')-96 +#以knowledge为例: +word='knowledge' +sum=0 +for char in word: + sum+=ord(char)-96 +print(f'knowledge的ASCII:{sum}') +#把以上计算过程打包为一个函数 +def sum_of_word(word): + sum=0 + for char in word: + sum+=ord(char)-96 + # print(f"{word}对应的ASCII:{sum}") + return sum +sum_of_word('attitude') +sum_of_word('hello') +#导入下载的字典,把字典的内容遍历,同时对字典的内容进行函数调用: +# with open(r'\Users\Administrator\Documents\GitHub\the-craft-of-selfteaching\words_alpha.txt','r') as file: +# for word in file.readlines():#遍历读取文件的返回列表 +# if sum_of_word(word)==100: +# print(word) +#查找问题:打印出第一个单词的每个字母,定位问题: +# with open(r'\Users\Administrator\Documents\GitHub\the-craft-of-selfteaching\words_alpha.txt','r') as file: +# for word in file.readlines():#遍历读取文件的返回列表 +# if sum_of_word(word)==100: +# print(word) +# for c in word: +# print(c,ord(c)-96) +# break +#如果使用list(word)打印结果则更为直观:'a', 'b', 's', 't', 'r', 'u', 's', 'e', 'n', 'e', 's', 's', 'e', 's', '\n' +#验证\n的ASCII: +# print(ord('\n')-96) +with open(r'\Users\Administrator\Documents\GitHub\the-craft-of-selfteaching\results_test file.txt','w') as results: + with open(r'\Users\Administrator\Documents\GitHub\the-craft-of-selfteaching\words_alpha.txt','r') as file: + for word in file.readlines():#遍历读取文件的返回列表 + #str.strip()删除字符串前后的空白字符 + if sum_of_word(word.strip())==100: + # print(word) + results.write(word) +with open(r'\Users\Administrator\Documents\GitHub\the-craft-of-selfteaching\words_alpha.txt','r') as file: + lines=file.readlines() + #repr显示原始字符 + first_line=lines[0] + first_line_o=repr(lines[0]) + first_line1=lines[0].strip() + print(f"readlines读取的第一个元素:{first_line}") + print(f"readlines读取的第一个元素_原始数据:{first_line_o}") + print(f"使用strip后:{first_line1}") + #验证换行符的存在,查看字符串长度: + print(len(first_line)) + print([ord(c) for c in first_line]) + + \ No newline at end of file From 3c7c3fd01a4b396ace855ca11f1ef23b9989dd4d Mon Sep 17 00:00:00 2001 From: johoo <57379875+johoo123@users.noreply.github.com> Date: Tue, 13 May 2025 15:42:39 +0800 Subject: [PATCH 11/17] Update 5.13.md --- .../5.13.md" | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.13.md" "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.13.md" index e69de29bb..102597138 100644 --- "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.13.md" +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.13.md" @@ -0,0 +1,69 @@ +# 如何从容应对含有过多“过早引用”的知识 + +## 过早引用就是无所不在 +生活、学习、工作都不是计算机,它们可不管这套,管它是否定义过,管它是否定义清晰,直接甩出来就用的情况比比皆是。 +## 不懂也要硬着头皮读完 +> 读不懂也要读完,然后重复很多遍。 +> 从一开始就要做好第一次只能读懂个大概的准备。 +> 书读百遍其义自见。道理本身成了“过早引用”。 +有经验的读书者,拿来一本书开始自学技能的时候,他会先翻翻目录(Table Of Contents),看看其中有没有自己完全没有接触过的概念;然后再翻翻术语表(Glossary),看看是否可以尽量理解;而后会看看索引(Index),根据页码提示,直接翻到相关页面进一步查找…… 在通读书籍之前,还会看看书后的参考文献(References),看看此书都引用了哪些大牛的书籍,弄不好会顺手多买几本。 + +这样做,显然是老到 —— 这么做的最大好处是 “尽力消解了大量的过早引用”,为自己减少了极大的理解负担。 + +所以,第一遍的正经手段是 “**囫囵吞枣**地读完”。 + +囫囵吞枣从一开始就是贬义词。但在当前这个特殊的情况下,它是最好的策略。那些只习惯于一上来就仔细认真的人,在这里很吃亏,因为他们越是仔细认真,越是容易被各种过早引用搞得灰心丧气;相应地,他们的挫败感积累得越快;到最后弄不好最先放弃的是他们 —— 失败的原因竟然是因为 “太仔细了”…… + +第一遍囫囵吞枣,用个正面一点的描述,就是 “*为探索未知领域先画个潦草的地图*”。地图这东西,有总比没有好;虽然说它最好精确,*但即便是 “不精确的地图” 也比 “完全没地图” 好一万倍,对吧?*更何况,这地图总是可以不断校正的,不是吗?世界上哪个地图不是一点一点校正过来才变成今天这般精确的呢? + +## 磨练“只字不差”的能力 +> 通过阅读习得新技能需要施展“只字不差阅读”这项专门的技能。 +> “只字不差地阅读”是所有自学能力强的人都会且都经常使用的技能。 +> “明明你已经刻意让自己慢下来,也刻意揣摩每个字每个词的含义,甚至为了理解正确,做了很多笔记...可是,当你再一次“只字不差地阅读”的时候,你经常会“惊讶的发现”,自己竟然有若干处遗漏的地方!对,这就是一种需要多次练习、长期训练才能真正掌握的技能。 +> 所以,到了第二遍第三遍就必须施展“只字不差地阅读”这项专门的技能了。 +## 好的记忆力很重要 +> 就算不明白也要先记住 +> 提高记忆力:好记性不如烂笔头+反复做整理归纳总结 +## 尽快开始整理归纳总结 +> 第一遍葫芦吞枣后,马上就要开始“总结、归纳、整理、组织关键知识点” +> 列表、示意图和表格。 +> 整理过程是强化记忆的过程。 +> 自学能力强的人有个特点,就是不怕麻烦。小时候经常听到母亲念叨,“怕麻烦!那还活着干嘛啊?活着多麻烦啊!”——深刻。 +## 先关注使用再研究原理 +> 三千多年前,欧洲腓尼基人发现锅底沾有的天然苏打... +> 两千五六百前,释迦牟尼详细描述了打坐的感受... +> 从什么时候开始,我们开始害怕自己并不真正理解的东西,不敢去用,甚至连试都不敢去试..有个恼人的解释:上学上坏了。 +> 不管怎么样,先用起来,反正,研究透原理,不可能马上做到,需要时间漫漫。用错了没关系,改正就好。用得不好没关系,用多了就会好。只要开始用起来,理解速度就会加快——实践出真知,不是空话。 +## 尊重前人的总结和建议 +> 不听老人言,吃亏在眼前。老人言只不过是过早引用。 +> 学霸的特点之一就是“老师让干啥就干啥”。 +> 从现在开始,老老实实地在一切必要的情况下自己动手去“总结、归纳、整理、组织关键知识点”... +> 学代码的过程,很多不属于是“编程语言的范畴”,比如,如何为变量命名、如何组织代码,这些规范不是违背了马上会死掉... +> Python中有个概念叫PEP,必须找时间阅读,反复阅读,牢记于心: +> https://www.python.org/dev/peps/pep-0008/ +到最后,你会体会到,这不只是编程的事,这种东西背后的思考与体量,对整个人生都有巨大帮助。 + +# 官方教程:The Python Tutorial +The Python Tutorial +## 官方文档中最重要的链接 + +Python 的官方文档网址是: + +> https://docs.python.org/3/ + +其中对初学者最重要的两个链接是: + +> * **[Tutorial](https://docs.python.org/3/tutorial/index.html)**: https://docs.python.org/3/tutorial/index.html +> * **[Library Reference](https://docs.python.org/3/library/index.html)**: https://docs.python.org/3/library/index.html + +## 为什么一定要阅读官方文档 +> 第一查询对象只能是官方文档。 +## 将官方文档拉回本地 + +### 安装git +### 下载源文件 +### 安装rst2ipynb +### 批量转换rst至ipynb +### 用Sphinx生成html/epub版本 +### 下载已经转换好的版本 +### 完整的Python Doc版本 From b964587b6db63655831bcaf12c37d527910fcd42 Mon Sep 17 00:00:00 2001 From: johoo <57379875+johoo123@users.noreply.github.com> Date: Tue, 13 May 2025 18:48:21 +0800 Subject: [PATCH 12/17] =?UTF-8?q?=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Part.2.D.1-args.ipynb | 9 +- .../5.13.md" | 231 ++++++++++++++++++ 2 files changed, 236 insertions(+), 4 deletions(-) diff --git a/Part.2.D.1-args.ipynb b/Part.2.D.1-args.ipynb index 46c032315..cb8c92f02 100644 --- a/Part.2.D.1-args.ipynb +++ b/Part.2.D.1-args.ipynb @@ -430,14 +430,15 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "2\n" + "2\n", + "1\n" ] } ], @@ -448,7 +449,7 @@ "\n", "n = 1\n", "print(increase_one(n))\n", - "# print(n)" + "print(n)" ] }, { @@ -565,7 +566,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.3" + "version": "3.9.21" }, "toc-autonumbering": true }, diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.13.md" "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.13.md" index 102597138..9c40c03f5 100644 --- "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.13.md" +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.13.md" @@ -67,3 +67,234 @@ Python 的官方文档网址是: ### 用Sphinx生成html/epub版本 ### 下载已经转换好的版本 ### 完整的Python Doc版本 + +# 笨拙与耐心 +所有的手艺,最基本的特征就是:主要靠时间(刻意练习的时间) +> * 学:重复+归纳总结整理。 +> * 练:边学边练容易有挫败感。 +> * 用:以用带练。 +> * 造: +预算观念:绝对不做预算不够的事情。 + +# 刻意练习 +> 学英语最简单的刻意练习就是朗读。 +> 花在刻意练习上的时间太少了 +> 并且,也没有刻意思考哪些地方我应该去刻意练习。 +> 所谓的“混”解释很简单:不做刻意练习的人都是在混时间。 +> 刻意练习其实是刻意思考哪里需要刻意练习之后最自然不过的事情——所以,刻意思考才是关键。 +> 遇到疑似需要刻意练习的点记录下来... + +# 为什么从函数开始? +> Python 的代码是开源的,它的代码仓库在 Github 上: + +> https://github.com/python/ + +在这个代码仓库中,有一个目录下,保存着若干 Python Demo 程序: + +> https://github.com/python/cpython/tree/master/Tools/demo + +最起码把这其中的以下几个程序都精读一下,看看你自己的理解能力: + +> * [beer.py](https://github.com/python/cpython/blob/master/Tools/demo/beer.py) Well-known programming example: Bottles of beer. +> * [eiffel.py](https://github.com/python/cpython/blob/master/Tools/demo/eiffel.py) Python advanced magic: A metaclass for Eiffel post/preconditions. +> * [hanoi.py](https://github.com/python/cpython/blob/master/Tools/demo/hanoi.py) Well-known programming example: Towers of Hanoi. +> * [life.py](https://github.com/python/cpython/blob/master/Tools/demo/life.py) Curses programming: Simple game-of-life. +> * [markov.py](https://github.com/python/cpython/blob/master/Tools/demo/markov.py) Algorithms: Markov chain simulation. +> * [queens.py](https://github.com/python/cpython/blob/master/Tools/demo/queens.py) Well-known programming example: N-Queens problem. + +就算读不懂也没关系,把读不懂的部分标记下来,接下来就可以 “带着问题学习”…… + +> 写函数的一个基本要求是: + +> - 完成一个功能; +> - 只完成一个功能; +> - 没有任何错误地只完成一个功能…… + +然而,即便是从小入手,任务也没有变得过分简单。其中涉及的话题理解起来并不容易,尽管我们尽量用最简单的例子。涉及的话题有: + +> - 参数的传递 +> - 多参数的传递 +> - 匿名函数以及函数的别称 +> - 递归函数 +> - 函数文档 +> - 模块 +> - 测试驱动编程 +> - 可执行程序 + +## 总结 +1. Python Demo +2. 拆分到最简单的功能——函数 +3. 参数传递-多参数传递-匿名函数以及函数的别称-递归函数-函数文档-模块-测试驱动编程-可执行程序 +4. 学-练-用-造 +5. 只字不差阅读的能力--重复+*自己*整理归纳总结--先用起来--多听老人言--以用带练 +6. 刻意思考--刻意练习 +7. 官方文档 + +# 关于参数(上)args +一个程序:输入+处理+输出,从结构上来看,一个函数都是一个完整的程序。 +## 为函数取名 +1. 函数声明:def +```python +def do_nothing(): + pass +do_nothing() +``` +2. 函数取名的规则: +> * 开头:大小写字母和下划线_,不能是数字 +> * 名称中不能有空格 +> * 名称不能与关键字重合. +| - | Python | Keyword | List | - | +| ---------- | ---------- | ---------- | ---------- | ---------- | +| `and` | `as` | `assert` | `async` | `await` | +| `break` | `class` | `continue` | `def` | `del` | +| `elif` | `else` | `except` | `False` | `finally` | +| `for` | `from` | `global` | `if` | `import` | +| `in` | `is` | `lambda` | `None` | `nonlocal` | +| `not` | `or` | `pass` | `raise` | `return` | +| `True` | `try` | `while` | `with` | `yield` | +3. 查询关键字: +```python +from IPython.core.interactiveshell import InteractiveShell +InteractiveShell.ast_node_interactivity = "all" + +import keyword +keyword.kwlist # 列出所有关键字 +keyword.iskeyword('if') # 查询某个词是不是关键字 +``` +4. 更多规则 +关于更多为函数、变量取名所需要的注意事项,请参阅: + +> * [PEP 8 -- Style Guide for Python Code: Naming Conventions](https://www.python.org/dev/peps/pep-0008/#naming-conventions) +> * [PEP 526 -- Syntax for Variable Annotations](https://www.python.org/dev/peps/pep-0526/) +> +> 注:PEPs,是 Python Enhancement Proposals 的缩写:https://www.python.org/dev/peps/ + +## 不接收任何参数的函数 +> 定义函数时,可以定义成不接受任何参数的函数,但是调用时仍然需要写() +```python +def do_something(): + print('This is a hello message from do_something().') + +do_something() +``` +## 没有return语句的函数 +> 函数内部,不一定非要有return语句,默认返回值为None,相当于False。 +```python +def do_something(): + print('This is a hello message from do_something()') +if not do_something(): + print("The return value of 'do_something()' is None.") +``` + +## 接收外部传递进来的值 +### 闰年判断函数 +> * 可以被4整除 +> * 被100整除但是不能被400整除的,不是闰年 +写法一: +```python +def isleapyear(year): + leap=False + if year%4==0: + leap=True + if year%100==0 and year%400!=0: + leap=False + return leap +# 注意:变量定义方式;与:and;内部使用布尔值来判断 +``` +写法二: +> * 不被100整除,但是能被400整除+被100整除,但是被400整除是闰年。(片面) +```python +def is_leapyear(year): + return year%4==0 and (year%100!=0 or year %400==0) +# 关键是搞清楚闰年的定义是什么! +``` +写法三: +> 闰年:被4和100同时整除,或被400整除。 +```python +def is_leapyear(year): + return (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0) +``` +### 函数可以同时接收多个参数 +> 斐波那契数列:输出从a到b之间所有的斐波那契数列 +写法一: +```python +def fib_between(start,end): + a,b=0,1 + while a=start: + print(a,end='') + a,b=b,a+b +fib_between(100,10000) +# a,b=0,1;0<10000,0<100,a=1,b=1 +# a,b=1,1;1<10000,1<100,a=1,b=2 +#... +# a,b>100,;a>100....直到a>=end跳出循环 +``` +写法二:把返回值追加到列表里 +```python +def fib_between(start,end): + r=[] + a,b=0,1 + while a=start: + r.append(a) + a,b=b,a+b + return r +fib_between(100,10000) +``` +## 变量的作用域 +1. 全局变量(Global Variables) +2. 局域变量(Local Variables) +```python +def increase_one(n): + n += 1 + return n + +n = 1 +print(increase_one(n)) #局域变量:2 +print(n) #全局变量:1 +``` +3. 特殊情况:函数内部传递进来可变容器(比如,列表) +```python +def be_careful(a, b): + a = 2 + b[0] = 'What?!' + +a = 1 +b = [1, 2, 3] +be_careful(a, b) +a, b #(1, ['What?!', 2, 3]) +``` +解决方法:传递可变容器到函数内部,先拷贝: +```python +def be_careful(a, b): + a = 2 + b_copy = b.copy() + b_copy[0] = 'What?!' + +a = 1 +b = [1, 2, 3] +be_careful(a, b) +a, b +``` +# 关于参数(下) +## 可以接收一系列值的位置参数 + +## 为函数的某些参数设定默认值 + +## 可以接收一系列值得关键字参数 + +## 函数定义时各种参数的排列顺序 + +# 化名与匿名 +## 化名 +## lambda +## lambda的使用场景 +## 作为某函数的参数 +# 递归函数 +## 递归(Recursion) +## 递归函数的执行过程 +## 递归的终点 +## 变量的作用域 +## 递归函数三原则 +## 思考与练习 \ No newline at end of file From 8e3238a691920903074f12536e0242b820b4a6d1 Mon Sep 17 00:00:00 2001 From: johoo <57379875+johoo123@users.noreply.github.com> Date: Tue, 13 May 2025 22:10:06 +0800 Subject: [PATCH 13/17] =?UTF-8?q?=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 函数取名 2. 不接受参数的函数 3. 没有return的函数 4. 接受外部传递进来的值函数 1)接受一个参数 2)接受多个参数 5. 变量作用域 6. 接受一系列值的位置参数 7. 关键字参数(有默认值) 8. 接受一系列值得关键字参数(Positional Aruguments)①接受一系列值Arbitrary Positional Argument②接受很多值Arbitrary Keyword Argument* 7. 函数中参数的排序。如果要设置默认值,放到Positional Argument后面。 --- .../5.13.md" | 51 +++++++++++++++++-- ...66\345\276\210\345\244\232\345\200\274.py" | 20 ++++++++ ...32\351\273\230\350\256\244\345\200\274.py" | 7 +++ ...\200\222Arbitary Positional Aruguments.py" | 12 +++++ ...\270\252Arbitary Positional Aruguments.py" | 4 ++ 5 files changed, 91 insertions(+), 3 deletions(-) create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/Arbitrary Keyword Argument\346\216\245\346\224\266\345\276\210\345\244\232\345\200\274.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/Keyword Arguments\350\256\276\345\256\232\351\273\230\350\256\244\345\200\274.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/\344\274\240\351\200\222Arbitary Positional Aruguments.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/\344\274\240\351\200\222\345\244\232\344\270\252Arbitary Positional Aruguments.py" diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.13.md" "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.13.md" index 9c40c03f5..c309b4dfd 100644 --- "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.13.md" +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.13.md" @@ -279,11 +279,56 @@ a, b ``` # 关于参数(下) ## 可以接收一系列值的位置参数 - +> 位置参数(Positional Arguments) 标记`*`,那么位置可以接收一系列值。 +> 带一个*号的参数:Arbitary Positional Arguments +> 带两个*号的参数:Arbitary Keyword Arguments +```python +def say_hi(*name): + for name in names: + print(f'Hi,{name}') +say_hi()#没有输出,因为没有给它传递值 +say_hi({'ann'}) +say_hi({'ann','john','jack'}) +``` +> 向Arbitary Positional Arguments传递容器:调用函数时在参数前面加上* +```python + def say_hi(*names): + for name in names: + print(f'Hi,{name}!') + names={'ann','jack','john'} + say_hi(*names) + a_range=range(10) + say_hi(*a_range) + a_list=list(range(10,0,-1)) + say_hi(*a_list) + a_dictionary={'ann':2321,'mike':8712,'joe':7610} + say_hi(*a_dictionary) +``` +一个函数接收多个参数,接收一系列值的位置参数放在所有其他参数后面: +```python +def say_hi(greetings,*name): + for name in names: + print(f'{greetings},{name.capitalize()}!') +say_hi('Hello','mike','john','jack') +``` ## 为函数的某些参数设定默认值 +在定义函数时候,为某些参数设定默认值,这些有默认值的参数又被称作关键字参数(Keyword Arguments) +```python +def say_hi(greetings,*names,capitalized=False): + for name in names: + if capitalized: + name=name.capitalize() + print(f'{greetings},{name}!') +say_hi('Hello','mike','john','zeo') +say_hi('Hello','mike','john','zeo',capatalized=True) +``` +## 可以接收一系列值的关键字参数 +位置参数(Positional Arugument) +1. 接收一系列值: Arbitrary Positional Argument +2. 接收很多值:Arbitrary Keyword Argument +```python -## 可以接收一系列值得关键字参数 - +``` ## 函数定义时各种参数的排列顺序 # 化名与匿名 diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/Arbitrary Keyword Argument\346\216\245\346\224\266\345\276\210\345\244\232\345\200\274.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/Arbitrary Keyword Argument\346\216\245\346\224\266\345\276\210\345\244\232\345\200\274.py" new file mode 100644 index 000000000..d2bbf89b2 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/Arbitrary Keyword Argument\346\216\245\346\224\266\345\276\210\345\244\232\345\200\274.py" @@ -0,0 +1,20 @@ +def say_hi(**names_greetings): + for name,greetings in names_greetings.items(): + print(f'{name},{greetings}') +say_hi(mike='hello',ann='my daring',john='Hi') + +#直接使用字典的迭代方式:分别定义变量来接收key-value +def say_hi1(**names_greetings): + for name, greeting in names_greetings.items(): + print(f'{greeting}, {name}!') + +a_dictionary = {'mike':'Hello', 'ann':'Oh, my darling', 'john':'Hi'} +say_hi1(**a_dictionary) + +say_hi1(**{'mike':'Hello', 'ann':'Oh, my darling', 'john':'Hi'}) + +#在函数内部,选择不同的方式去迭代字典:循环时直接保存key-value到变量,再索引取出 +def say_hi_2(**names_greetings): + for name in names_greetings: + print(f'{names_greetings[name]}, {name}!') +say_hi_2(mike='Hello', ann='Oh, my darling', john='Hi') diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/Keyword Arguments\350\256\276\345\256\232\351\273\230\350\256\244\345\200\274.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/Keyword Arguments\350\256\276\345\256\232\351\273\230\350\256\244\345\200\274.py" new file mode 100644 index 000000000..35a31d596 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/Keyword Arguments\350\256\276\345\256\232\351\273\230\350\256\244\345\200\274.py" @@ -0,0 +1,7 @@ +def say_hi(greetings,*names,capitalized=False): + for name in names: + if capitalized: + name=name.capitalize() + print(f'{greetings},{name}!') +say_hi('Hello','mike','john','zeo') +say_hi('Hello','mike','john','zeo',capitalized=True) \ No newline at end of file diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/\344\274\240\351\200\222Arbitary Positional Aruguments.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/\344\274\240\351\200\222Arbitary Positional Aruguments.py" new file mode 100644 index 000000000..9a2691ab8 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/\344\274\240\351\200\222Arbitary Positional Aruguments.py" @@ -0,0 +1,12 @@ +#向*Positional Arguments传递容器 +def say_hi(*names): + for name in names: + print(f'Hi,{name}!') +def say_hi_1(**names): + for key,values in names.items(): + print(f'Hi,{key}:{values}!') + +names={"ann","jack","john"} +a_dictionary = {'ann': 2321, 'mike': 8712, 'joe': 7610} +say_hi(*names) +say_hi_1(**a_dictionary) \ No newline at end of file diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/\344\274\240\351\200\222\345\244\232\344\270\252Arbitary Positional Aruguments.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/\344\274\240\351\200\222\345\244\232\344\270\252Arbitary Positional Aruguments.py" new file mode 100644 index 000000000..b3a371884 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/\344\274\240\351\200\222\345\244\232\344\270\252Arbitary Positional Aruguments.py" @@ -0,0 +1,4 @@ +def say_hi(greetings,*names): + for name in names: + print(f'{greetings},{name.capitalize()}!') +say_hi('Hello','mike','john','jack') From 95b16ee46baf8197af7f6a4208553ac3eebbaf6e Mon Sep 17 00:00:00 2001 From: johoo <57379875+johoo123@users.noreply.github.com> Date: Thu, 15 May 2025 15:34:38 +0800 Subject: [PATCH 14/17] =?UTF-8?q?=E5=8C=96=E5=90=8D=E4=B8=8E=E5=8C=BF?= =?UTF-8?q?=E5=90=8D=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. lambda函数 2. map函数 --- .../5.13.md" | 56 ++++++++++++++----- .../5.14.md" | 0 2 files changed, 43 insertions(+), 13 deletions(-) create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/5.14.md" diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.13.md" "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.13.md" index c309b4dfd..cac60bed9 100644 --- "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.13.md" +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.13.md" @@ -327,19 +327,49 @@ say_hi('Hello','mike','john','zeo',capatalized=True) 1. 接收一系列值: Arbitrary Positional Argument 2. 接收很多值:Arbitrary Keyword Argument ```python - +def say_hi(**names_greetings): + for name,greetings in names_greetings.items(): + print(f'{name},{greetings}') +say_hi(mike='hello',ann='my daring',john='Hi') + +#直接使用字典的迭代方式:分别定义变量来接收key-value +def say_hi1(**names_greetings): + for name, greeting in names_greetings.items(): + print(f'{greeting}, {name}!') + +a_dictionary = {'mike':'Hello', 'ann':'Oh, my darling', 'john':'Hi'} +say_hi1(**a_dictionary) + +say_hi1(**{'mike':'Hello', 'ann':'Oh, my darling', 'john':'Hi'}) + +#在函数内部,选择不同的方式去迭代字典:循环时直接保存key-value到变量,再索引取出 +def say_hi_2(**names_greetings): + for name in names_greetings: + print(f'{names_greetings[name]}, {name}!') +say_hi_2(mike='Hello', ann='Oh, my darling', john='Hi') ``` ## 函数定义时各种参数的排列顺序 +Python按照既定规则(顺序)来判定每个参数究竟是哪一类型的参数: +> **Order of Arguments** +> 1. Positional Argument +> 2. Arbitrary Positional +> 3. Keyword +> 4. Arbitrary Keyword + +```python +def say_hi(greeting='Hello', *names, capitalized=False): + ... +``` + +在调用该函数的时候,无论你写的是 +```python +say_hi('Hi', 'mike', 'john', 'zeo') +``` + +还是 +```python +say_hi('mike', 'john', 'zeo') +``` + +Python 都会认为接收到的第一个值是 Positional Argument —— 因为在定义中,`greeting` 被放到了 Arbitrary Positional Arguments 之前。 -# 化名与匿名 -## 化名 -## lambda -## lambda的使用场景 -## 作为某函数的参数 -# 递归函数 -## 递归(Recursion) -## 递归函数的执行过程 -## 递归的终点 -## 变量的作用域 -## 递归函数三原则 -## 思考与练习 \ No newline at end of file diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.14.md" "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.14.md" new file mode 100644 index 000000000..e69de29bb From c703f6ae951fa8c5ee6757511b0a309b870cc523 Mon Sep 17 00:00:00 2001 From: johoo <57379875+johoo123@users.noreply.github.com> Date: Fri, 16 May 2025 12:39:10 +0800 Subject: [PATCH 15/17] =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Part.2.D.4-recursion.ipynb | 14 +- .../5.14.md" | 200 +++++++++++++++ .../5.16.md" | 232 ++++++++++++++++++ 3 files changed, 438 insertions(+), 8 deletions(-) create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/5.16.md" diff --git a/Part.2.D.4-recursion.ipynb b/Part.2.D.4-recursion.ipynb index 159bf0912..897884a80 100644 --- a/Part.2.D.4-recursion.ipynb +++ b/Part.2.D.4-recursion.ipynb @@ -96,7 +96,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -201,7 +201,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -213,11 +213,9 @@ "dead: False kicked: False\n", "dead: False kicked: False\n", "dead: False kicked: False\n", - "dead: False kicked: False\n", - "dead: False kicked: False\n", - "dead: True kicked: True\n", - "I slept 8 days, and was dead to wake up...\n", - "The in_dream() function returns: 8\n" + "dead: True kicked: False\n", + "I slept 6 days, and was dead to wake up...\n", + "The in_dream() function returns: 6\n" ] } ], @@ -614,7 +612,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.3" + "version": "3.9.21" } }, "nbformat": 4, diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.14.md" "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.14.md" index e69de29bb..a8d8c3829 100644 --- "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.14.md" +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.14.md" @@ -0,0 +1,200 @@ +# 化名与匿名 +## 化名 +> 给函数取个化名 +```python +from IPython.core.interactiveshell import InteractiveShell +InteractiveShell.ast_node_interactivity = "all" + +def _is_leap(year): + return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0) + +year_leap_bool = _is_leap +year_leap_bool # +year_leap_bool(800) # _is_leap(800) -> True + +id(year_leap_bool) # id() 这个函数可以查询某对象的内存地址 +id(_is_leap) # year_leap_bool 和 _is_leap 其实保存在同一个地址中,也就是说,它们是同一个对象。 + +type(year_leap_bool) #function +type(_is_leap) #function # 它们都是 function +``` +注意: +id(_is_leap)和id(year_leap_bool)是同一id,相当于赋值操作只是改变了名字,但是id值代表的内存地址未发生改变。 +使用场景:提高代码可读性。 +## lambda +函数内容很短时,直接使用lambda关键字定义函数 +```python +def add(x,y): + return x+y +add(3,5) +#使用lambda +add=lambda x,y:x+y +add(3,5)#注意add作为变量直接接收了lambda,传参数直接传递到add中。 +``` +lambda的语法结构: +> `lambda_expr ::= "lambda" [parameter_list] ":" expression` +以上使用BNF标注。在lambda的:后只能有一个表达式。 +匿名函数:lambda:...没有名字的函数 +通过`add=lambda x,y:x+y`相当于给函数取名。 +## lambda的使用场景 +### 作为某函数的返回值 +```python +def make_incrementor(n): + return lambda x:x+n +f=make_incrementor(42) #注意,并不是函数化名的写法 +f(0)# 42 +f(1)# 43 +``` +注意: +1. 因为lambda作为返回值,相当于make_incrementor(42)的返回值保存到了f变量中。 +2. 相当于f=lambda x:x+42;传参数直接向匿名函数f变量中传递。 +### 作为某函数的参数 +一些函数可以接收函数作为参数: +> `map`(*function*, *iterable*, *...*) +> +> Return an iterator that applies *function* to every item of *iterable*, yielding the results. If additional *iterable* arguments are passed, *function* must take that many arguments and is applied to the items from all iterables in parallel. With multiple iterables, the iterator stops when the shortest iterable is exhausted. For cases where the function inputs are already arranged into argument tuples, see [`itertools.starmap()`](https://docs.python.org/3/library/itertools.html#itertools.starmap). + +`map()`函数第一个参数接收函数,第二个参数iterable接收可被迭代对象(如容器(列表、元组、字典等) +```python +def double_it(n): + return n*2 +a_list=[1,2,3,4,5,6] +b_list=list(map(double_it,a_list)) +print(b_list) + +c_list=list(map(lambda x:x*2,a_list)) +print(c_list) +#使用lambda更为简洁 +``` +有些函数“用之即弃”,使用lambda更为方便: +```python +phonebook = [ + { + 'name': 'john', + 'phone': 9876 + }, + { + 'name': 'mike', + 'phone': 5603 + }, + { + 'name': 'stan', + 'phone': 6898 + }, + { + 'name': 'eric', + 'phone': 7898 + } +] +print(phonebook) +print(list(map(lambda x:x['name'],phonebook))) +print(list(map(lambda x:x['phone'],phonebook))) +``` +`map()`可以传递多个迭代对象: +```python +a_list=[1,2,3] +b_list=[2,4,6] +print(list(map(lambda x,y:x*y,a_list,b_list)))#[2,8,18] +``` +利用lambda作为sort函数排序的依据 +```python +pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')] +pairs.sort(key=lambda p: p[1])#使用p[1]结构必须保证传入数据是可索引的序列类型,否则会报错。 +#注意key作为指定sort排序的规则 +#key=lambda p:p[1]相当于 +#def get_second_element(item):#注意函数中item传入的需要是元组或列表?? +# return item[1] +#key=get_second_element +pairs +``` +# 递归函数 +## 递归(Recursion) +递归函数(Recursive Functions):在自身内部调用自身的函数。 +阶乘函数为例: +```python +def f(n): + if n==1: + return 1 + else: + return n*f(n-1) +print(f(5)) +``` +## 递归函数的执行过程 +执行过程:f(5)--5*f(4)--4*f(3)--3*f(2)--2*f(1)--1-->1*2-->2*3-->4*6-->5*24-->120 +```python +#执行过程拆解: +def f(n): + print('\tn =', n) + if n == 1: + print('Returning...') + print('\tn =', n, 'return:', 1) + return 1 + else: + r = n * f(n-1) + print('\tn =', n, 'return:', r) + return r +print('Call f(5)...') +print('Get out of f(n), and f(5) =', f(5)) +``` + +## 递归的终点 +递归函数必须在内部有一个让自己停止调用的方式,否则永远循环下去了... +和尚传说: +```python +def a_monk_telling_story(): + print("山上有座庙,庙里有个和尚,和尚讲故事,他说...") + return a_monk_telling_story() +``` +以上函数是个死循环! +盗梦空间: +```python +import random +def in_dream(day=0,dead=False,kicked=False): + dead=not random.randrange(0,10) + kicked=not random.randrange(0,10) + day+=1 + print('dead:',dead,'kicked',kicked) + if dead: + print(f"I slept {day} days,and was dead to wake up...") + return day + elif kicked: + print(f"I slept {day} days,and was kicked to wake up...") + return day + return in_dream(day) +print("The in_dream() function returns:",in_dream()) +``` +1. 条件语句中,某个值与True进行比较,正确写法:if condition:pass +2. random.randrange(0,10)表示1/10的原因:pass +递归函数的特征: +* return中返回自身的调用 +* 为了避免死循环,至少一个条件返回的不再是自身的调用 +## 变量的作用域 +* 全局变量(Global Variables):在所有函数外被赋值而后可以使用的,是全局变量,它们的作用域是全局,在函数内外都可以被调用。 +* 局部变量(Local Variables):在函数内部被赋值后使用的,都是局部变量,它们的作用域是局部的,无法被函数外的代码调用。 +程序员严格遵循一条原则: +> 函数内部绝对不调用全局变量,即便是必须改变全局变量,也只能通过函数的返回值在函数外改变全局变量。 +> 做事的原则:自己的事自己搞,别人的事,最多通过自己的产出让他们自己去搞... + +```python +def factorial(n): + if n==1: + return 1 + else: + return n*factorial(n-1) +a=5 +b=factorial(a) #a不会改变 +print(a,b) +a=factorial(a)#主动为a赋值 +print(a,b) +``` +变量只是作为参数被传递,但是变量本身不改变。哪怕内外的变量和参数都是同一个名称, + +## 递归函数三原则 +1. 根据定义,递归函数必须在内部调用自己 +2. 必须设定一个退出条件 +3. 递归必须能逐步达到退出条件 + +## 思考与练习 +普林斯顿大学的一个网页,有很多递归的例子 + +https://introcs.cs.princeton.edu/java/23recursion/ \ No newline at end of file diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.16.md" "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.16.md" new file mode 100644 index 000000000..c86df4152 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.16.md" @@ -0,0 +1,232 @@ +# 函数文档 +为函数撰写说明书 +## Docstring +```python +def is_prime(n): + """ + Return a boolean value based upon + whether the argument n is a prime number. + """ + if n < 2: + return False + if n == 2: + return True + for m in range(2, int(n**0.5)+1): + if (n % m) == 0: + return False + else: + return True + + +help(is_prime) +print(is_prime.__doc__) +is_prime.__doc__ +``` +## 书写Docstring的规范 +既然学,就要像样——这真的很重要。 +规范: +> 1. 无论是单行还是多行的 Docstring,一概使用三个双引号括起; +> 2. 在 Docstring 内部,文字开始之前,以及文字结束之后,都不要有空行; +> 3. 多行 Docstring,第一行是概要,随后空一行,再写其它部分; +> 4. 完善的 Docstring,应该概括清楚以下内容:参数、返回值、可能触发的错误类型、可能的副作用,以及函数的使用限制等等; +> 5. 每个参数的说明都使用单独的一行…… +两个规范文件: +> * [PEP 257: Docstring Convensions](https://www.python.org/dev/peps/pep-0257/) +> * [PEP 258: Docutils Design Specification](https://www.python.org/dev/peps/pep-0258/) +格外注意: +> Docstring 是**写给人看的**,所以,在复杂代码的 Docstring 中,写 **Why** 要远比写 _What_ 更重要 —— 你先记住这点,以后的体会自然会不断加深。 +## Sphinx版本的Docstring规范 +Sphinx可以从.py文件中提取Docstring,而后生成完整的Documentation。 + +```python +class Vehicle(object): + ''' + The Vehicle object contains lots of vehicles + :param arg: The arg is used for ... + :type arg: str + :param `*args`: The variable arguments are used for ... + :param `**kwargs`: The keyword arguments are used for ... + :ivar arg: This is where we store arg + :vartype arg: str + ''' + + + def __init__(self, arg, *args, **kwargs): + self.arg = arg + + def cars(self, distance, destination): + '''We can't travel a certain distance in vehicles without fuels, so here's the fuels + + :param distance: The amount of distance traveled + :type amount: int + :param bool destinationReached: Should the fuels be refilled to cover required distance? + :raises: :class:`RuntimeError`: Out of fuel + + :returns: A Car mileage + :rtype: Cars + ''' + pass + +help(Vehicle) +``` +output: +```python +Help on class Vehicle in module __main__: + +class Vehicle(builtins.object) + | Vehicle(arg, *args, **kwargs) + | + | The Vehicle object contains lots of vehicles + | :param arg: The arg is used for ... + | :type arg: str + | :param `*args`: The variable arguments are used for ... + | :param `**kwargs`: The keyword arguments are used for ... + | :ivar arg: This is where we store arg + | :vartype arg: str + | + | Methods defined here: + | + | __init__(self, arg, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | cars(self, distance, destination) + | We can't travel a certain distance in vehicles without fuels, so here's the fuels + | + | :param distance: The amount of distance traveled + | :type amount: int + | :param bool destinationReached: Should the fuels be refilled to cover required distance? + | :raises: :class:`RuntimeError`: Out of fuel +... + | + | __weakref__ + | list of weak references to the object (if defined) + +Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings... +``` +> * [sphinx.ext.napoleon – Support for NumPy and Google style docstrings](http://www.sphinx-doc.org/en/master/usage/extensions/napoleon.html) +> * [sphinx.ext.autodoc – Include documentation from docstrings](https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html) + +# 保存到文件的函数 +保存写好的函数 +## 模块 +mycode.py: +```python +# %load mycode.py +# 当前这个 Code Cell 中的代码,保存在当前文件夹中的 mycode.py 文件中 +# 以下的代码,是使用 Jupyter 命令 %load mycode.py 导入到当前 Code Cell 中的: + +def is_prime(n): + """ + Return a boolean value based upon + whether the argument n is a prime number. + """ + if n < 2: + return False + if n == 2: + return True + for m in range(2, int(n**0.5)+1): + if (n % m) == 0: + return False + else: + return True + +def say_hi(*names, greeting='Hello', capitalized=False): + """ + Print a string, with a greeting to everyone. + :param *names: tuple of names to be greeted. + :param greeting: 'Hello' as default. + :param capitalized: Whether name should be converted to capitalized before print. False as default. + :returns: None + """ + for name in names: + if capitalized: + name = name.capitalize() + print(f'{greeting}, {name}!') +``` +而后在其他地方调用以上代码: +```python +import mycode +help(mycode.is_prime) +help(mycode.say_hi) + +mycode._name_ +mycode.is_prime(3) +mycode.sayhi('mike','zoe') +``` +以上这个模块(Module)的名称,就是mycode +## 模块文件系统目录检索顺序 +import执行逻辑:先看看内建模块,再查找`sys.path`所返回的目录列表 +可以使用以下代码查看当前机器的`sys.path` +```python +import sys +sys.path +``` +sys.path所返回的目录列表中,你当前的工作目录排在第一位 +有时需要专门添加特定位置的module,可以使用`sys.path.append()` +```python +import sys +sys.path.append("/My/Path/To/Module/Directory") +import my_module +``` + +## 系统内建的模块 +可以使用以下代码获取系统内建模块的列表: +```python +from IPython.core.interactiveshell import InteractiveShell +InteractiveShell.ast_node_interactivity = "all" +import sys + +sys.builtin_module_names +"_sre" in sys.builtin_module_names # True +"math" in sys.builtin_module_names # False (根据自己电脑库的安装情况,结果会有不同) +``` +你新建的模块名称,最好别与系统内建模块名称重合。 +## 引入指定模块中的特定函数 +1. 引入mycode中所有函数 +`from mycode import*` +2. 只引入单一函数,调用时不必再写`mycode.is_prime()` +`from mycode import is_prime` +`is_prime(3)` +3. `_init_.py`作为包(packages)的独立命名空间(namespace) +`如果mycode.py存在mycode目录下,且目录下同时存在_init_.py文件` +模块:.py文件 +包(packages):包含多个模块,多个模块与`_init_.py`处在一个独立的命名空间(namespace) +举例,目录结构: +project/ +├── foo/ +│ ├── __init__.py +│ └── bar.py +└── main.py +```python +# 方式一 +import foo.bar +foo.bar.some_function() + +# 方式二 +from foo import bar +bar.some_function() +# 方式三 +from foo import * +#相当于把foo中所有的.py导入 +``` + +## 引入并使用化名 +为了避免混淆或输入太多字符,有时为引入的函数设定化名(alias) +```python +#为函数取化名 +from mycode import is_prime as isp +isp() +#为整个模块取化名 +import mycode as m +m.is_prime(3) +m.say_hi('mike','zoe') +``` +## 模块中不一定只有函数 +导入的模块中除了函数还可以有非函数的可执行代码,只执行一次。 +pass +## dir()函数 +函数保存至模块后,可以使用`dir()`函数查看模块中的变量和函数名称 +```python +import mycode +dir(mycode) +``` \ No newline at end of file From a16930cabedb1a35f801aa5e15a55db6de33278d Mon Sep 17 00:00:00 2001 From: johoo <57379875+johoo123@users.noreply.github.com> Date: Sun, 18 May 2025 00:55:58 +0800 Subject: [PATCH 16/17] =?UTF-8?q?=E5=87=BD=E6=95=B0=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Part.3.B.2.classes-2.ipynb | 120 +-- Part.3.B.3.decorator-iterator-generator.ipynb | 15 +- .../5.16.md" | 425 ++++++++++- .../5.17.md" | 686 ++++++++++++++++++ 4 files changed, 1136 insertions(+), 110 deletions(-) create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/5.17.md" diff --git a/Part.3.B.2.classes-2.ipynb b/Part.3.B.2.classes-2.ipynb index 13085021f..247079e2d 100644 --- a/Part.3.B.2.classes-2.ipynb +++ b/Part.3.B.2.classes-2.ipynb @@ -406,92 +406,6 @@ "scrolled": true }, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Help on runningGolem in module __main__ object:\n", - "\n", - "class runningGolem(Golem)\n", - " | runningGolem(name=None)\n", - " | \n", - " | Method resolution order:\n", - " | runningGolem\n", - " | Golem\n", - " | builtins.object\n", - " | \n", - " | Methods defined here:\n", - " | \n", - " | run(self)\n", - " | \n", - " | say_hi(self)\n", - " | \n", - " | ----------------------------------------------------------------------\n", - " | Methods inherited from Golem:\n", - " | \n", - " | __init__(self, name=None)\n", - " | Initialize self. See help(type(self)) for accurate signature.\n", - " | \n", - " | ----------------------------------------------------------------------\n", - " | Data descriptors inherited from Golem:\n", - " | \n", - " | __dict__\n", - " | dictionary for instance variables (if defined)\n", - " | \n", - " | __weakref__\n", - " | list of weak references to the object (if defined)\n", - "\n" - ] - }, - { - "data": { - "text/plain": [ - "['__class__',\n", - " '__delattr__',\n", - " '__dict__',\n", - " '__dir__',\n", - " '__doc__',\n", - " '__eq__',\n", - " '__format__',\n", - " '__ge__',\n", - " '__getattribute__',\n", - " '__gt__',\n", - " '__hash__',\n", - " '__init__',\n", - " '__init_subclass__',\n", - " '__le__',\n", - " '__lt__',\n", - " '__module__',\n", - " '__ne__',\n", - " '__new__',\n", - " '__reduce__',\n", - " '__reduce_ex__',\n", - " '__repr__',\n", - " '__setattr__',\n", - " '__sizeof__',\n", - " '__str__',\n", - " '__subclasshook__',\n", - " '__weakref__',\n", - " 'built_year',\n", - " 'name',\n", - " 'run',\n", - " 'say_hi']" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "text/plain": [ - "{'name': 'Clay', 'built_year': 2019}" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - }, { "data": { "text/plain": [ @@ -526,9 +440,9 @@ " print('Hey! Nice day, Huh?')\n", "\n", "rg = runningGolem('Clay')\n", - "help(rg)\n", - "dir(rg)\n", - "rg.__dict__\n", + "# help(rg)\n", + "# dir(rg)\n", + "# rg.__dict__\n", "hasattr(rg, 'built_year')" ] }, @@ -959,7 +873,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -968,7 +882,7 @@ "1" ] }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, @@ -978,7 +892,7 @@ "101" ] }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, @@ -988,7 +902,7 @@ "101" ] }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, @@ -1035,23 +949,23 @@ " 'say_hi': ,\n", " 'cease': ,\n", " 'is_active': ,\n", - " 'population': ,\n", + " 'population': ,\n", " '__dict__': ,\n", " '__weakref__': ,\n", " '__doc__': None})" ] }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ - "{'name': 'Clay', 'built_year': 2019, '_Golem__active': True}" + "{'name': 'Clay', 'built_year': 2025, '_Golem__active': True}" ] }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, @@ -1061,17 +975,17 @@ "True" ] }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, @@ -1081,7 +995,7 @@ "10000" ] }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -1133,7 +1047,7 @@ "hasattr(Golem, 'population')\n", "getattr(Golem, 'population')\n", "setattr(Golem, 'population', 10000)\n", - "g.population # 所以,在很多的情况下,不把数据封装在 Class 内部的话,后面会有很多麻烦。" + "g.population # 所以,在很多的情况下,不把数据封装在 Class 内部的话,后面会有很多麻烦。\n" ] }, { @@ -1160,7 +1074,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.9.21" }, "toc-autonumbering": true }, diff --git a/Part.3.B.3.decorator-iterator-generator.ipynb b/Part.3.B.3.decorator-iterator-generator.ipynb index cff500d95..f76ade18b 100644 --- a/Part.3.B.3.decorator-iterator-generator.ipynb +++ b/Part.3.B.3.decorator-iterator-generator.ipynb @@ -313,7 +313,7 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -372,7 +372,7 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -391,7 +391,9 @@ "def counter(start, stop):\n", " while start <= stop:\n", " yield start\n", + " \n", " start += 1\n", + " # return start\n", "for i in counter(101, 105):\n", " print(i)" ] @@ -922,14 +924,14 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG.\n" + "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG.\n" ] } ], @@ -947,8 +949,9 @@ " return modified_restult\n", " return wrapper\n", "\n", - "@strong\n", + "# @strong\n", "@uppercase\n", + "@strong\n", "def an_output():\n", " return 'The quick brown fox jumps over the lazy dog.'\n", "print(an_output())" @@ -1116,7 +1119,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.3" + "version": "3.9.21" }, "toc-autonumbering": true }, diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.16.md" "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.16.md" index c86df4152..ffec9afb1 100644 --- "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.16.md" +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.16.md" @@ -229,4 +229,427 @@ pass ```python import mycode dir(mycode) -``` \ No newline at end of file +``` + +# 测试驱动的开发 +算法就是解决问题的步骤而已。 +在第二部分的第一章里,我们看过一个判断是否为闰年的函数: + +> 让我们写个判断闰年年份的函数,取名为 is_leap(),它接收一个年份为参数,若是闰年,则返回 True,否则返回 False。 +> +> 根据闰年的定义: +> +> > * 年份应该是 4 的倍数; +> > * 年份能被 100 整除但不能被 400 整除的,不是闰年。 +> > * 所以,相当于要在能被 4 整除的年份中,排除那些能被 100 整除却不能被 400 整除的年份。 +```python +#写法一 +def is_leap(year): + return (year%4==0 and year%100!=0) or year%400==0 +#写法二 +def is_leap2(year): + if year%4==0: + if (year%100!=0) or (year%400==0): + return True + else + return False +``` +> 以测试为驱动的开发:"Test Driven Development" +举例:is_leap(year)是正确的,那么: +> * is_leap(4)的返回值是True # 被4整除但未被100整除 +> * is_leap(200)的返回值是False # 能被4和100整除,但不能被400整除 +> * is_leap(220)的返回值是True #能被4整除,但未被100整除 +> * is_leap(400)的返回值是True #能被400整除 +```python +from IPython.core.interactiveshell import InteractiveShell +InteractiveShell.ast_node_interactivity = "all" + +def is_leap(year): + pass + +is_leap(4) is True +is_leap(200) is False +is_leap(220) is True +is_leap(400) is True +``` +> * 先假定都不是闰年 +> * 再看看能否被4整除 +> * 再剔除被100整除但不能被400整除的年份... +```python +def is_leap(year): + r=False + return r +is_leap(4) is True +is_leap(200) is False +is_leap(220) is True +is_leap(400) is True +``` +然后再实现这样的部分:"年份应该是4的倍数": +```python +def is_leap(year): + r=False + if(year%4==0): + r=True + return r +is_leap(4) is True +is_leap(200) is False +is_leap(220) is True +is_leap(400) is True +``` +再实现能被100整除但不能被400整除,就返回False: +```python +def is_leap(year): + r=False + if(year%4==0): + r=True + if(year%100==0): + if (year%400!=0): + r=False + return r +is_leap(4) is True +is_leap(200) is False +is_leap(220) is True +is_leap(400) is True +``` +Python内建库中的datetime.py +```python +def is_leap(year): + return year%4==0 and (year%100!=0) or (year%400==0) +is_leap(300) +#关键还是理解质数的定义:1. 能被4整除 2. 能被100整除但不能被400整除:不是质数-->不能被100整除或被400整除 +``` +在Python中定义了大量常见“意外”,并且按照层级分类: +> 在第三部分阅读完毕之后,可以回来重新查看以下官方文档:
+> https://docs.python.org/3/library/exceptions.html + + +``` bash +BaseException + +-- SystemExit + +-- KeyboardInterrupt + +-- GeneratorExit + +-- Exception + +-- StopIteration + +-- StopAsyncIteration + +-- ArithmeticError + | +-- FloatingPointError + | +-- OverflowError + | +-- ZeroDivisionError + +-- AssertionError + +-- AttributeError + +-- BufferError + +-- EOFError + +-- ImportError + | +-- ModuleNotFoundError + +-- LookupError + | +-- IndexError + | +-- KeyError + +-- MemoryError + +-- NameError + | +-- UnboundLocalError + +-- OSError + | +-- BlockingIOError + | +-- ChildProcessError + | +-- ConnectionError + | | +-- BrokenPipeError + | | +-- ConnectionAbortedError + | | +-- ConnectionRefusedError + | | +-- ConnectionResetError + | +-- FileExistsError + | +-- FileNotFoundError + | +-- InterruptedError + | +-- IsADirectoryError + | +-- NotADirectoryError + | +-- PermissionError + | +-- ProcessLookupError + | +-- TimeoutError + +-- ReferenceError + +-- RuntimeError + | +-- NotImplementedError + | +-- RecursionError + +-- SyntaxError + | +-- IndentationError + | +-- TabError + +-- SystemError + +-- TypeError + +-- ValueError + | +-- UnicodeError + | +-- UnicodeDecodeError + | +-- UnicodeEncodeError + | +-- UnicodeTranslateError + +-- Warning + +-- DeprecationWarning + +-- PendingDeprecationWarning + +-- RuntimeWarning + +-- SyntaxWarning + +-- UserWarning + +-- FutureWarning + +-- ImportWarning + +-- UnicodeWarning + +-- BytesWarning + +-- ResourceWarning +``` +`try`语句块执行“意外”的语句,也可以配合`except`,`else`,`finally` +```python +try: + f = open('test_file.txt', 'r') +except FileNotFoundError as fnf_error: + print(fnf_error) +#若try中语句没有被执行,则except语句块会接管流程... +``` +试错流程: +```python +try: + do_something() +except built_in_error as name_of_error: + do_something() +else: + do_something() +``` + +或者: + +```python +try: + do_something() +except built_in_error as name_of_error: + do_something() +else: + do_something() +finally: + do_something() +``` + +甚至可以嵌套: + +```python +try: + do_something() +except built_in_error as name_of_error: + do_something() +else: + try: + do_something() + except built_in_error as name_of_error: + do_something() +... +``` +更多关于错误处理的内容,请在阅读完第三部分中与 Class 相关的内容之后,再去详细阅读以下官方文档: + +> * [Errors and Exceptions](docs.python.org/3/tutorial/errors.html) +> * [Built-in Exceptions](https://docs.python.org/3/library/exceptions.html) +> * [Handling Exceptions](https://wiki.python.org/moin/HandlingExceptions) + +测试驱动开发在实际开发过程中,需要使用更为强大更为复杂的模块、框架和工具,比如Python内建库中的[unittest](https://docs.python.org/3/library/unittest.html) 模块 + +写注释、写Docstring、写测试或写试错语句块...编程中麻烦但是有必要做的事情... +记笔记... + +现在还不是时候,等你把整本书都完成之后,记得回来再看这个链接: + +> * [doctest —— Test interactive Python examples](https://docs.python.org/3/library/doctest.html) +> * [unittest —— Unit testing framework](https://docs.python.org/3/library/unittest.html) + +# 可执行的Python文件 +理论而言,你最终可以把任何一个程序,无论大小,都封装到仅仅一个函数中。按照惯例(Convention),这个函数叫做`main()`: +```python +def routine_1(): + print('Routine 1 done.') + +def routine_2(): + sub_routine_1() + sub_routine_2() + print('Routine 2 done.') + +def sub_routine_1(): + print('Sub-routine 1 done.') + +def sub_routine_2(): + print('Sub-routine 2 done.') + +def main(): + routine_1() + routine_2() + print('This is the end of the program.') + +if __name__ == '__main__': + main() +``` +当一个模块被`import`导入时,这个模块的`_name_`就是模块名。当一个模块被命令行运行时,这个模块的`_name_`就被python解释器设定为`_main_` +```python +if __name__ == '__main__': + main() +``` + +这么做的结果是: + +> 1. 当 Python 文件被当作模块,被 `import` 语句导入时,`if` 判断失败,`main()` 函数不被执行; +> 2. 当 Python 文件被 `python -m` 运行的时候,`if` 判断成功,`main()` 函数才被执行。 +把`this.py`封装到`that.py`中: +```python +# %load that.py +def main(): + + s = """Gur Mra bs Clguba, ol Gvz Crgref + Ornhgvshy vf orggre guna htyl. + Rkcyvpvg vf orggre guna vzcyvpvg. + Fvzcyr vf orggre guna pbzcyrk. + Pbzcyrk vf orggre guna pbzcyvpngrq. + Syng vf orggre guna arfgrq. + Fcnefr vf orggre guna qrafr. + Ernqnovyvgl pbhagf. + Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf. + Nygubhtu cenpgvpnyvgl orngf chevgl. + Reebef fubhyq arire cnff fvyragyl. + Hayrff rkcyvpvgyl fvyraprq. + Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff. + Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg. + Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu. + Abj vf orggre guna arire. + Nygubhtu arire vf bsgra orggre guna *evtug* abj. + Vs gur vzcyrzragngvba vf uneq gb rkcynva, vg'f n onq vqrn. + Vs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn. + Anzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!""" + + d = {} + for c in (65, 97): + for i in range(26): + d[chr(i+c)] = chr((i+13) % 26 + c) + + print("".join([d.get(c, c) for c in s])) + + +if __name__ == '__main__': + main() +``` +1. 使用`python that.py`或者`python -m that`将`that.py`当作可执行模块运行的时候,`main()`就会被执行 +```python +%%bash +python that.py +``` +```python +%%bash +python -m that +``` +2. 在别的文件中`import that`内容不会被执行。 +3. 把整个程序放进`main()`函数之后,`import that`不会自动执行main函数里的代码。不过,你可以调用that.main(): +```python +import that +that.main() +#但是目前that.py中还没有写Docstring +``` +可以把之前的案例:从37万词汇中挑出字母加起来等于100的词汇的程序,也可以改写成以下形式: +```python +#!usr/bin/env pyhton +def sum_of_word(word): + sum=0 + for char in word: + sum+=ord(char)-96 + return sum +def main(wordlist,result): + with open(result,'w') as result: + with open(wordlist,'r') as file: + for word in file.readlines(): + if sum_of_word(word.strip())==100: + result.write(word) +if __name__=='__main__': + main('words_alpha.txt','results.txt') +# 通过文件名而非文件对象进行传递,符合模块化、资源安全管理的编程最佳实践。 +``` +1. shebang行:告诉系统如何执行当前脚本,确保脚本可跨系统执行,推荐使用 #!/usr/bin/env python 而非硬编码路径。 +2. 传递文件名,使得模块更容易被调用... + + +另外,再搜索一下: + +> [`python3 script executable parameters retrieving`](https://www.google.com/search?q=python3+script+executable+parameters+retrieving) + +你就可以把以上程序改成在命令行下能够接收指定参数的 Python 可执行文件…… + +`import this`的彩蛋: +```python +from IPython.core.interactiveshell import InteractiveShell +InteractiveShell.ast_node_interactivity = "all" + +import this +love = this +this is love # True +love is True # False +love is False # False +love is not True or False # True +love is not True or False; love is love # True True +``` +Python 的操作符优先级,完整表格在这里: + +> [Operator precedence](https://docs.python.org/3/reference/expressions.html#operator-precedence) + +Python 的更多彩蛋: + +> [Python Easter Eggs](https://github.com/OrkoHunter/python-easter-eggs) + +# 刻意思考 +> 刻意思考哪儿需要刻意练习 +刻意思考,就是所谓的琢磨。 +一个琢磨的应用领域: +> 这东西能用在哪儿呢? +一旦我们启动了对某项技能的自学之后,在那过程中,最具价值的刻意思考就是,时时刻刻琢磨“这东西能用在哪儿呢?” + +找到用处,有时候还真挺难的... +找活干,是应用所学的最有效方式,有活干,所以就有问题需要解决,所以就有机会反复攻关,在这个过程中,以用带练... + +**劳者多能** + +在最初想不出什么用处的时候,还可以退而求其次,看看: +**“别人想出什么用处没有?”** + +再高阶一点的刻意思考(琢磨),无非是在“这东西能用在哪儿呢?”这句话里加上一个字而已: +> 这东西**还**能用在哪儿呢? + +琢磨方式——“做事哲学”——可以普遍应用在其他领域,甚至其他任何领域。 + +开发方法论:[MoSCoW Method](https://en.wikipedia.org/wiki/MoSCoW_method) + +简单说,就是,凡事都可以分为: +> * Must have +> * Should have +> * Could have +> * Won't have + +在开发的时候,把所谓的需求打上这4个标签中的某一个,以此分类,就很容易删掉那些实际上做了还不如不做的功能... + +琢磨一下,这个东西还可以用在什么地方? + +写书的准备过程:罗列所有相关话题-删-分类(must have,should have,could have,won't have) + +# 战胜难点 +**困难幻觉** 所谓的学习曲线陡峭,只是因为没有把难点拆分成更小的单元。 +不混时间、刻意思考以及刻意练习。 +> 天下无难事,只怕有心人。 + +想成为有心人,其实无非是学会拆解之后逐一突破,就这么简单。 + +第三部分: +> * 类,以及面向对象编程(Class,OOP) +> * 迭代器、生成器、装饰器(Iterators、Generators、Decorators) +> * 正则表达式(Regular Expressions) +> * 巴科斯-诺尔范式(Backus Normal Form) + +以上部分属于`must have` +> 无论学什么都一样,难的部分不学会,就等于整个没学。 +——仅因为不够全面。 + +有什么必要干前功尽弃的事情呢?要么干脆别学算了,何必把自己搞成一个半吊子?—— 可惜,这偏偏是绝大多数人的习惯,学什么都一样,容易的部分糊弄糊弄,困难的部分直接回避…… 其实,所有焦虑,都是这样在许多年前被埋下,在许多年后生根发芽、茂盛发达的 —— 你想想看是不是如此? + +其实吧,泡澡和冥想,还真是最容易产生 Eureka 状态的两种活动。原理在于,泡澡和打坐的时候,大脑都极其放松,乃至于原本相互之间并无联系的脑神经突触之间突然产生相互关联;而那结果就是日常生活中所描述的 “融会贯通”,于是,突然之间,Eureka! + +自学者总是感觉幸福度很高,就是这个原因。日常中因为自学,所以总是遇到更多的困难。又因为这些东西不过是手艺,没什么可能终其一生也解决不了,恰恰相反,都是假以时日必然解决的 “困难”…… 于是,自学者恰恰因为遇到的 “困难” 多,所以才有更多遇到 “Eureka” 的可能性,那种幸福,还真的难以表述,即便表述清楚了,身边的人也难以理解,因为自学者就是很少很少。 + +方法: +1. 读不懂也要读完,读完之后再读很多遍; +2. 不断自己动手归纳总结整理。 + +> * 知识就是知识,它没有任何义务去具备幽默生动的属性; +> * 手艺就是手艺,它没有任何义务去具备有趣欢乐的属性。 + +有意义的知识都是自己用出来的。 +能够**耐心**读完那么多在别人看来 “极度枯燥” 的资料,是自学者的擅长。可那在别人看来 “无以伦比” 的耐心,究竟是哪儿来的呢?如何造就的呢?没断奶的人想象不出来。其实也很简单,首先,平静地接受了它枯燥的本质;其次,就是经过多次实践已然明白,无论多枯燥,总能读完;无论多难,多读几遍总能读懂…… 于是,到最后,**只不过是习惯了而已。** diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.17.md" "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.17.md" new file mode 100644 index 000000000..3bc329df8 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.17.md" @@ -0,0 +1,686 @@ + +# 类——面向对象编程 +## 面向对象编程 +面向对象编程(Object Oriented Programming,OOP)是一种编程的范式(Paradigm),或者说,是一种方法论(Methodology) +## 争议 +然而,争议归争议,应用归应用 —— 就好像英语的弊端不见得比其他语言少,可就是最流行,那怎么办呢?用呗 —— 虽然该抱怨的时候也得抱怨抱怨。 +## 基本术语 +> *属性——用自然语言描述,通常是名词(Nouns) +> *方法——用自然语言描述,通常是动词(Verbs) + +我们程序里创建对象时,做法常常是 +> * 先创建最抽象的类(Class) +> * 然后再创建子类(Subclass) +继承(Inheritance)关系:狗这个对象继承了哺乳动物有“头”这个属性(Attributes),狗是从哺乳动物继承过来的,那么它就拥有哺乳动物的所有属性... + +每当我们创建好一个类后,就可以根据它创建它的许多个实例(Instances) +> * 对象,封装,抽象 +> * 界面,属性,方法 +> * 继承,类,子类,实例 + +类(Class)这个东西也一样,它也有创作者和使用者。 + +你可以这样分步理解: + +> * 你创造了一个类(Class),这时候你是创作者,从你眼里望过去,那就是个类(Class); +> * 而后你根据这个类的定义,创建了很多实例(Instances); +> * 接下来一旦你开始使用这些实例的时候,你就成了使用者,从使用者角度望过去,手里正在操作的,就是各种对象(Objects)…… + +# 类——Python的实现 +## Defining Class +Class使用`class`关键字定义。 +与函数定义不同的地方在于,Class接收参数不是在`class Classname()`:的括号里完成——那个圆括号有另外的用处。 +```python +from IPython.core.interactiveshell import InteractiveShell +InteractiveShell.ast_node_interactivity = "all" +import datetime + +class Golem: + + def __init__(self, name=None): + self.name = name + self.built_year = datetime.date.today().year + + def say_hi(self): + print('Hi!') + +g = Golem('Clay') +#Instance过程:首先创建一个空的实例对象,并隐式传递该实例对象作为__init__方法的第一个参数;其次,括号内参数按**位置顺序**传递给__init__方法的形参name...若创建值不传入形参,会按照默认值创建。 +g.name #'Clay' +g.built_year #2019 +g.say_hi #> +g.say_hi() #Hi! +type(g) #__main__.Golem +type(g.name) #str +type(g.built_year) #int +type(g.__init__) #method +type(g.say_hi) #method +``` +说明: +1. `__init__()`是Clss中的一个函数,也是创建实例过程中,Object初始化过程,需要使用init函数,因此这个初始化函数也是Class的一个Method。系统会把`__init()__`当作Instance在创建后初始化的函数,这个函数名称是强制指定的,初始化函数必须使用这个名称。 +2. `self`是一个系统可以默认识别的变量,用来指代Class创建的Instance。`self`定义是在`def__init__(self,...)`有些程序员会把`self`写为`this`。 +过程: +1. g从此之后就是根据Golem这个Class创建的Instance,对使用者而言,它是个Object; +2. 因为Golem这个Class里面有`__init__()`,所以,g被创建的时候,g需要被初始化... +3. 在g的变量中,出现了一个叫做`self`的来指代`g`变量本身。 +4. self.name接收一个参数,'Clay',并将其保存下来。 +5. 生成一个叫做`self.built_year`的变量,其中保存的是`g`这个Object被创建的年份... +## Inheritance +对创建的Golem Class去Inherit一个新的Class,比如`Running_Golem`,一个能跑的机器人: +```python +import datetime +class Golem: + def __init__(self,name=None): + self.name=name + self.built_year=datetime.date.today().year + def say_hi(self): + print('Hi') +class Running_Golem(Golem):#新的类Running_Golem继承Golem + def run(self): + print("Can't you see?I'm running") + +rg=Running_Golem('Clay') +#创建的Instance,由于Running_Golem继承了Golem,因此,Instance既有Golem的Attributes和Methods还多了一个Method:self.run +rg.run +rg.run() +rg.name +rg.built_year +rg.say_hi() +``` +## Overrides +当我们创建一个Inherited Class的时候,可以重写(Overriding)Parent Class中的Methods。 +**为什么要重写Methods?** +```python +import datatime + +class Golem: + def __init__(self,name=None): + self.name=name + self.built_year=datetime.date.today().year + def say_hi(self): + print('Hi') +class runningGolem(Golem): + def run(self): + print("Can't you see? I'm running...") + def say_hi(self):#重写say_hi函数: + print('Hey!Nice day,Huh?') +rg=runningGolem('Clay') +rg.run #仅返回绑定方法的对象,仅表示该方法与对象绑定:绑定方法对象(bound method) +rg.run() #rg作为实例对象,self默认隐式指向rg,调用Method会默认传递self参数 +rg.name #rg调用Attributes +rg.built_year +rg.say_hi() +``` +## Inspecting A Class +当我们作为用户想了解一个Class的Interface,即,它的Attributes和Methods的时候,常用的方式有: +1. help(object) +2. dir(object) +3. object.__dict__ + +```python +import datetime + +class Golem: + def __init__(self,name=None): + self.name=name + self.built_year=datetime.date.today().year + def say_hi(self): + print('Hi') +class runningGolem(Golem):#Inherited + def run(self): + print("I'm running") + def say_hi(self):#overrides + print('Hello,goodnight') +rg=runningGolem('Clay') +help(rg) +dir(rg) +rg.__dict__ +hasattr(rg,'built_year') +``` +## Scope(*) +每个变量,都属于某一个**Scope**(变量的作用域),在同一个Scope中,变量可以被引用被操作... +给Golem增加一点功能,需要查看有多少个Golem处于活跃状态...也因此给Golem增加一个Method:`cease()` +...而外部会每隔一段时间,用`Golem.is_active()`去检查所有机器人... +三个python的内建函数: + +> * `hasattr(object, attr)` 查询这个 `object` 中有没有这个 `attr`,返回布尔值 +> * `getattr(object, attr)` 获取这个 `object` 中这个 `attr` 的值 +> * `setattr(object, attr, value)` 将这个 `object` 中的 `attr` 值设置为 `value` + +```python +import datetime + +class Golem: + population=0 + __life_span=10 + #注意:创建实例之后,马上执行的__init__()这个初始化函数 + def __init__(self,name=None): + self.name=name + self.built_year=datetime.date.today().year + self.__active=True #默认活动状态是True(活着的) + Golem.population+=1 #每Instance一个,population就增加一次 + def say_hi(self): + print('Hi') + def cease(self): + self.__active=False #cease方法,调用一次使得实例的active关闭 + Golem.population-=1 #同时population减少一个 + def is_active(self): + #首先判断该实例是否关闭:今天-创建时间是否大于寿命(life_span) + if datetime.date.today().year-self.built_year>=Golem.__life_span: + self.cease() + return self.__active #返回实例的__active的attributes +g=Golem() #Instance一个实例 +hasattr(Golem,'population')#True +hasattr(g,'population')#True +# __life_span,__active均属于类的私有变量,无论使用类还是实例调用,需要调用重新命名后的变量名: +# _Golem__life_span,_Golem__active。即正确写法: +# hasattr(Golem,'_Golem__life_span') +# hasattr(g,'_Golem__life_span') +# hasattr(g,'_Golem__active') +hasattr(Golem,'__life_span')#False? +hasattr(g,'__life_span')#False? +hasattr(g,'__active')#False? +Golem.population #1 +setattr(Golem,'population',10) +Golem.population #10 +x=Golem() #Instance另一个实例 +Golem.population #11 +x.cease() +Golem.population #10 +getattr(g,'population') #10--->population属于类变量,g和x共享它。 +g.is_active() #True 今天-创建时间<10,因此返回True +``` +1. 实例化后,首先马上运行的是__init__()函数 +2. __变量前面两个下划线,该变量属于“私有变量”(Priviate Variables),不能被外部引用。如果把__改成_则可以引用。 + +看看下面的图示,理解起来更为直观一些,其中每个方框代表一个 Scope: + +![](..\images\class-variables-scope.png) + +整个代码启动之后,总计有 4 个 Scopes 如图所示: + +> * ① `class Golem` 之外; +> * ② `class Golem` 之内; +> * ③ `__init__(self, name=None)` 之内; +> * ④ `cease(self)` 之内; + +在 Scope ① 中,可以引用 `Golem.population`,在生成一个 Golem 的实例 `g` 之后,也可以引用 `g.population`;但 `Golem.__life_span` 和 `g.__active` 在 Scope ① 是不存在的;✔ + +在 Scope ② 中,存在两个变量,`population` 和 `__life_span`;而 `__life_span` 是 Private(私有变量,因为它的变量名中前两个字符是下划线 `__`;于是,在 Scope ② 中,不存在 `Golem.__life_span` —— `hasattr(Golem, '__life_span')` 的值为 `False`;✔ +> 私有变量不能被外部引用,但是可以被函数内部的对象引用: + +在 Scope ③ 中和 Scope ④ 中,由于都给它们传递了 `self` 这个参数,于是,在这两个 Scope 里,都可以引用 `self.xxx`,比如 `self.population`,比如 `self.__life_span`; + +在 Scope ③ 中,`population` 是不存在的,如果需要引用这个值,可以用 `Golem.population`,也可以用 `self.population`。同样的道理,在 Scope ③ 中 `__life_span` 也不存在,如果想用这个值,可以用 `Golem.__life_span` 或者 `self.__life_span`; + +Scope ④ 与 Scope ③ 平行存在。所以在这里,`population` 和 `__life_span` 也同样并不存在。 + +## Encapsulation +目前Golem这个Class有一个问题:外面虽然不可以更改`__life_span和__active`,但是仍然可以更改population,把`population`更改为私有: +```python +import datetime + +class Golem: + __population=0 + __life_span=10 + #实例初始化: + def __init__(self,name=None): + self.name=name + self.built_year=datetime.date.today().year + self.__active=True + Golem.population+=1 + #Methods1:say_hi打招呼 + def say_hi(self): + print('Hi') + #Methods2:cease死亡 + def cease(self): + self.__active=False + Golem.__population-=1 + #Methods3:is_active判断是否存活 + def is_active(self): + if datetime.date.today().year-self.built_year>=Golem.__life_span: + self.cease + return self.__active + #Methods4:population查看当前人口 + def pupulation(self): + return Golem.__population +g=Golem('Clay') +g.population +g.population() +``` +如果希望外界写`g.population`查看人口而不是调用方法: +那么需要在Golem的popluation函数定义语句前加上: +`@property`: +```python +from IPython.core.interactiveshell import InteractiveShell +InteractiveShell.ast_node_interactivity = "all" +import datetime + +class Golem: + __population = 0 + __life_span = 10 + + def __init__(self, name=None): + self.name = name + self.built_year = datetime.date.today().year + self.__active = True + Golem.__population += 1 + + def say_hi(self): + print('Hi!') + + def cease(self): + self.__active = False + Golem.__population -= 1 + + def is_active(self): + if datetime.date.today().year - self.built_year >= Golem.__life_span: + self.cease + return self.__active + + @property + def population(self): + return Golem.__population + +g = Golem('Clay') +g.population #直接把population当作了实例的属性(实际上是一个Methods) +# g.population = 100 #不能直接赋值 +``` +如果必须赋值,需要再写一个函数,并且在函数前面加上:`@population.setter` +`@population.setter` +`def population(self,value):` +` Golem.__population=value` +```python +from IPython.core.interactiveshell import InteractiveShell +InteractiveShell.ast_node_interactivity = "all" +import datetime + +class Golem: + __population = 0 + __life_span = 10 + + def __init__(self, name=None): + self.name = name + self.built_year = datetime.date.today().year + self.__active = True + Golem.__population += 1 + + def say_hi(self): + print('Hi!') + + def cease(self): + self.__active = False + Golem.__population -= 1 + + def is_active(self): + if datetime.date.today().year - self.built_year >= Golem.__life_span: + self.cease + return self.__active + + @property + def population(self): + return Golem.__population + + @population.setter + def population(self, value): + Golem.__population = value + +g = Golem('Clay') +g.population #1 +g.population = 100 +ga = Golem('New') +g.population #101 +ga.population #101 +help(Golem) +Golem.__dict__ +g.__dict__ +hasattr(Golem, 'population') #True +getattr(Golem, 'population') # +setattr(Golem, 'population', 10000) +g.population # 10000 所以,在很多的情况下,不把数据封装在 Class 内部的话,后面会有很多麻烦。 +``` + +# 函数工具 +迭代器、生成器和装饰器,这些都是函数工具。DIG(Decorator,Iterator,Generator)——这些都是真正掌握python的关键。 +## 迭代器(Iterator) +python中的所有容器,都是可迭代的——准确的说,可以通过迭代遍历每一个元素: +```python +string = "this is a string." +list = ['item 1', 'item 2', 3, 5] +set = (1, 2, 3, 4, 5) +for c in string: + print(c, end=', ') +print() +for L in list: + print(L, end=', ') +print() +for s in set: + print(s, end=', ') +print() +``` +有个内建函数,可以用来把一个“可迭代对象”(Iterable)转换成“迭代器”——`Iter()` +```python +i=iter("python") +type(i) +s=iter((1,2,3,4,5)) +type(s) +L=iter(['item 1','item 2',3,5]) +type(L) +``` +迭代器如何使用?有个`next()`函数 +```python +i=iter("python") +next(i) +next(i) +next(i) +next(i) +next(i) +next(i) +#next(i)前面到n,再调用就报错:StopIteration +``` +迭代器传入的元素只有6个,`next(i)`被调用6次以后就会报错 +自己写一个迭代器: +```python +class Counter: + def __init__(self,start,stop): + self.current=start + self.stop=stop + def __iter__(self): #约定俗成的写法:可以把Counter识别Iterator类型 + return self + def __next__(self): #构成完整的迭代器 + if self.current>self.stop: + raise StopIteration #停止迭代器 + else: + c=self.current #先赋值 + self.current+=1 #再加1,默认按1进行迭代... + return c +c= Counter(11,20) +next(c) +next(c) +next(c) +for c in Counter(101,105): + print(c,end=',') +type(Counter) +``` +1. next()函数是内置的语法糖,是python迭代器的核心设计!底层逻辑在于直接调用迭代器对象的__next__()方法,而不是直接访问实例对象。 +2. 任何实现了__iter__()和__next__()方法的对象都被视为迭代器。 +使用`for loop`和`while loop`去遍历迭代器中的所有元素: +```python +class Counter(object): + def __init__(self, start, stop): + self.current = start + self.stop = stop + def __iter__(self): + return self + def __next__(self): + if self.current > self.stop: + raise StopIteration + else: + c = self.current + self.current += 1 + return c +#101 102 103 +for c in Counter(101, 103): + print(c, sep=', ') +#201 202 203 +c = Counter(201, 203) +while True: + try: + print(next(c), sep=', ') + except StopIteration: + break +#使用try的好处? +``` + +## 生成器(Generator) +使用函数写一个Counter,使用生成器: +```python +def counter(start,stop): + while start<=stop: + yield start + start+=1 +for i in counter(101,105): + print(i) +#被循环对象必须满足:1.__iter__()方法,返回一个迭代器(Iterator);2.__next__()方法,返回下一个元素,并在结束时抛出StopIteration。 +#执行到yield时,会立即返回右边的start,并保存当前的局部变量和指令指针。循环接着遍历,隐式调用next(),又会从yield的下一行开始运行... +``` +`yield`在执行后,后面的代码仍然会被执行。`return`之后的语句就被忽略了。 +还有一种东西,叫做生成器表达式。 +```python +even=(e for e in range(10) if not e%2)#e%2余0在布尔值判断中为False +# odd=(o for o in range(10) if o%2) +#注意,以上使用的是圆括号(),即迭代器(Iterator);若是使用[]:生成器创造的列表(list);若是使用花括号{}:生成器创造的集合(Set)... +print(even) +for e in even: + print(e) +#列表: +# even = (e for e in range(10) if not e % 2) +odd = [o for o in range(10) if o % 2] +print(odd) +for o in odd: + print(o) +#集合 +# even = (e for e in range(10) if not e % 2) +odd = {o for o in range(10) if o % 2} +print(odd) +for o in odd: + print(o) +``` +生成器表达式必须在括号内使用,包括函数的参数括号: +```python +sum_of_even = sum(e for e in range(10) if not e % 2) +print(sum_of_even) +``` +函数内部当然可以包含其他函数: +```python +def a_func(): + def b_func(): + pass + def c_func(): + pass + def d_func(): + pass + b_func() + return True +``` +如果让一个函数返回另一个函数: +```python +def a_func(): + def b_func(): + print("Hi, I'm b_func!") + print("Hi, I'm a_func!") + b_func() +a_func() +``` +让`b_func()`作为`a_func()`的返回值: +```python +def a_func(): + def b_func(): + print("Hi, I'm b_func!") + print("Hi, I'm a_func!") + return b_func() #表示:立即调用b_func()函数,并将其作为a_func的返回值返回。 +a_func() +``` +如果直接返回函数名: +```python +def a_func(): + def b_func(): + print("Hi, I'm b_func!") + print("Hi, I'm a_func!") + return b_func #返回b_func函数本身 +a_func() +``` +## 装饰器(Decorator) +### 函数也是对象 +> 函数本身也是对象(即,Python定义的某个Class的一个Instance)。 +于是,函数也可以与其他数据类型一样,作为其他函数的参数或者返回值。 +```python +def a_decorator(func): + def wrapper(): + print('We can do sth. before a func is called...') + func() + print('... and we can do sth. after it is called...') + return wrapper() + +def a_func(): + print("Hi, I'm a_func!") + +a_func() +a_decorator(a_func) +``` +如果返回的是函数本身,则不能执行函数内部代码: +```python +def a_decorator(func): + def wrapper(): + print('We can do sth. before a func is called...') + func() + print('... and we can do sth. after it is called...') + return wrapper # + +def a_func(): + print("Hi, I'm a_func!") + +a_func() +a_decorator(a_func) +``` +### 装饰器操作符 +帮助返回函数本身时,可以正运行内部代码: +```python +def a_decorator(func): + def wrapper(): + print('We can do sth. before a func is called...') + func() + print('... and we can do sth. after it is called...') + return wrapper #返回函数对象 +@a_decorator +def a_func(): + print("Hi, I'm a_func!") + +a_func() +``` +> 每次a_func()在被调用的时候,因为它之前有一句`@a_decorator`所以它会先被当作参数传递到`a_decorator(func)`这个函数中...而后,真正的执行在`a_decorator(func)`里被完成。 +被`@`调用的函数叫做“装饰器”(Decorator),比如,以上代码中的a_decorator(func) +```python +@a_decorator +def a_func(): + ... +``` + +等价于 + +```python +def a_func(): + ... +a_func = a_decorator(a_func) +``` + +就是用 `a_decorator` 的调用结果替换掉原来的函数。`a_decorator` 返回值是什么,以后调用 `a_func` 时就是在调用这个返回值,而 `a_decorator` 本身此时已经执行完毕了。 +写法二: +```python +def a_decorator(func): + def wrapper(): + print('We can do sth. before a func is called...') + func() + print('... and we can do sth. after it is called...') + return wrapper + +def a_func(): + print("Hi, I'm a_func!") + +# 手动装饰 +wrapped_func = a_decorator(a_func) +wrapped_func() # 触发装饰逻辑 +``` +改进,实现安全调用: +```python +def a_decorator(param): + if not callable(param): # 检查参数是否为可调用对象 + raise TypeError("装饰器参数必须是可调用对象(如函数)") + def wrapper(): + print("Before...") + param() # 安全调用 + print("After...") + return wrapper +``` + +### 装饰器的用途 +Decorator最常用的场景:改变其他函数的行为。 +```python +def an_output(): + return 'The quick brown fox jumps over the lazy dog.' +print(an_output()) +``` +```python +def uppercase(func): + def wrapper(): + original_result = func() + modified_restult = original_result.upper() + return modified_restult + return wrapper + +@uppercase +def an_output(): + return 'The quick brown fox jumps over the lazy dog.' +print(an_output()) +``` +给一个函数加上一个以上装饰器: +```python +def uppercase(func): + def wrapper(): + original_result = func() + modified_restult = original_result.upper() + return modified_restult + return wrapper +def strong(func): + def wrapper(): + original_result = func() + modified_restult = ''+original_result+'' + return modified_restult + return wrapper + +# @strong +@uppercase +@strong #先uppercase后strong:an_output = uppercase(strong(an_output)) +def an_output(): + return 'The quick brown fox jumps over the lazy dog.' +print(an_output()) +``` + +### 装饰带有参数的函数 +装饰器函数本身这么写: + +```python +def a_decorator(func): + def wrapper(*args, **kwargs): + return original_result + # ... + return wrapper +``` +假设有这样一个函数: +```python +def say_hi(greeting, name=None): + return greeting + '! ' + name + '.' + +print(say_hi('Hello', 'Jack')) +``` +我们想对这个函数的函数名、参数做一些事情:比如,我们写个 `@trace` 用来告诉用户调用一个函数的时候都发生了什么…… +```python +def trace(func): + def wrapper(*args, **kwargs): + print(f"Trace: You've called a function: {func.__name__}(),", + f"with args: {args}; kwargs: {kwargs}") + + original_result = func(*args, **kwargs) + print(f"Trace: {func.__name__}{args} returned: {original_result}") + return original_result + return wrapper + +@trace +def say_hi(greeting, name=None): + return greeting + '! ' + name + '.' + +print(say_hi('Hello', name='Jack')) +``` +### 学会装饰器究竟有多重要? +Boosting your career! + From 740b7add838a5eff01fd70db76f818336270bf28 Mon Sep 17 00:00:00 2001 From: johoo <57379875+johoo123@users.noreply.github.com> Date: Mon, 19 May 2025 09:28:42 +0800 Subject: [PATCH 17/17] regular expressions --- Part.3.B.4.regex.ipynb | 46 +- regular expression2.py | 17 + .../5.18.md" | 1169 +++++++++++++++++ .../5.19.md" | 0 .../ELIZA.py" | 314 +++++ .../reguluar expression1.py" | 8 + 6 files changed, 1551 insertions(+), 3 deletions(-) create mode 100644 regular expression2.py create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/5.18.md" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/5.19.md" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/ELIZA.py" create mode 100644 "\345\255\246\344\271\240\347\254\224\350\256\260/reguluar expression1.py" diff --git a/Part.3.B.4.regex.ipynb b/Part.3.B.4.regex.ipynb index 37bcfa8b0..7e70b4647 100644 --- a/Part.3.B.4.regex.ipynb +++ b/Part.3.B.4.regex.ipynb @@ -816,7 +816,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -825,7 +825,47 @@ "['a', 'a', 'e', 'a', 'a', 'e', 'a', 'a', '|', 'e']" ] }, - "execution_count": 1, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "['a', 'a', 'e', 'a', 'a', 'e', 'a', 'a', '|', 'e']" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "['a', 'a', 'e', 'a', 'a', 'e', 'a', 'a', 'e']" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "['a', 'a', 'e', 'a', 'a', 'e', 'a', 'a', 'e']" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "['a', 'a', 'e', 'a', 'a', 'e', 'a', 'a', '|', 'e']" + ] + }, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -1639,7 +1679,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.3" + "version": "3.9.21" } }, "nbformat": 4, diff --git a/regular expression2.py b/regular expression2.py new file mode 100644 index 000000000..4cd025030 --- /dev/null +++ b/regular expression2.py @@ -0,0 +1,17 @@ + +import re +with open(r'\Users\Administrator\Documents\GitHub\the-craft-of-selfteaching\regex-target-text-sample.txt','r') as f: + str=f.read() + +pttn=r'go+gle' +a=re.findall(pttn,str) +print(a) +pttn=r'go{2,5}gle' +b=re.findall(pttn,str) +print(b) +pttn=r'colou?red' +c=re.findall(pttn,str) +print(c) +pttn=r'520*' +d=re.findall(pttn,str) +print(d) diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.18.md" "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.18.md" new file mode 100644 index 000000000..41252a186 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.18.md" @@ -0,0 +1,1169 @@ +# 正则表达式 +不学正则表达式,编程技能与残废无异。本质上是个独立的语言,短小却格外强悍。 +> 正则表达式(英语:Regular Expression,在代码中简写为regex、regrexp或RE),又称正规表示式等。使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。 +中文教程对正则表达式的描述: +> 一个正则表达式(Regular Expression)通常被称为一个模式(Pattern)。 +Pattern翻译为“规则”,可能更准确,理解上更是毫无障碍: +> 一个规则表达式(Regular Expression)通常被称为一个规则(Pattern)。 +**规则表达式**里写什么?只能是**规则**了...到最后也就捕获(Capture)这个词没什么歧义。 +> 我们可以用书写特定的规则,用来在文本中捕获与规则一致的字符串,而后对其进行操作... +以下的python代码中,[`\wo\w`](https://regexper.com#%5Cwo%5Cw) 就是一个规则表达式(或称为规则): +而`re.findall(pttn, str)` 的作用就是,在 `str` 里找到所有与这个**规则**(Pattern,模式)**一致**(Match,匹配)的字符串: +```python +import re +str='The quick brown fox jumps over the lazy dogs' +pttn=re.compile(r'\wo\w') #'\wo\w':匹配任意一个单词字符,匹配字符‘o’,匹配任意一个单词字符 +re.findall(pttn,str) +``` +> 规则表达式(Regular Expressions,缩写为Regex)是最强大且不可或缺的文本处理工具——它的用处就是在文本中扫描/搜索(Scan/Search)与某一规则(Pattern)匹配(Match,即与规则一致)的所有实例,并且按照规则捕获(Capture)其中的部分或者全部,对它们进行替换(Replace)。 +有时,Regex并不是为了replace,而是为了检查格式。比如,检查用户输入的密码是否过于简单,比如可以用来验证用户输入的电话号码、证件号码是否符合特定格式等等。 +**在学习过程中,尽可能把一切术语用简单直白的“人话”重新表述,是特别有效的促进进步的行为模式。** +## 视觉体验 +**想办法让一个陌生的概念视觉上直观,是突破大多学习障碍的最简单粗暴直接有效的方式**。 +![](../images/regex-test.gif) +测试规则表达式(Regular Expression) +代码地址: +> https://raw.githubusercontent.com/python/cpython/master/Tools/demo/redemo.py +方便的Regex测试器: [regex101.com](https://regex101.com): +以下,就是在一段文本中,找出所有首写字母大写的词汇的*过程*,并将其先全部替换成小写,再将其全部替换为大写的过程;使用的正则表达式是 `([A-Z]\w+)`,替换表达式分别是 `\L$1` 和 `\U$1`: + +![](../images/regex101.gif) +这个网站太好了,所以,平日里我是用 [Nativefier](https://github.com/jiahaog/nativefier) 工具将这个网站打包为一个 Mac Desktop App 使用。不过,它也有局限,就是被搜索文件略微大点就报错,说 `timeout`…… + +## 准备工作 +准备文本文件,文件名称:`regex-target-text-sample.txt`。 +按[`beg[iau]ns?`](https://regexper.com#beg[iau]ns?) 去查找文本文件匹配的字符串: +```python +import re +with open('r\Users\Administrator\Documents\GitHub\the-craft-of-selfteaching\regex-target-text-sample.txt','r') as f: + str=f.read() +pttn=r'beg[iau]ns?' +re.findall(pttn,str) +``` +## 优先级 +编程无非就是用来运算的。所谓的运算,就有操作符(Operators)和操作元(Operands)。 +Regex本身就是个迷你语言(Mini Language),在Regex中,操作符也有优先级。它的操作元有个专门的名称,原子(Atom)。 +| 排列 | 原子与操作符优先级 |(从高到低)| +|---|-----------------------------------|------------------------| +| 1 | 转义符号 (Escaping Symbol) | `\` | +| 2 | 分组、捕获 (Grouping or Capturing) | `(...)` `(?:...)` `(?=...)` `(?!...)` `(?<=...)` `(?a|b|c | +| 6 | 原子 (Atoms) | `a` `[^abc]` `\t` `\r` `\n` `\d` `\D` `\s` `\S` `\w` `\W` `.` | + + +## 原子 +在Regex的Pattern中,操作元,即,被运算的“值”,被称为**原子**(Atom) +### 本义字符 +最基本的原子,就是本义字符,它们都是单个字符。 +a-z,A-Z,0-9,还有_——它们代表它们的字面值。 +即,相当于`string.ascii_letters`和`string.digits`以及`_`。 +```python +from IPython.core.interactiveshell import InteractiveShell +InteractiveShell.ast_node_interactivity = "all" + +import string +string.ascii_letters +string.digits +``` +以下字符在Regex中都有特殊的含义: +> `\` `+` `*` `.` `?` `-` `^` `$` `|` `(` `)` `[` `]` `{` `}` `<` `>` +如果你要搜索的不是本义字符,建议加上`\`来表示,比如想搜索`'`,那就写成:`\'` +### 集合原子 +集合原子还是原子。 +标识集合原子:使用`[]`。[abc]的意思是说:"`a`or`b`or`c`",即`abc`中的任意一个字符。 +比如,[`beg[iau]n`](https://regexper.com#beg[iau]n) 能够代表 `begin`、`began`,以及 `begun`。 +```python +import re +str='begin began begun bigins begining' +pttn=r'beg[iau]n' +re.findall(pttn,str) +``` +在方括号中,我们可以使用两个操作符:`-`(区间)和`^`(非)。 +* `[a-z]`表示从小写字母`a`到小写字母`z`中的任意一个字符。 +* `[^abc]`表示`abc`以外的其他任意字符,即非`[abc]` +注意,一个集合原子中,`^`符号只能用一次,只能紧跟在`[`之后,否则不起作用。 +### 类别原子 +`\d`任意数字;等价于`[0-9]` +`\D`任意非数字;等价于`[^0-9]` +`\w`任意本义字符,等价于`[a-zA-Z0-9_]` +`\W`任意非本义字符,等价于`[^a-zA-Z0-9_]` +`\s`任意空白;相当于`[ \f\n\r\t\v]`(方括号内第一个字符是空格符号) +`\S`任意非空白;相当于`[^ \f\n\r\t\v]`(紧随^之后的是一个空格符号) +`.`除`\r\n`之外的任意字符;相当于`[^\r\n]` +类别原子的记忆: +>* `d`是digits +>* `w`是word characters +>* `s`是spaces +另外,在空白的集合`[ \f\n\r\t\v]`中:`\f`是分页符;`\n\r`是换行符;`\t`是制表符;`\v`是纵向制表符(很少用)。 +> * `f`是flip +> * `n`是new line +> * `r`是return +> * `t`是tab +> * `v`是vertical tab +```python +import re +str = '
(843) 542-4256
(431) 270-9664
' +pttn=r'\d\d\d\-' +re.findall(pttn,str) +``` + +### 边界原子 +我们可以用边界原子指定边界。也可以称作“定位操作符”。 +`^`匹配被搜索字符串的开始位置 +`$`匹配被搜索字符串的结束位置 +`\b`匹配单词的边界;[`er\b`](https://regexper.com#er%5Cb),能匹配`coder`中的`er`,却不能匹配`error`中的`er` +`\B`匹配单词的边界;[`er\B`](https://regexper.com#er%5CB),能匹配`error`中的`er`,却不能匹配`coder`中的`er` + +```python +import re + +str='never ever verb however everest' +pttn=r'er\b' #结尾处为er +re.findall(pttn,str) +ptn=r'er\B' #er在单词中间 +re.findall(pttn,str) +``` +注意:`^`和`$`在python语言中被`\A`和`\Z`替代。 +### 组合原子 +使用`()`将多个单字符原子组合成一个原子——这么做的结果是,`()`内的字符串将被当作一整个原子。 +另外,`()`这个操作符,有两个作用:**组合**(Grouping);另外一个作用是**捕获**(Capturing),后面会讲到。 +注意区别,[`er`](https://regexper.com#er)、[`[er]`](https://regexper.com#[er]) 和 [`(er)`](https://regexper.com#(er) 各不相同。 + +> * `er` 是两个原子,`'e'` 和紧随其后的 `'r'` +> * `[er]` 是一个原子,或者 `'e'` 或者 `'r'`; +> * `(er)` 是一个原子,`'er'` + +## 数量操作符 +数量操作符有:`+?*{n,m}`。 +数量操作符有:`+` `?` `*` `{n, m}`。 + +它们是用来限定位于它们之前的原子允许出现的个数;不加数量限定则代表出现一次且仅出现一次: + +`+` 代表前面的原子必须至少出现一次,即:` 出现次数 ≧ 1` + +> 例如,[`go+gle`](https://regexper.com#go+gle)可以匹配 `google` `gooogle` `goooogle` 等; + +`?` 代表前面的原子最多只可以出现一次,即:`0 ≦ 出现次数 ≦ 1` + +> 例如,[`colou?red`](https://regexper.com#colou?red)可以匹配 `colored` 或者 `coloured`; + +`*` 代表前面的原子可以不出现,也可以出现一次或者多次,即:` 出现次数 ≧ 0` + +> 例如,[`520*`](https://regexper.com#520*)可以匹配 `52` `520` `52000` `5200000` `520000000000` 等。 + +`{n}` 之前的原子出现确定的 `n` 次; + +`{n,}` 之前的原子出现至少 `n` 次; + +`{n, m}` 之前的原子出现至少 `n` 次,至多 `m` 次 + +> 例如,[`go{2,5}gle`](https://regexper.com#go%7B2,5%7Dgle),能匹配 `google` `gooogle` `goooogle` 或 `gooooogle`,但不能匹配 `gogle` 和 `gooooooogle` +```python +import re +with open(r'\Users\Administrator\Documents\GitHub\the-craft-of-selfteaching\regex-target-text-sample.txt','r') as f: + str=f.read() +pttn=r'go+gle' +re.findall(pttn,str) + +pttn=r'go{2,5}gle' +re.findall(pttn,str) + +pttn=r'colou?red' +re.findall(pttn,str) + +pttn=r'520*' +re.findall(pttn,str) +``` +数量操作符是对它之前的原子进行操作的,换言之,数量操作符的操作元是操作符之前的原子。 +上一节提到,要注意区分: +> * `er` 是两个原子,`'e'` 和紧随其后的 `'r'` +> * `[er]` 是一个原子,或者 `'e'` 或者 `'r'`; +> * `(er)` 是一个原子,`'er'` +```python +from IPython.core.interactiveshell import InteractiveShell +InteractiveShell.ast_node_interactivity = "all" + +import re + +str = 'error wonderer severeness' + +pttn = r'er' +re.findall(pttn, str) + +pttn = r'[er]' +re.findall(pttn, str) + +pttn = r'(er)' +re.findall(pttn, str) +``` +加上数量操作符,可以看出`er`和`(er)`的区别: +```python +from IPython.core.interactiveshell import InteractiveShell +InteractiveShell.ast_node_interactivity = "all" + +import re + +str = 'error wonderer severeness' + +pttn = r'er+' +re.findall(pttn, str) + +pttn = r'[er]+' +re.findall(pttn, str) + +pttn = r'(er)+' +re.findall(pttn, str) +``` +## 或操作符`|` +操作符中优先级最低 +```python +import re + +str = 'begin began begun begins beginn' +pttn = r'begin|began|begun' +re.findall(pttn, str) +``` +在集合原子中,(即,`[]`内的原子)各个原子之间的关系,只有“或”——相当于方括号中的每个原子之间都有一个被省略的`|`。 +注意:方括号的`|`不被当作特殊符号,而是被当作`|`这个符号本身。在方括号中的圆括号,也被当作圆括号本身`()`本身,而无分组符号。 +```python +from IPython.core.interactiveshell import InteractiveShell +InteractiveShell.ast_node_interactivity = "all" + +import re + +str = 'achroiocythaemia achroiocythemia a|e' +pttn = r'[a|ae]'#会去重,相当于匹配a、|、e +re.findall(pttn, str) + +pttn = r'[a|e]'#同1 +re.findall(pttn, str) + +pttn = r'[ae]'#所有a、e字符 +re.findall(pttn, str) + +pttn = r'[(ae)]'#所有a、e、(、)字符 +re.findall(pttn, str) + +pttn = r'[a|ae|(ae)]'#所有a、e、(、)、|字符 +re.findall(pttn, str) +``` +* []中会字符去重 +* 所有的|、(、)被视为普通字符,若需匹配[]需要转义。 +## 匹配并捕获 +捕获(Captrue),使用的是`()`。 +使用圆括号得到的匹配的值被暂存在一个带有索引的列表,第一个是`$1`,第二个是`$2`... +以此类推,随后,我们可以在替换过程中使用`$1$2`所保存的值。 +注意:在python语言调用`re`模块之后,在`re.sub()`中调用被匹配的值,用的索引方法是`\1、\2`...以此类推。 + +```python +import re +str = 'The white dog wears a black hat.' +pttn = r'The (white|black) dog wears a (white|black) hat.' +re.findall(pttn, str) + +repl = r'The \2 dog wears a \1 hat.' +re.sub(pttn, repl, str) + +repl = r'The \1 dog wears a \1 hat.' +re.sub(pttn, repl, str) +``` +先暂存,再调用。 +## 非捕获匹配 +有时,你并不想捕获圆括号中的内容,在那个地方你使用括号的目的只是分组,而非捕获,那么,你就在圆括号内最开头加上`?:`——`(?:...)`: + +```python +import re +str = 'The white dog wears a black hat.' +pttn = r'The (?:white|black) dog wears a (white|black) hat.' +re.findall(pttn, str) # 只捕获了一处,也就是说只有一个值将来可以被引用 +repl = r'The \1 dog wears a \1 hat.' # 之前的一处捕获,在替换时可被多次引用 +re.sub(pttn, repl, str) +``` +在python代码中使用正则表达式,匹配和捕获以及随后的替换,有更灵活的方式,因为可以对那些值直接编程。`re.sub()`中,`repl`参数甚至可以接收另外一个函数作为参数——以后你肯定会自行认真以下内容: +> https://docs.python.org/3/library/re.html +非捕获匹配,还有若干个操作符: + + `(?=pattern)` +> 正向肯定预查(look ahead positive assert),在任何匹配规则的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,[`Windows(?=95|98|NT|2000)`](https://regexper.com#%60Windows(?=95%7C98%7CNT%7C2000)%60) +能匹配 `Windows2000` 中的 `Windows`,但不能匹配 `Windows3.1` 中的 `Windows`。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 + +`(?!pattern)` +> 正向否定预查(negative assert),在任何不匹配规则的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如[`Windows(?!95|98|NT|2000)`](https://regexper.com#Windows(?=95%7C98%7CNT%7C2000)) +能匹配 `Windows3.1` 中的 `Windows`,但不能匹配 `Windows2000` 中的 `Windows`。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 + +`(?<=pattern)` +>反向(look behind)肯定预查,与正向肯定预查类似,只是方向相反。例如,[`(?<=95|98|NT|2000)Windows`](https://regexper.com#(?%3C=95%7C98%7CNT%7C2000)Windows) +能匹配 `2000Windows` 中的 `Windows`,但不能匹配 `3.1Windows` 中的 `Windows`。 + + `(?反向否定预查,与正向否定预查类似,只是方向相反。例如 `(? * `\d`, `\D`, `\w`, `\W`, `\s`, `\S`, `\b`, 和 `\B` 等只限于 ASCII 字符 +> * 行内写法:`(?a)` +> * Python re 模块中的常量:`re.A` `re.ASCII` + +`I`/`IGNORECASE`,默认为 `False` + +> * 忽略字母大小写 +> * 行内写法:`(?i)` +> * Python re 模块中的常量:`re.I` `re.IGNORECASE` + +`G`/`GLOBAL`,默认为 `True` +> * 找到第一个 match 之后不返回 +> * 行内写法:`(?g)` +> * Python re 模块中这个标记不能更改,默认为 TRUE + +`L`/`LOCALE`,默认为 `False` + +> * 由本地语言设置决定 `\d`, `\D`, `\w`, `\W`, `\s`, `\S`, `\b`, 和 `\B` 等等的内容 +> * 行内写法:`(?L)` +> * Python re 模块中的常量:`re.L` `re.LOCALE` + +`M`/`MULTILINE`,默认为 `True` + +> * 使用本标志后,`^` 和 `$` 匹配行首和行尾时,会增加换行符之前和之后的位置。 +> * 行内写法:`(?m)` +> * Python re 模块中的常量:`re.M` `re.MULTILINE` + +`S`/`DOTALL`,默认为 `False` +> * 使 `.` 完全匹配任何字符,包括换行;没有这个标志,`.` 匹配除了 `n` `r` 之外的任何字符。 +> * 行内写法:`(?s)` +> * Python re 模块中的常量:`re.S` `re.DOTALL` + +`X`/`VERBOSE`,默认为 `False` +> * 当该标志被指定时,Pattern 中的的空白符会被忽略,除非该空白符在圆括号或方括号中,或在反斜杠 `\ ` 之后。这样做的结果是允许将注释写入 Pattern,这些注释会被 Regex 解析引擎忽略。注释用 `#` 号来标识,不过该符号不能在字符串或反斜杠之后。 +> * 行内写法:`(?x)` +> * Python re 模块中的常量:`re.X` `re.VERBOSE` + +## 几个最常用的Regex +以下是几个常用的 Regex[2],值得保存: + +* matching username +> [`/^[a-z0-9_-]{3,16}$/`](https://regexper.com#/%5E[a-z0-9_-]%7B3,16%7D$/) + +* matching password[3] +> [`/^[a-z0-9_-]{6,18}$/`](https://regexper.com#/%5E[a-z0-9_-]%7B6,18%7D$/) + +* matching a HEX value +> [`/^#?([a-f0-9]{6}|[a-f0-9]{3})$/`](https://regexper.com#/%5E#?([a-f0-9]%7B6%7D%7C[a-f0-9]%7B3%7D)$/) + +* matching a slug +> [`/^[a-z0-9-]+$/`](https://regexper.com#/%5E[a-z0-9-]+$/) + +* matching email address +> [`/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/`](https://regexper.com#/%5E([a-z0-9_%5C.-]+)@([%5Cda-z%5C.-]+)%5C.([a-z%5C.]%7B2,6%7D)$/) + + +* matching a URL +> [`/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/`](https://regexper.com#/%5E(https?:%5C/%5C/)?([%5Cda-z%5C.-]+)%5C.([a-z%5C.]%7B2,6%7D)([%5C/%5Cw%20%5C.-]*)*%5C/?$/) + +* matching an IP address +> [`/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/`](https://regexper.com/#%2F%5E%28%3F%3A%28%3F%3A25%5B0-5%5D%7C2%5B0-4%5D%5B0-9%5D%7C%5B01%5D%3F%5B0-9%5D%5B0-9%5D%3F%29%5C.%29%7B3%7D%28%3F%3A25%5B0-5%5D%7C2%5B0-4%5D%5B0-9%5D%7C%5B01%5D%3F%5B0-9%5D%5B0-9%5D%3F%29%24%2F) + +* matching a HTML tag +> [`/^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/`](https://regexper.com/#%2F%5E<%28%5Ba-z%5D%2B%29%28%5B%5E<%5D%2B%29*%28%3F%3A>%28.*%29<%5C%2F%5C1>%7C%5Cs%2B%5C%2F>%29%24%2F) + +对了,告诉你一个小秘密: +> 以上的正则表达式,点击都能连接到 [regexper.com](https://regexper.com),在那里你能查看这些正则表达式的图形化示意图。另外,本文中,处于 markdown cell 的绝大多数正则表达式都有这样的连接…… 你可以重读的时候试试。 + +写 Regex 最烧脑的地方在于 “使其全面” —— 要考虑到各种意外情况。 + +当然,除非必要,也不要在 “全面” 这事上面花太多时间 —— 给你看一个据说是 “最大程度上能够匹配所有 email 地址的 Regex” [4],我都懒得测试的一个正则表达式: + +```regex +(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t] +)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?: +\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:( +?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ +\t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0 +31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\ +](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+ +(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?: +(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z +|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n) +?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\ +r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ + \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n) +?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t] +)*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ + \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])* +)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t] +)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*) +*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ +|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r +\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?: +\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t +]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031 +]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\]( +?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(? +:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(? +:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(? +:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)? +[ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] +\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]| +\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<> +@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|" +(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t] +)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\ +".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(? +:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[ +\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000- +\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|( +?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,; +:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([ +^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\" +.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\ +]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\ +[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\ +r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] +\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\] +|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0 +00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\ +.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@, +;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(? +:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])* +(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\". +\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[ +^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\] +]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*( +?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\ +".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:( +?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[ +\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t +])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t +])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(? +:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+| +\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?: +[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\ +]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n) +?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[" +()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n) +?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<> +@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ + \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@, +;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t] +)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\ +".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)? +(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\". +\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?: +\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[ +"()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t]) +*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]) ++|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\ +.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z +|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:( +?:\r\n)?[ \t])*))*)?;\s*) +``` + +## 趣事一则 +使用python重新实现ELIZA的程序代码,你可以直接执行它,尝试一下与ELIZA聊聊: +```python +# %load https://raw.githubusercontent.com/jezhiggins/eliza.py/master/eliza.py +#---------------------------------------------------------------------- +# eliza.py +# +# a cheezy little Eliza knock-off by Joe Strout +# with some updates by Jeff Epler +# hacked into a module and updated by Jez Higgins +#---------------------------------------------------------------------- + +import string +import re +import random + +class eliza: + def __init__(self): + self.keys = list(map(lambda x:re.compile(x[0], re.IGNORECASE),gPats)) + self.values = list(map(lambda x:x[1],gPats)) + + #---------------------------------------------------------------------- + # translate: take a string, replace any words found in dict.keys() + # with the corresponding dict.values() + #---------------------------------------------------------------------- + def translate(self,str,dict): + words = str.lower().split() + keys = dict.keys(); + for i in range(0,len(words)): + if words[i] in keys: + words[i] = dict[words[i]] + return ' '.join(words) + + #---------------------------------------------------------------------- + # respond: take a string, a set of regexps, and a corresponding + # set of response lists; find a match, and return a randomly + # chosen response from the corresponding list. + #---------------------------------------------------------------------- + def respond(self,str): + # find a match among keys + for i in range(0, len(self.keys)): + match = self.keys[i].match(str) + if match: + # found a match ... stuff with corresponding value + # chosen randomly from among the available options + resp = random.choice(self.values[i]) + # we've got a response... stuff in reflected text where indicated + pos = resp.find('%') + while pos > -1: + num = int(resp[pos+1:pos+2]) + resp = resp[:pos] + \ + self.translate(match.group(num),gReflections) + \ + resp[pos+2:] + pos = resp.find('%') + # fix munged punctuation at the end + if resp[-2:] == '?.': resp = resp[:-2] + '.' + if resp[-2:] == '??': resp = resp[:-2] + '?' + return resp + +#---------------------------------------------------------------------- +# gReflections, a translation table used to convert things you say +# into things the computer says back, e.g. "I am" --> "you are" +#---------------------------------------------------------------------- +gReflections = { + "am" : "are", + "was" : "were", + "i" : "you", + "i'd" : "you would", + "i've" : "you have", + "i'll" : "you will", + "my" : "your", + "are" : "am", + "you've": "I have", + "you'll": "I will", + "your" : "my", + "yours" : "mine", + "you" : "me", + "me" : "you" +} + +#---------------------------------------------------------------------- +# gPats, the main response table. Each element of the list is a +# two-element list; the first is a regexp, and the second is a +# list of possible responses, with group-macros labelled as +# %1, %2, etc. +#---------------------------------------------------------------------- +gPats = [ + [r'I need (.*)', + [ "Why do you need %1?", + "Would it really help you to get %1?", + "Are you sure you need %1?"]], + + [r'Why don\'?t you ([^\?]*)\??', + [ "Do you really think I don't %1?", + "Perhaps eventually I will %1.", + "Do you really want me to %1?"]], + + [r'Why can\'?t I ([^\?]*)\??', + [ "Do you think you should be able to %1?", + "If you could %1, what would you do?", + "I don't know -- why can't you %1?", + "Have you really tried?"]], + + [r'I can\'?t (.*)', + [ "How do you know you can't %1?", + "Perhaps you could %1 if you tried.", + "What would it take for you to %1?"]], + + [r'I am (.*)', + [ "Did you come to me because you are %1?", + "How long have you been %1?", + "How do you feel about being %1?"]], + + [r'I\'?m (.*)', + [ "How does being %1 make you feel?", + "Do you enjoy being %1?", + "Why do you tell me you're %1?", + "Why do you think you're %1?"]], + + [r'Are you ([^\?]*)\??', + [ "Why does it matter whether I am %1?", + "Would you prefer it if I were not %1?", + "Perhaps you believe I am %1.", + "I may be %1 -- what do you think?"]], + + [r'What (.*)', + [ "Why do you ask?", + "How would an answer to that help you?", + "What do you think?"]], + + [r'How (.*)', + [ "How do you suppose?", + "Perhaps you can answer your own question.", + "What is it you're really asking?"]], + + [r'Because (.*)', + [ "Is that the real reason?", + "What other reasons come to mind?", + "Does that reason apply to anything else?", + "If %1, what else must be true?"]], + + [r'(.*) sorry (.*)', + [ "There are many times when no apology is needed.", + "What feelings do you have when you apologize?"]], + + [r'Hello(.*)', + [ "Hello... I'm glad you could drop by today.", + "Hi there... how are you today?", + "Hello, how are you feeling today?"]], + + [r'I think (.*)', + [ "Do you doubt %1?", + "Do you really think so?", + "But you're not sure %1?"]], + + [r'(.*) friend (.*)', + [ "Tell me more about your friends.", + "When you think of a friend, what comes to mind?", + "Why don't you tell me about a childhood friend?"]], + + [r'Yes', + [ "You seem quite sure.", + "OK, but can you elaborate a bit?"]], + + [r'(.*) computer(.*)', + [ "Are you really talking about me?", + "Does it seem strange to talk to a computer?", + "How do computers make you feel?", + "Do you feel threatened by computers?"]], + + [r'Is it (.*)', + [ "Do you think it is %1?", + "Perhaps it's %1 -- what do you think?", + "If it were %1, what would you do?", + "It could well be that %1."]], + + [r'It is (.*)', + [ "You seem very certain.", + "If I told you that it probably isn't %1, what would you feel?"]], + + [r'Can you ([^\?]*)\??', + [ "What makes you think I can't %1?", + "If I could %1, then what?", + "Why do you ask if I can %1?"]], + + [r'Can I ([^\?]*)\??', + [ "Perhaps you don't want to %1.", + "Do you want to be able to %1?", + "If you could %1, would you?"]], + + [r'You are (.*)', + [ "Why do you think I am %1?", + "Does it please you to think that I'm %1?", + "Perhaps you would like me to be %1.", + "Perhaps you're really talking about yourself?"]], + + [r'You\'?re (.*)', + [ "Why do you say I am %1?", + "Why do you think I am %1?", + "Are we talking about you, or me?"]], + + [r'I don\'?t (.*)', + [ "Don't you really %1?", + "Why don't you %1?", + "Do you want to %1?"]], + + [r'I feel (.*)', + [ "Good, tell me more about these feelings.", + "Do you often feel %1?", + "When do you usually feel %1?", + "When you feel %1, what do you do?"]], + + [r'I have (.*)', + [ "Why do you tell me that you've %1?", + "Have you really %1?", + "Now that you have %1, what will you do next?"]], + + [r'I would (.*)', + [ "Could you explain why you would %1?", + "Why would you %1?", + "Who else knows that you would %1?"]], + + [r'Is there (.*)', + [ "Do you think there is %1?", + "It's likely that there is %1.", + "Would you like there to be %1?"]], + + [r'My (.*)', + [ "I see, your %1.", + "Why do you say that your %1?", + "When your %1, how do you feel?"]], + + [r'You (.*)', + [ "We should be discussing you, not me.", + "Why do you say that about me?", + "Why do you care whether I %1?"]], + + [r'Why (.*)', + [ "Why don't you tell me the reason why %1?", + "Why do you think %1?" ]], + + [r'I want (.*)', + [ "What would it mean to you if you got %1?", + "Why do you want %1?", + "What would you do if you got %1?", + "If you got %1, then what would you do?"]], + + [r'(.*) mother(.*)', + [ "Tell me more about your mother.", + "What was your relationship with your mother like?", + "How do you feel about your mother?", + "How does this relate to your feelings today?", + "Good family relations are important."]], + + [r'(.*) father(.*)', + [ "Tell me more about your father.", + "How did your father make you feel?", + "How do you feel about your father?", + "Does your relationship with your father relate to your feelings today?", + "Do you have trouble showing affection with your family?"]], + + [r'(.*) child(.*)', + [ "Did you have close friends as a child?", + "What is your favorite childhood memory?", + "Do you remember any dreams or nightmares from childhood?", + "Did the other children sometimes tease you?", + "How do you think your childhood experiences relate to your feelings today?"]], + + [r'(.*)\?', + [ "Why do you ask that?", + "Please consider whether you can answer your own question.", + "Perhaps the answer lies within yourself?", + "Why don't you tell me?"]], + + [r'quit', + [ "Thank you for talking with me.", + "Good-bye.", + "Thank you, that will be $150. Have a good day!"]], + + [r'(.*)', + [ "Please tell me more.", + "Let's change focus a bit... Tell me about your family.", + "Can you elaborate on that?", + "Why do you say that %1?", + "I see.", + "Very interesting.", + "%1.", + "I see. And what does that tell you?", + "How does that make you feel?", + "How do you feel when you say that?"]] + ] + +#---------------------------------------------------------------------- +# command_interface +#---------------------------------------------------------------------- +def command_interface(): + print('Therapist\n---------') + print('Talk to the program by typing in plain English, using normal upper-') + print('and lower-case letters and punctuation. Enter "quit" when done.') + print('='*72) + print('Hello. How are you feeling today?') + + s = '' + therapist = eliza(); + while s != 'quit': + try: + s = input('> ') + except EOFError: + s = 'quit' + print(s) + while s[-1] in '!.': + s = s[:-1] + print(therapist.respond(s)) + + +if __name__ == "__main__": + command_interface() + +``` + +# BNF以及EBNF* +> 本书的目的:让读者从认知自学能力开始,通过自学编程作为第一个实践,逐步完整掌握自学能力,进而在随后漫长的人生中,需要什么就去学什么。 +...不用非得找人教、找人带... +当然,自学的人运气一定不会差。 +> 我希望读者在读完《自学是门手艺》之后,有能力独立地去全面研读[官方文档](https://docs.python.org/3/) —— 甚至是各种编程语言、各种软件的相关的文档(包括它们的官方文档)。 +—— 其实倒不是说 “第三方地图” 更好,实际的原因很不好意思说出来: + +> * 这首先吧,觉得官方文档阅读量太大了……(嗯?那地图不是越详细越好吗?) +> * 那还有吧…… 也不是没去看过,**看不懂**……(嗯…… 这对初学者倒是个问题!) + +所以,我认为这本 “书” 的最重要工作是: + +> 为读者解读清楚地图上的 “图例”,从此之后读者在任何需要的时候能够彻底读懂地图。 + +在阅读官方文档的时候,很多人在 [The Python Tutorial](https://docs.python.org/3/tutorial/index.html) 上就已经觉得吃力了…… 如果到了 [Standard Libraries](https://docs.python.org/3/library/index.html) 和 [Language References](https://docs.python.org/3/reference/index.html) 的部分,就基本上完全放弃了,比如,以下这段摘自 [string —— Common string operations](https://docs.python.org/3/library/string.html): + +> Format Specification Mini-Language +> ... +> The general form of a standard format specifier is: +``` +format_spec ::= [[fill]align][sign][#][0][width][grouping_option][.precision][type] +fill ::= +align ::= "<" | ">" | "=" | "^" +sign ::= "+" | "-" | " " +width ::= digit+ +grouping_option ::= "_" | "," +precision ::= digit+ +type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | + "n" | "o" | "s" | "x" | "X" | "%" +``` +> ... + +读到这,看着一大堆的 `::=` `[]` `|` 当场傻眼了…… + +这是BNF描述,还是python自己定制的ENBF...为了理解它们,以后当然最好有空研究一下“上下文无关文法”(Context-free Grammar)。 +比如,什么是符合语法的整数(Integer)呢?符合以下语法描述的是整数(使用 Python 的 EBNF): + +``` +integer ::= [sign] digit + +sign ::= "+" | "-" +digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" +``` + +以上的描述中,基本符号没几个,它们各自的含义是: + +> * `::=` 表示定义; +> * `< >` 尖括号里的内容表示必选内容; +> * `[ ]` 中是可选项; +> * `" "` 双引号里的内容表示字符; +> * ` | ` 竖线两边的是可选内容,相当于or; +> * ` * ` 表示零个或者多个…… +> * ` + ` 表示一个或者多个…… + +于是: + +> 1. `interger` 定义是:由 “可选的 `sign`” 和 “一个或者多个 `digit` 的集合” 构成 —— 第一行末尾那个 `+` 的作用和正则表达式里的 `+` 一样; +> 2. `sign` 的定义是什么呢?要么是 `+` 要么是 `-;` +> 3. `digit` 的定义是什么呢?从 `"0"` 到 `"9"` 中的任何一个值…… + +于是,`99`、`+99`、`-99`,都是符合以上语法描述的 `integer`;但 `99+` 和 `99-` 肯定不符合以上语法描述的 `integer`。 + +很简单吧?反正就是在 `::=` 左边逐行列出一个语法构成的所有要素,而后在右边逐行逐一定义,直至全部要素定义完毕。 + +又由于 Python 的社区文档是二十来年长期积累的,有时标注方法并不一致。比如,在描述 [Python Full Grammar specification](https://docs.python.org/3/reference/grammar.html) 的时候,他们用的语法标注符号体系就跟上面描述 String 的语法不一样了,是这样的: + +> * `:` 表示定义; +> * `[ ]` 中是可选项; +> * `' '` 引号里的内容表示字符; +> * ` | ` 竖线两边的是可选内容,相当于or; +> * ` * ` 表示零个或者多个…… +> * ` + ` 表示一个或者多个…… + +—— 用冒号 `:` 替代了 `::=`,用单引号 `''` 替代了双引号 `""`,而尖括号 `<>` 干脆不用了: +...... +现在你已经能读懂 BNF 了,那么,可以再读读用 BNF 描述的 Regex 语法[2],就当复习了 —— 很短的: + +```html +BNF grammar for Perl-style regular expressions + + ::= | + ::= "|" + ::= | + ::= + ::= | | + ::= "*" + ::= "+" + ::= | | | | + ::= "(" ")" + ::= "." + ::= "$" + ::= any non metacharacter | "\" metacharacter + ::= | + ::= "[" "]" + ::= "[^" "]" + ::= | + ::= | + ::= "-" +``` + +真的没原来以为得那么神秘,是不? + +`glob`是Global的缩写。你可以把它理解为“超级简化版正则表达式”,它最初是Unix/Posix操作系统中用来匹配文件名的“通配符”。 +glob 的主要符号只有这么几个: + +> * `*` +> * `?` +> * `[abc]` +> * `[^abc]` + +现在的你,打开 Wikipedia 上的关于 glob 和 Wildcard character 的页面,肯定能做到 “无障碍” 理解: + +> * https://en.wikipedia.org/wiki/Glob_(programming) +> * https://en.wikipedia.org/wiki/Wildcard_character + +顺带说,现在你再去读关于 Format String 的官方文档,就不会再觉得 “根本看不懂” 了,恰恰相反,你会觉得 “我怎么之前连这个都看不懂呢?” + +> https://docs.python.org/3/library/string.html#format-string-syntax + +在自学这件事上,失败者的死法看起来千变万化,但其实都是一样的…… 只不过是因为怕麻烦或者基础知识不够而不去读最重要的文档。 + +比如,学英语的时候死活不读语法书。其实英文语法书也没多难啊?再厚,不也是用来 “查” 的吗?不就是多记几个标记就可以读懂的吗?比如,词性标记,`v.`, `n.`, `adj.`, `adv.`, `prep.`... 不就是相当于地图上的图例吗?那语法书,和现在这里提到的官方文档,不都是 “自学者地图” 吗? + +但就是这么一点点简单的东西,挡住了几乎所有人,真是可怕。 + +# 拆解 +> 拆解 +## 横向拆解 +> * 每次只弹一个小节; +> * 而且还是放慢速度弹,刚开始很慢很慢; +> * 等熟悉了之后逐渐快起来,直到正常速度; +> * 再开始弹下一个小节; +> * 同样是放慢速度弹,刚开始很慢很慢; +> * 等熟悉了之后逐渐快起来,直到正常速度; +> * 再把两个小节拼起来; +> * 有些小节拼起来相对容易,另外一些需要挣扎很久才顺畅; + +# 刚需幻觉 + +“刚需幻觉” 的根源在于: + +> 你不会的东西,对你来说感觉上就不是刚需。 +## 感觉总是最大的坑 +我的结论是: + +> 绝大多数人的自学能力,基本上都是被 “自己的感觉” 耽误掉的。 + +即,原本每个人都有一定的自学能力,但最终,都被自己的感觉给干掉了,直至全然失去自学能力 —— 虽然其后也经常学习,但其后一生从事的全都是学习这个行为里最初级的模式:“模仿”。 + +为什么 “模仿” 是学习行为最初级的模式呢? + +首先,模仿必须依赖模仿对象,受自己的视野所限。 + +其次,模仿只能处理表里如一的简单知识和技能;一旦遇到那些深层次的、表面上看不大出来的,模仿就无效了,即便是非要模仿、愣模仿,结果就只能是 “东施效颦”。 + +在《[把时间当作朋友](https://github.com/xiaolai/time-as-a-friend)》中,我就反复强调一件事: + +> 不要问学它有什么用,学就是了…… + +这原本是自学的最佳策略之一,也是自学的最根本策略。然而,听进去这句话的人不多,即便是我举了无数的例子,即便是他可能当时也有一点认同…… 然而,转瞬间又变成了原来的状态,无论遇到什么自学机会都不由自主地问: + +> 我学它有什么用啊? + +如果,得到的答案中,那 “用处” 对自己不是 “刚需”,瞬间就失去了动力,瞬间就放弃了追求…… 直至某一天,突然 “发现” 那竟然是个刚需…… 于是,临时抱佛脚。人么,总是对追求的事情形影相随;又有谁会对曾经放弃的事情念念不忘呢?于是,下一次还是会再做 “预算不足” 的决定。 + +最终失去自学能力的人,都是因为对 “刚需” 的判断失误 —— 这就是我说的 “刚需幻觉”。 + +## 刚需幻觉 +这种幻觉非常坑人。 + +我们的大脑,有一种神奇的功能 —— “无论如何都会用已有信息拼成一个完整图像的功能”。 + +“无论如何” 的意思是说,不管那已有信息有多么凌乱、有多么残缺、有多么无意义、人脑竟然还是可以拼出一个完整的 “有意义” 的图像。 + +这一点也经常被人利用。在新闻学里,就有著名的 “Framing Effect”: + +![](images/framing-effect.png) + +这个原理也经常被各路营销使用: + +![](images/framing-bias.png) + +很容易想象,经常被这些东西误导的人,“脑力” 欠缺到什么程度 —— 这当然也是他们全无自学能力的结果之一。 + +而当我们被刚需幻觉所左右的时候,我们明显是使用 “片面的信息” 拼出了 “完整的意义”,而后被其误导,严重误导,且全然不自知 —— 最气人的是,误导我们的竟然不是别人,竟然是我们自己的大脑!刚需幻觉如此,时间幻觉、困难幻觉亦如是。后面会讲到的注意力漂移,也依然是这种情况,自己才是真正的元凶…… + +所以,在决定学任何东西的时候,最好不要去咨询身边的人 —— 除非你确定对方是高手,最好是自学高手。否则,你遇到的永远是怀疑、打击、甚至嘲笑。最令人遗憾、最令人无奈的是,那些人其实也不是坏人,他们其实也不是故意,他们只是被自己的 “刚需幻觉” 误导了而已,他们(竟然)以为所有人都和他们一样…… 然后,若是你(居然)听信了他们的话,那就实在是太惨了! + +**要学,想学,那就自顾自去学吧,用不着征求别人的意见!** + +## 优势策略 +如何不被 “刚需幻觉” 所迷惑、所限制呢? + +首先,基础策略是,要深刻理解这个现象及其解释: + +> 对任何一项技能来说,**刚需是自学的结果**,而不是自学的原因。 + +用 “是否为刚需” 作为自己是否开始学习的理由,注定会吃亏的,因为如此做的下场就是肯定被 “刚需幻觉” 所迷惑、所限制。 + +而后,也是更为重要的一个策略: + +> **做个自驱动的人**,而非被外部驱动的被动的人。 + +这基本上是个越早建立越好的习惯。绝大多数人一生都是被动者,终生只是被外界驱动而已。所以,他们会在某一时刻,“发现” 某个技能是刚需,然后再去学,但可惜却肯定的是,到那时候预算总是并不充裕,总是捉襟见肘。 + +最后一个很简单却很有效的策略是三个字,[之前提到过的](Part.2.E.deliberate-thinking.ipynb): + +> **找活干** + +有活干,真的很幸福。 + +## 影响下一代 +所以,正确结论是这样的: + +> **一切的技能都是刚需。** + +虽然,这并不意味着你不需要选择。 + +然而,至于学还是不学,其实从来都不是从 “有没有用” 来判断的,真正有意义的判断依据只有一条: + +> 有没有时间? + +有时间就学呗!没时间就挤时间呗!学得不足够好怎么办?花更多时间呗…… + +**脚注** +```python +import re +import os + +files = [f for f in os.listdir('.') if os.path.isfile(f)] +files.sort() +for f in files: + if '.ipynb' in f: + with open(f, 'r', encoding = 'UTF-8') as file: + str = file.read() + pttn = r'"# (.*)"\n' + r = re.findall(pttn, str) + if len(r) > 0: + print(f'> - [{f.replace(".ipynb", "")}(**{r[0]}**)]({f})') # 生成 markdown +``` +# 全面——自学的境界 +把自学当作一门手艺,把所有的技能也都当作一门手艺,那就相对容易理解了: + +> **全面**,是掌握一门手艺的基本。 + +为了全面,当然要靠时间。所以,关于 “混与不混”,我们有了更深刻却又更朴素的认识: + +> 所谓的不混时间,无非就是**刻意练习**、**追求全面**。 + +也正是这个原因,几乎所有自学高手都懂这个道理: + +> **绝对不能只靠一本书** + +有个特别有趣的现象,我觉得绝大多数人平日里都挺大手大脚的,都挺舍不得对自己过分苛刻的,但一到买书这件事上,绝大多数人真的很节俭,真的很苛刻 —— 对待越严肃的知识越是如此。倒是在买本小说啊或者买张电影票的时候,基本不用过脑子。 + +“第一次突破” 很重要。 + +如果一个人有过一次只通过阅读书籍即获得一项新技能的体验,那么,他们内心深处(更准的说法是大脑的底层操作系统)的那个成本计算方法就会发生改变,心里想的更可能是: + +> * 这肯定是有用的,一旦学会,收益可不是几十块钱的书价或几百块课价那么一点点…… +> * 至于是否能学会,主要看我投入的时间精力预算有多少…… + +我身边有很多自学能力非常强的人。 + +这些人买书的方式都是一样的,一旦他们决定学习什么技能的时候,第一个想到的是去买书,而不是去找人。他们之前体验过,他们就是很清楚: + +> * 首先,书里什么都有; +> * 其次,仅靠阅读在大多数情况下绝对够了…… + +更为不一样的是,他们一定会买回来一大堆书 —— 而不是四处去问,“关于 xx 的哪一本书最好啊?” + +在他们眼里,书是成本最低的东西,比起最终的收益来讲更是不值一提。 + +更为重要的是,**一本书绝对不够** —— 无论是谁写的,无论那个作者多么著名,影响力有多大…… 因为,书也好、教程也罢,这种东西就是有 “篇幅限制” 的。更为关键的是,每个作者都有不一样的视角、不一样的出发点和不一样的讲解方式、组织方法。 + + +比如,我这本就跟别人写的很不一样。我的出发点是把编程当作一个自学的例子,重点在于学会如何自学,并且通过实践真的习得一个起初你觉得不是刚需,学会之后发现干脆离不开的、不可或缺的技能。这本书的内容组织方式也不一样 —— 反正你现在已经知道了。 + +另外,这本书的目标里有更重要的另外一个:“让你有能力靠自己能够理解所有的官方文档” —— 书里不用讲官方标准库里的每个模块、每个函数究竟如何使用,因为那些在官方文档里定义得非常清楚…… + +而其他人写的呢?比如 [Think Python](http://greenteapress.com/wp/think-python-2e/),比如 [A Bite of Python](https://python.swaroopch.com/),再比如 [Dive into Python](https://linux.die.net/diveintopython/html/)[1],以及网上很多很多免费的 Python 教程都写得很好呢! + +没有经验的人不懂而已。当你搞明白了一本书,后面再多读哪怕很多本的时间精力成本都是很低的,但每多读一本,都能让你在这个话题中变得**更为完整**。 + +针对同一个话题读很多本书的最常见体验就是: + +> - 嗯?这个点很好玩!这个角度有意思! +> - 看看比比前面几个作者怎么论述的呢? +> - 嗯?!怎么我看过却竟然没注意到呢! + +这最后一条真的是很令人恼火却又享受的体验。它令你恼火,是因为你竟然错过;它令你享受,是因为虽然错过却竟然还有弥补的机会! + +总有一天你会明白的,一切的 “学会” 和 “学好” 之间的差异,无非是**全面程度**的差异。 + +于是,翻译过来,“学好” 竟然如此简单: + +> **多读几本书。狠一点,就是多读很多本书。** +提高对所学知识技能的“全面程度”,有个最狠的方法: +> 教是最好的学。 + +另外一个有趣的现象是,“下学” 者永远等待 “上学” 者整理好的东西。之前在《[如何从容应对含有过多 “前置引用” 的知识?](Part.1.F.deal-with-forward-references.ipynb)》提到过一个对应策略: + +> 尽快开始整理归纳总结 + +同时给出了建议: + +> 一定要自己动手去做…… + +不仅如此,还描述了个我自己的例子,通过 “自己动手整理” 才发现自己之前竟然完全理解错了。 + +哦,对了,其实所有的读者,都可以用这个简单的方法影响下一代: + +> 有同学问,你就一定要耐心讲讲 —— **对自己有好处。** + +当然,最直接的方法是把自己变成 “上学” 者,保持开放,乐于分享,而孩子只需通过 “耳闻目染” 就可以了。 + +> No matter what you choose, build stuff and be around smart people.
+> 无论你选择了什么,都要造出东西来,要与聪明人打交道。 + +我个人最看重的个人品质之一,就是**有没有像样的作品**。 + +我甚至经常建议我的合伙人们,在招人的时候,把这一点当作最靠谱的判断方式。少废话,少吹牛逼,给我看看你的作品。这个原则可以一下子过滤掉所有的不合格者。另外一个很自然的现象是,如果一个人能做出像样的东西来,那么他身边的聪明人密度无论如何都会比其他人的高出很多。 + +所以,无论学什么,都要想尽一切办法尽快做出自己的作品。做一个产品出来的过程中,会磨练另外一项自学者不可或缺的能力和素质: + +> **完整** + +与之前提到的另外一项加起来,就构成了自学者的最基本素养: + +> * 学就学得**全面**; +> * 做就做得**完整**。 + +更为重要的是,一旦你开始创作作品,你更大的 “发现” 就是,你肯定需要很多 “之前看起来并不相干的知识与技能”,而非 “只靠专业就够了”…… + +还是拿我出第一本书为例。那之前我没有写过书,若是出版了书放在书店,没有人知道李笑来是谁…… 于是,只有内容本身,并不保证那书能卖出去。除了把内容写出来之外,我必然要去学习很多之前完全没碰过的东西,比如 “如何才能做到系统持续地修订内容”;又比如,“如何与出版社编辑正常沟通”;再比如,“如何取一个好书名”…… 一个赛一个地 “与专业无关”。 + +所以,“做得完整”,从来都不是容易的事情。 + +从这个角度去理解,你就会明白那些高明的手艺人为什么总是做小东西 —— 那是因为在追求完整的过程中,你必然会发现,越小越容易完整。这也是为什么庸人总是好高骛远,因为他们不顾完整,所以就可以妄图建造海市蜃楼。 + +手艺人不怕做的事小。而且,“小” 无所谓,“完整” 才是关键。 + +给自己足够长的时间去学;在充足 “预算” 之下耐心地练;不断找活干,以用代练;然后,最重要的是,一定要尽快尝试着做出属于自己的**完整**作品,无论大小。 + +只有这样,你才是个值得被交往的人。 + +# 这是自学者的黄金时代 + +作为一个有素养的自学者,有一篇文章必须精读: + +> [How To Ask Questions The Smart Way](https://github.com/selfteaching/How-To-Ask-Questions-The-Smart-Way) + +# 避免注意力漂移 +在罗列并比较众多策略之后,我选了一个看起来最不相干,却最本质的策略: + +> **把 “全面完整” 放到最高优先级。** + +而后,这些年全靠这个策略挺了过来…… + +当我想做什么事的时候,或者想学什么东西的时候,我会投入一定的时间去琢磨,这个事或者这个东西,要做得全面完整,或者要学得全面完整,那都应该做什么呢?在思考如此严肃的问题的时候,我还是习惯用纸和笔,写写画画 —— 迄今为止没有找到合适的电子设备和软件替代。 + +我买笔记本,不是为了记笔记的,因为记笔记这个东西,实在是在电脑上做更方便,许多年前开始就是如此了。我的笔记本主要用来做一件事: + +> 罗列整理那些为了做到 “全面完整” 而必须优先做的事。 + +用列表也好、或者用图表也罢,反正都是要不断整理修订的,而它的存在,给了我一个优先级: + +> 除了这上面罗列的这些东西之外,在当前时间段,别的都不如它们重要。 + +一旦发现自己的注意力没有集中在这上面的关键之时,一旦发现自己的注意力已经漂移到其它当前并不重要的事项上,就马上纠正。 + +谁都知道应该先做重要且紧急的事情,可问题在于,如何判断 “是否重要” 呢?**全面完整**这四个字就会给我指引。 + +早些年,我跟很多人一样痴迷于电脑这个东西,也跟很多人那样,用 Windows 惯出来了坏毛病 —— 动不动就重装系统…… 重装系统很浪费时间的,但那时也不知道为什么总是忍不住去干那事,哪怕有些小毛病,马上就受不了,弄的好像重装一个干净的操作系统会让自己的世界焕然一新一样。 + +再后来就明白了,这绝对就是**自己的毛病 —— 做事不分轻重**。 + +说实话,这也不是自己想明白的 —— 我没那么聪明。是因为遇到了一个高人。他的电脑桌面上,乱七八糟摆满了各种图标,从不整理。我问他这不影响效率吗?他说,明明有搜索你不用,到底是谁效率低下?我被问愣了,无言以对。 + +我又发现他根本没有装杀毒软件…… 我问为什么?他说,“养几个虫子玩玩也没什么不好……” 不过,他转念又告诉了我他的思考。他说,只要平时习惯好,病毒进来了也没啥可偷的,但更为关键的是,他用电脑是干活的,而不是干杀毒的活的…… 脑子如此清楚,让我自愧不如。 + +但学到了。 + +虽然我还是做不到桌面上图标很乱,虽然我是因为改用了 Mac OS,所以不装杀毒软件,但注意力要放到应该放的地方,这事我记住了,牢牢记住,从此之后许多年,从未忘过。每次发现自己轻重不分的时候,就会想起他,然后就改过自新。 + diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/5.19.md" "b/\345\255\246\344\271\240\347\254\224\350\256\260/5.19.md" new file mode 100644 index 000000000..e69de29bb diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/ELIZA.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/ELIZA.py" new file mode 100644 index 000000000..bca2f6aa6 --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/ELIZA.py" @@ -0,0 +1,314 @@ +# %load https://raw.githubusercontent.com/jezhiggins/eliza.py/master/eliza.py +#---------------------------------------------------------------------- +# eliza.py +# +# a cheezy little Eliza knock-off by Joe Strout +# with some updates by Jeff Epler +# hacked into a module and updated by Jez Higgins +#---------------------------------------------------------------------- + +import string +import re +import random + +class eliza: + def __init__(self): + self.keys = list(map(lambda x:re.compile(x[0], re.IGNORECASE),gPats)) + self.values = list(map(lambda x:x[1],gPats)) + + #---------------------------------------------------------------------- + # translate: take a string, replace any words found in dict.keys() + # with the corresponding dict.values() + #---------------------------------------------------------------------- + def translate(self,str,dict): + words = str.lower().split() + keys = dict.keys(); + for i in range(0,len(words)): + if words[i] in keys: + words[i] = dict[words[i]] + return ' '.join(words) + + #---------------------------------------------------------------------- + # respond: take a string, a set of regexps, and a corresponding + # set of response lists; find a match, and return a randomly + # chosen response from the corresponding list. + #---------------------------------------------------------------------- + def respond(self,str): + # find a match among keys + for i in range(0, len(self.keys)): + match = self.keys[i].match(str) + if match: + # found a match ... stuff with corresponding value + # chosen randomly from among the available options + resp = random.choice(self.values[i]) + # we've got a response... stuff in reflected text where indicated + pos = resp.find('%') + while pos > -1: + num = int(resp[pos+1:pos+2]) + resp = resp[:pos] + \ + self.translate(match.group(num),gReflections) + \ + resp[pos+2:] + pos = resp.find('%') + # fix munged punctuation at the end + if resp[-2:] == '?.': resp = resp[:-2] + '.' + if resp[-2:] == '??': resp = resp[:-2] + '?' + return resp + +#---------------------------------------------------------------------- +# gReflections, a translation table used to convert things you say +# into things the computer says back, e.g. "I am" --> "you are" +#---------------------------------------------------------------------- +gReflections = { + "am" : "are", + "was" : "were", + "i" : "you", + "i'd" : "you would", + "i've" : "you have", + "i'll" : "you will", + "my" : "your", + "are" : "am", + "you've": "I have", + "you'll": "I will", + "your" : "my", + "yours" : "mine", + "you" : "me", + "me" : "you" +} + +#---------------------------------------------------------------------- +# gPats, the main response table. Each element of the list is a +# two-element list; the first is a regexp, and the second is a +# list of possible responses, with group-macros labelled as +# %1, %2, etc. +#---------------------------------------------------------------------- +gPats = [ + [r'I need (.*)', + [ "Why do you need %1?", + "Would it really help you to get %1?", + "Are you sure you need %1?"]], + + [r'Why don\'?t you ([^\?]*)\??', + [ "Do you really think I don't %1?", + "Perhaps eventually I will %1.", + "Do you really want me to %1?"]], + + [r'Why can\'?t I ([^\?]*)\??', + [ "Do you think you should be able to %1?", + "If you could %1, what would you do?", + "I don't know -- why can't you %1?", + "Have you really tried?"]], + + [r'I can\'?t (.*)', + [ "How do you know you can't %1?", + "Perhaps you could %1 if you tried.", + "What would it take for you to %1?"]], + + [r'I am (.*)', + [ "Did you come to me because you are %1?", + "How long have you been %1?", + "How do you feel about being %1?"]], + + [r'I\'?m (.*)', + [ "How does being %1 make you feel?", + "Do you enjoy being %1?", + "Why do you tell me you're %1?", + "Why do you think you're %1?"]], + + [r'Are you ([^\?]*)\??', + [ "Why does it matter whether I am %1?", + "Would you prefer it if I were not %1?", + "Perhaps you believe I am %1.", + "I may be %1 -- what do you think?"]], + + [r'What (.*)', + [ "Why do you ask?", + "How would an answer to that help you?", + "What do you think?"]], + + [r'How (.*)', + [ "How do you suppose?", + "Perhaps you can answer your own question.", + "What is it you're really asking?"]], + + [r'Because (.*)', + [ "Is that the real reason?", + "What other reasons come to mind?", + "Does that reason apply to anything else?", + "If %1, what else must be true?"]], + + [r'(.*) sorry (.*)', + [ "There are many times when no apology is needed.", + "What feelings do you have when you apologize?"]], + + [r'Hello(.*)', + [ "Hello... I'm glad you could drop by today.", + "Hi there... how are you today?", + "Hello, how are you feeling today?"]], + + [r'I think (.*)', + [ "Do you doubt %1?", + "Do you really think so?", + "But you're not sure %1?"]], + + [r'(.*) friend (.*)', + [ "Tell me more about your friends.", + "When you think of a friend, what comes to mind?", + "Why don't you tell me about a childhood friend?"]], + + [r'Yes', + [ "You seem quite sure.", + "OK, but can you elaborate a bit?"]], + + [r'(.*) computer(.*)', + [ "Are you really talking about me?", + "Does it seem strange to talk to a computer?", + "How do computers make you feel?", + "Do you feel threatened by computers?"]], + + [r'Is it (.*)', + [ "Do you think it is %1?", + "Perhaps it's %1 -- what do you think?", + "If it were %1, what would you do?", + "It could well be that %1."]], + + [r'It is (.*)', + [ "You seem very certain.", + "If I told you that it probably isn't %1, what would you feel?"]], + + [r'Can you ([^\?]*)\??', + [ "What makes you think I can't %1?", + "If I could %1, then what?", + "Why do you ask if I can %1?"]], + + [r'Can I ([^\?]*)\??', + [ "Perhaps you don't want to %1.", + "Do you want to be able to %1?", + "If you could %1, would you?"]], + + [r'You are (.*)', + [ "Why do you think I am %1?", + "Does it please you to think that I'm %1?", + "Perhaps you would like me to be %1.", + "Perhaps you're really talking about yourself?"]], + + [r'You\'?re (.*)', + [ "Why do you say I am %1?", + "Why do you think I am %1?", + "Are we talking about you, or me?"]], + + [r'I don\'?t (.*)', + [ "Don't you really %1?", + "Why don't you %1?", + "Do you want to %1?"]], + + [r'I feel (.*)', + [ "Good, tell me more about these feelings.", + "Do you often feel %1?", + "When do you usually feel %1?", + "When you feel %1, what do you do?"]], + + [r'I have (.*)', + [ "Why do you tell me that you've %1?", + "Have you really %1?", + "Now that you have %1, what will you do next?"]], + + [r'I would (.*)', + [ "Could you explain why you would %1?", + "Why would you %1?", + "Who else knows that you would %1?"]], + + [r'Is there (.*)', + [ "Do you think there is %1?", + "It's likely that there is %1.", + "Would you like there to be %1?"]], + + [r'My (.*)', + [ "I see, your %1.", + "Why do you say that your %1?", + "When your %1, how do you feel?"]], + + [r'You (.*)', + [ "We should be discussing you, not me.", + "Why do you say that about me?", + "Why do you care whether I %1?"]], + + [r'Why (.*)', + [ "Why don't you tell me the reason why %1?", + "Why do you think %1?" ]], + + [r'I want (.*)', + [ "What would it mean to you if you got %1?", + "Why do you want %1?", + "What would you do if you got %1?", + "If you got %1, then what would you do?"]], + + [r'(.*) mother(.*)', + [ "Tell me more about your mother.", + "What was your relationship with your mother like?", + "How do you feel about your mother?", + "How does this relate to your feelings today?", + "Good family relations are important."]], + + [r'(.*) father(.*)', + [ "Tell me more about your father.", + "How did your father make you feel?", + "How do you feel about your father?", + "Does your relationship with your father relate to your feelings today?", + "Do you have trouble showing affection with your family?"]], + + [r'(.*) child(.*)', + [ "Did you have close friends as a child?", + "What is your favorite childhood memory?", + "Do you remember any dreams or nightmares from childhood?", + "Did the other children sometimes tease you?", + "How do you think your childhood experiences relate to your feelings today?"]], + + [r'(.*)\?', + [ "Why do you ask that?", + "Please consider whether you can answer your own question.", + "Perhaps the answer lies within yourself?", + "Why don't you tell me?"]], + + [r'quit', + [ "Thank you for talking with me.", + "Good-bye.", + "Thank you, that will be $150. Have a good day!"]], + + [r'(.*)', + [ "Please tell me more.", + "Let's change focus a bit... Tell me about your family.", + "Can you elaborate on that?", + "Why do you say that %1?", + "I see.", + "Very interesting.", + "%1.", + "I see. And what does that tell you?", + "How does that make you feel?", + "How do you feel when you say that?"]] + ] + +#---------------------------------------------------------------------- +# command_interface +#---------------------------------------------------------------------- +def command_interface(): + print('Therapist\n---------') + print('Talk to the program by typing in plain English, using normal upper-') + print('and lower-case letters and punctuation. Enter "quit" when done.') + print('='*72) + print('Hello. How are you feeling today?') + + s = '' + therapist = eliza(); + while s != 'quit': + try: + s = input('> ') + except EOFError: + s = 'quit' + print(s) + while s[-1] in '!.': + s = s[:-1] + print(therapist.respond(s)) + + +if __name__ == "__main__": + command_interface() diff --git "a/\345\255\246\344\271\240\347\254\224\350\256\260/reguluar expression1.py" "b/\345\255\246\344\271\240\347\254\224\350\256\260/reguluar expression1.py" new file mode 100644 index 000000000..5727be91c --- /dev/null +++ "b/\345\255\246\344\271\240\347\254\224\350\256\260/reguluar expression1.py" @@ -0,0 +1,8 @@ + +import re +with open(r'\Users\Administrator\Documents\GitHub\the-craft-of-selfteaching\regex-target-text-sample.txt','r') as f: + str=f.read() +pttn=r'beg[iau]ns?' +s=re.findall(pttn,str) +print(s) +