├── .gitignore ├── .nojekyll ├── 404.html ├── CNAME ├── Dockerfile ├── LICENSE ├── NAV.md ├── README.md ├── SUMMARY.md ├── asset ├── back-to-top.css ├── back-to-top.js ├── dark-mode.css ├── dark-mode.js ├── docsify-apachecn-footer.js ├── docsify-baidu-push.js ├── docsify-baidu-stat.js ├── docsify-clicker.js ├── docsify-cnzz.js ├── docsify-copy-code.min.js ├── docsify-quick-page.css ├── docsify-quick-page.js ├── docsify-sidebar-collapse.min.js ├── docsify.min.js ├── edit.css ├── edit.js ├── edit.svg ├── left.svg ├── moon.svg ├── prism-darcula.css ├── prism-python.min.js ├── right.svg ├── search.min.js ├── share.css ├── share.js ├── share.svg ├── sidebar.min.css ├── style.css ├── sun.svg ├── up.svg └── vue.css ├── docs ├── 10.md ├── 100.md ├── 101.md ├── 102.md ├── 103.md ├── 104.md ├── 105.md ├── 106.md ├── 107.md ├── 108.md ├── 109.md ├── 11.md ├── 110.md ├── 111.md ├── 112.md ├── 113.md ├── 114.md ├── 115.md ├── 116.md ├── 117.md ├── 118.md ├── 119.md ├── 12.md ├── 120.md ├── 121.md ├── 122.md ├── 123.md ├── 124.md ├── 125.md ├── 126.md ├── 127.md ├── 128.md ├── 129.md ├── 13.md ├── 130.md ├── 131.md ├── 132.md ├── 133.md ├── 134.md ├── 135.md ├── 136.md ├── 137.md ├── 138.md ├── 139.md ├── 14.md ├── 140.md ├── 141.md ├── 142.md ├── 143.md ├── 144.md ├── 145.md ├── 146.md ├── 147.md ├── 148.md ├── 149.md ├── 15.md ├── 150.md ├── 151.md ├── 152.md ├── 153.md ├── 154.md ├── 16.md ├── 17.md ├── 18.md ├── 19.md ├── 2.md ├── 20.md ├── 21.md ├── 22.md ├── 23.md ├── 24.md ├── 25.md ├── 26.md ├── 27.md ├── 28.md ├── 29.md ├── 3.md ├── 30.md ├── 31.md ├── 32.md ├── 33.md ├── 34.md ├── 35.md ├── 36.md ├── 37.md ├── 38.md ├── 39.md ├── 4.md ├── 40.md ├── 41.md ├── 42.md ├── 43.md ├── 44.md ├── 45.md ├── 46.md ├── 47.md ├── 48.md ├── 49.md ├── 5.md ├── 50.md ├── 51.md ├── 52.md ├── 53.md ├── 54.md ├── 55.md ├── 56.md ├── 57.md ├── 58.md ├── 59.md ├── 6.md ├── 60.md ├── 61.md ├── 62.md ├── 63.md ├── 64.md ├── 65.md ├── 66.md ├── 67.md ├── 68.md ├── 69.md ├── 7.md ├── 70.md ├── 71.md ├── 72.md ├── 73.md ├── 74.md ├── 75.md ├── 76.md ├── 77.md ├── 78.md ├── 79.md ├── 8.md ├── 80.md ├── 81.md ├── 82.md ├── 83.md ├── 84.md ├── 85.md ├── 86.md ├── 87.md ├── 88.md ├── 89.md ├── 9.md ├── 90.md ├── 91.md ├── 92.md ├── 93.md ├── 94.md ├── 95.md ├── 96.md ├── 97.md ├── 98.md ├── 99.md └── img │ ├── 01a0e7f6aa9d823b4e916f08148b4607.jpg │ ├── 032fd8512b1b4b91c77d473d11e46b59.jpg │ ├── 03ca13c6fd49797b53b5cd1975077dd2.jpg │ ├── 04c365caac017ef3c4bd231cb9b16d4b.jpg │ ├── 05fb777975099dc498022833965a3f72.jpg │ ├── 063d4109d021245e06c9a9d6e68c98d1.jpg │ ├── 0b1177c6ca9fa0869758c96e3c90b773.jpg │ ├── 0dae36cbf5a5e7f0b1d59b7d66936b89.jpg │ ├── 10a99b4bfa14d1c38de3cb5b3210decf.jpg │ ├── 1285ee716e5081490276503fda01f306.jpg │ ├── 12e58f0da6cfbdea5c3fbcbb63c08b6e.jpg │ ├── 1423f5646dd3a4d92eccfc7263fe178c.jpg │ ├── 171a0c2b0e80d17d966bba9840bef893.jpg │ ├── 17435cec8c3aac6a772b29cab2051871.jpg │ ├── 17f3a0c162e06ed8bb6a16a34a0eff4e.jpg │ ├── 18d081183db7fd09fc0f1f26e70217ce.jpg │ ├── 19c8b8b00bad93b9152130737a32fd14.jpg │ ├── 1a415ebe54db32e36ceace468b326629.jpg │ ├── 1bc5e8d0c41245289be5ff46fc769e1f.jpg │ ├── 1c6e625ed7262e6bac5f6e12d1ed7531.jpg │ ├── 266da6b6042831619c7fc89594eb03fc.jpg │ ├── 286f2e902c088e653e8b3c290ba073d3.jpg │ ├── 2e75548e489bfe9df1de42082b85a0af.jpg │ ├── 2f3c943a5c5e6309dc82d8e9cec78f8f.jpg │ ├── 313eafe86a326c40ae5a767c1d4d8a9d.jpg │ ├── 31796db0ca619bca6133e335b49b7867.jpg │ ├── 340d45a74478864f1574d91d2c2895c2.jpg │ ├── 348dbde3c3b4908341a7193f7d2b679c.jpg │ ├── 35aeff297d310511e6b1868510a103de.jpg │ ├── 3886f93e64cf4bb372935fcec9653556.jpg │ ├── 3ebb41b5da1a1a96b2e5787f6b7b8094.jpg │ ├── 3f9262623f4186097a65064977cc613a.jpg │ ├── 3fad49c52b48a78b153387af8ec57421.jpg │ ├── 40381d87dcf1cdf4992a4130e8a00a9c.jpg │ ├── 4060d9fd58b873f1de971a59295495b1.jpg │ ├── 4869e893634e8cbc70809a8a73699b79.jpg │ ├── 4a49cf10d85187e98482d7b5e5afa647.jpg │ ├── 4d488a4b8ad3429ee4f4844eaee6eea9.jpg │ ├── 4d5254ecc51f45a1300f4157eda157be.jpg │ ├── 4e34e239c7da4206afc487ff4b79b533.jpg │ ├── 4eeaf7dcf76d5211d707f2d19f877634.jpg │ ├── 517deda3749905c02bf0cde152465323.jpg │ ├── 52e206bcc9cfbd565d1bfefbf8f6f304.jpg │ ├── 534c12b1e266e1f454ebb80b282f2c3f.jpg │ ├── 53c0a3ad6e436f624fdb6710b8f2560a.jpg │ ├── 5758a5a50b43467cc585b3970915c696.jpg │ ├── 579fbc8c8b4281a080cc8fabc03918e0.jpg │ ├── 57fb7912dc28c38162a13f0cba302365.jpg │ ├── 5c749f6c8613fd4c994678694ca1e07b.jpg │ ├── 5d99d2bfbe94d99072e9460d40821ee1.jpg │ ├── 5db8ee11bbc4bf73c598c22f49d4ea4a.jpg │ ├── 5ec64e3c0ecbb2c70baadd00712318da.jpg │ ├── 5ed0b94ec1f4ed3fce1378f5f3bef853.jpg │ ├── 61ed7d26f888c86bd50826965628f8e1.jpg │ ├── 638ed41320bc173598f5573a82f94288.jpg │ ├── 6532c8e5d0a1623681476abb176b35f6.jpg │ ├── 65fc960355b27bb4127f86b0eb80b24e.jpg │ ├── 6698c6cc40057eb1f4c8f9fe8432c7d0.jpg │ ├── 67d51bd9c24ee03dca2a71cbe364c63e.jpg │ ├── 69dd4267c143832448cb1e6ba46ad062.jpg │ ├── 7018394c192b6f4bb6a7c00a84966a8d.jpg │ ├── 7398f5673c673324cae1e8cc3386c337.jpg │ ├── 73f6512e1f8ebce243695f723c837fe4.jpg │ ├── 7506d8c32012e87ad7690628ef32dde1.jpg │ ├── 76f680ba194c061f9b7578d7e228e08f.jpg │ ├── 7976965bb93b05a72855c2fcdd899e32.jpg │ ├── 79a66fc75d419b006ca2189da2f75d08.jpg │ ├── 7abfe71cbe8a2a2a5d896122b9f66de2.jpg │ ├── 7b3d5c4209c210120366a607eb41d2ce.jpg │ ├── 7b5684cef5f31682794e97f444fc887c.jpg │ ├── 7c1fd991881176a5622039e83abd17c8.jpg │ ├── 7d686acf4a7018708424fe7d588f16ad.jpg │ ├── 7d8c03d7c6fb8725971fb0949d46c5e9.jpg │ ├── 7e2ac8bd813e9ce9e0e48564f2eda6a7.jpg │ ├── 7ffa9164aadd674786993cfe95532e31.jpg │ ├── 81a0de4a1d5d8968f59be757e89c6d21.jpg │ ├── 82096cc9222262b931bc39f3ae123fa0.jpg │ ├── 825e92bb7921bc6d5dfa1e98f1a31d75.jpg │ ├── 8292ea0593c00b16347673105d653bcc.jpg │ ├── 829fe2added3fe57b08d7386b01be26c.jpg │ ├── 8348ad25313746f0dfecbe3da29fec18.jpg │ ├── 8633b18ca0aedbc0c2aa0841fa26afdf.jpg │ ├── 87db5229ba75516510d6d77cf0ac187c.jpg │ ├── 88e7ac055172b8f704169b613c7f4b7f.jpg │ ├── 8bce2d3e9f36f46f1b059d586dccdaa8.jpg │ ├── 8e4982f565ed3c7812443b8670d2fb83.jpg │ ├── 8ea20cca971f6e3ac9aa58f3758e579b.jpg │ ├── 9195bd62158023928fe1a8e1a94ad4ed.jpg │ ├── 91a1febe058f4d82b43d642a7e9fa9bb.jpg │ ├── 9275062544a60324146ef695f479e63c.jpg │ ├── 93ba1beccbdd7671d2f987f5d8ce0ffb.jpg │ ├── 9407ce3a47e209822978ef051a94a41c.jpg │ ├── 98fc53d81bdc36257d084ee3357e2890.jpg │ ├── 9afc0d0e17e26be6930a6d0bdba3f350.jpg │ ├── 9d495f1865a9af371d19c932ee8f1176.jpg │ ├── 9f42c9b17efc8d19906b7716ba8f8db7.jpg │ ├── 9f469ed71397ffb5172d715df52db1fd.jpg │ ├── 9f48d29be5f240c66f4b4c975d71ebf8.jpg │ ├── a00bd824aae90021b95e57c905444e0f.jpg │ ├── a4ad0ac569db24ffce3a2765c083ff3e.jpg │ ├── a578844d3e2d5e4b4320841a5cc9c5be.jpg │ ├── a6a91551430cb92d00e95bb8dfef21ae.jpg │ ├── a6e17ee8ef9f4da192a098df4379de55.jpg │ ├── a6f752b0bc9c986ac77db7b6c3a6b687.jpg │ ├── a7ac1d44dbcb12e214dcd437f4f170f3.jpg │ ├── a81fc17818bea20c790af62f3a7a8872.jpg │ ├── aa005db92c8848264576560e928e14f9.jpg │ ├── abf794aefdaf1d442160917065dfd108.jpg │ ├── ae8e6eb853cd61665d2bfd313a2d391e.jpg │ ├── afce6850a2a06a40147e8718e12263cb.jpg │ ├── b2c25ad5890802ea7ef9624d826e9b07.jpg │ ├── b2e386f1018d9d5074bfd4b2300c8d01.jpg │ ├── b3fa1d153d4b7e9a55395cddbe9c8c0a.jpg │ ├── b541c855ea24b82e547dfb8a696a4523.jpg │ ├── b64666a360b2e06bf576beb83706d6f0.jpg │ ├── b7cd8da3d83b8b7986aa097956f6472c.jpg │ ├── b7ce2d469aa8be5727237b53886713d3.jpg │ ├── b7d7436549630e570c53922ca7771eda.jpg │ ├── b809845b2993e4deab4f30fe4c04c137.jpg │ ├── b846c5f8fde20fcdeef56fff17542aef.jpg │ ├── b8fbe36ec9fbec5e52c7ce05781b4742.jpg │ ├── b99515f7c4187ff3259d9105e70f3bd6.jpg │ ├── be2842c0ef133ea766f753872ae8c324.jpg │ ├── be45efc6bdd10368a1f750fa80e0a691.jpg │ ├── c05561472bf0335f0774e08359499538.jpg │ ├── c0ebe078f580acf33bdbd871884e2a85.jpg │ ├── c14011f6cb8ac3d59afd69054b81ea28.jpg │ ├── c3325f30c3056719db14ba53a4c357d2.jpg │ ├── c4bffea2394972c70ab2ccab9d79700e.jpg │ ├── c538d52f29968b5dd86a6ee9c394a355.jpg │ ├── c9b1087694d000a610185c965cc39375.jpg │ ├── caadfaa42347babf3b1e1cbc49bc3476.jpg │ ├── cc85ee1c6b20cf7ff6a49745c13a142d.jpg │ ├── cdf522a40765adb08e20bb6318215982.jpg │ ├── ced3590bd768580465b8f2fc7dcbf57d.jpg │ ├── cf6567c5aadb0ee27d841844145e64bb.jpg │ ├── d1daeade8423826325f8b569bf16acc5.jpg │ ├── d545576b02a082b367909f9271020d5f.jpg │ ├── d56fc5a3cd19ce218ca107d7d46d9dee.jpg │ ├── d64bb0b04092fe87118d67e850135a32.jpg │ ├── d94bc3378d5cbdc5aa8d3a5c32b3dd69.jpg │ ├── da14970297111ba7950c50388c6f1db1.jpg │ ├── db1c79c7582f54416959b6cc7e0acfaa.jpg │ ├── de39095660d68731ea5870a862a1f418.jpg │ ├── de50db4d8c83ca3e879b7e5b6684a3bd.jpg │ ├── e0899da7ba3f5b7de1e37e2be3467116.jpg │ ├── e09bbb4accc7a5986de59b3f2e563d16.jpg │ ├── e14e2b651fb04237b78720db22bca94f.jpg │ ├── e238a9edc229de15d7efe37f83b76b42.jpg │ ├── e2e92407fdba1cf47871fe2861131c69.jpg │ ├── e365b8334e16f08859c82d935b84f4ec.jpg │ ├── e38358b1c99d35f57cc7ccb6f3c5f3f0.jpg │ ├── e5ee18911b65ea9d00f3340672ad956c.jpg │ ├── e9903b3a1ee470475881379bcfee22ac.jpg │ ├── e9d04a97c37222a7c48d0730bf3dcc10.jpg │ ├── e9dacd777aeed05cbd5671e083d951a3.jpg │ ├── eb7fee5ada5c5f4e89b8b82e1a9befcb.jpg │ ├── ef85022bec451c83cd8bd1f89fab9116.jpg │ ├── ef9dff0e7bf0efcd3230a04478370867.jpg │ ├── f242bcf3542f9154b1000948515ae8d0.jpg │ ├── f33baba9840d1f4a7c43d5bb70282c8e.jpg │ ├── fa1216543bb20389c59adc1ddb210fc0.jpg │ ├── fa730ce5ba742c146bfa8b3dac4a6a46.jpg │ ├── fb6573533db2359eab44f7549e6d6157.jpg │ └── fd8e8017293a8080614eefedfdc5c6b2.jpg ├── index.html └── update.sh /.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/.nojekyll -------------------------------------------------------------------------------- /404.html: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: /404.html 3 | --- 4 | 5 | -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | pybs.apachecn.org 2 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM httpd:2.4 2 | COPY ./ /usr/local/apache2/htdocs/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PythonBasics 中文系列教程 2 | 3 | > 原文:[PythonBasics Python Tutorial](https://pythonbasics.org/) 4 | > 5 | > 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/) 6 | > 7 | > 我有一个问题,用了多线程后,两个问题有了现在。 8 | 9 | * [在线阅读](http://pybs.apachecn.org/) 10 | * [在线阅读(Gitee)](https://apachecn.gitee.io/pythonbasics-zh/) 11 | * [ApacheCN 学习资源](http://docs.apachecn.org/) 12 | 13 | ## 贡献指南 14 | 15 | 为了不断改进翻译质量,我们特此启动了【翻译、校对、笔记整理活动】,开设了多个校对项目。贡献者校对一章之后可以领取千字2\~4元的奖励。进行中的校对活动请见[活动列表](https://home.apachecn.org/#/docs/activity/docs-activity)。更多详情请联系飞龙(Q562826179,V:wizardforcel)。 16 | 17 | ## 联系方式 18 | 19 | ### 负责人 20 | 21 | * [飞龙](https://github.com/wizardforcel): 562826179 22 | 23 | ### 其他 24 | 25 | * 在我们的 [apachecn/pythonbasics-zh](https://github.com/apachecn/pythonbasics-zh) github 上提 issue. 26 | * 发邮件到 Email: `apachecn@163.com`. 27 | * 在我们的 [组织学习交流群](http://www.apachecn.org/organization/348.html) 中联系群主/管理员即可. 28 | 29 | ## 下载 30 | 31 | ### Docker 32 | 33 | ``` 34 | docker pull apachecn0/pythonbasics-zh 35 | docker run -tid -p :80 apachecn0/pythonbasics-zh 36 | # 访问 http://localhost:{port} 查看文档 37 | ``` 38 | 39 | ### PYPI 40 | 41 | ``` 42 | pip install pythonbasics-zh 43 | pythonbasics-zh 44 | # 访问 http://localhost:{port} 查看文档 45 | ``` 46 | 47 | ### NPM 48 | 49 | ``` 50 | npm install -g pythonbasics-zh 51 | pythonbasics-zh 52 | # 访问 http://localhost:{port} 查看文档 53 | ``` 54 | 55 | ## 赞助我们 56 | 57 | ![](http://data.apachecn.org/img/about/donate.jpg) 58 | -------------------------------------------------------------------------------- /asset/back-to-top.css: -------------------------------------------------------------------------------- 1 | #scroll-btn { 2 | position: fixed; 3 | right: 15px; 4 | bottom: 10px; 5 | width: 35px; 6 | height: 35px; 7 | background-repeat: no-repeat; 8 | background-size: cover; 9 | cursor: pointer; 10 | -webkit-user-select: none; 11 | -moz-user-select: none; 12 | -ms-user-select: none; 13 | user-select: none; 14 | background-image: url(up.svg); 15 | background-position-y: -1px; 16 | display: none; 17 | border: 2px solid; 18 | border-radius: 4px; 19 | } -------------------------------------------------------------------------------- /asset/back-to-top.js: -------------------------------------------------------------------------------- 1 | document.addEventListener('DOMContentLoaded', function() { 2 | var scrollBtn = document.createElement('div') 3 | scrollBtn.id = 'scroll-btn' 4 | document.body.append(scrollBtn) 5 | 6 | window.addEventListener('scroll', function() { 7 | var offset = window.document.documentElement.scrollTop; 8 | scrollBtn.style.display = offset >= 500 ? "block" : "none"; 9 | }) 10 | scrollBtn.addEventListener('click', function(e) { 11 | e.stopPropagation(); 12 | var step = window.scrollY / 15; 13 | var hdl = setInterval(function() { 14 | window.scrollTo(0, window.scrollY - step); 15 | if(window.scrollY <= 0) { 16 | clearInterval(hdl) 17 | } 18 | }, 15) 19 | }) 20 | }) -------------------------------------------------------------------------------- /asset/dark-mode.css: -------------------------------------------------------------------------------- 1 | #dark-mode-btn { 2 | position: fixed; 3 | right: 15px; 4 | top: 100px; 5 | width: 35px; 6 | height: 35px; 7 | background-repeat: no-repeat; 8 | background-size: cover; 9 | cursor: pointer; 10 | -webkit-user-select: none; 11 | -moz-user-select: none; 12 | -ms-user-select: none; 13 | user-select: none; 14 | transition: background-image .15s ease-in-out .15s; 15 | } 16 | 17 | .dark-logo { 18 | background-image: url('sun.svg'); 19 | } 20 | 21 | .light-logo { 22 | background-image: url('moon.svg'); 23 | } -------------------------------------------------------------------------------- /asset/dark-mode.js: -------------------------------------------------------------------------------- 1 | document.addEventListener('DOMContentLoaded', function() { 2 | var style = document.querySelector('#invert') 3 | if (style == null) { 4 | style = document.createElement('style') 5 | style.id = 'invert' 6 | document.head.append(style) 7 | } 8 | var btn = document.querySelector('#dark-mode-btn') 9 | if (btn == null) { 10 | btn = document.createElement('div') 11 | btn.id = 'dark-mode-btn' 12 | btn.classList.add('light-logo') 13 | document.body.append(btn) 14 | } 15 | 16 | var enableDarkMode = function() { 17 | style.innerText = 'html,img,pre,#dark-mode-btn{filter:invert(100%)}' 18 | btn.classList.remove('light-logo') 19 | btn.classList.add('dark-logo') 20 | localStorage.darkLight = 'dark' 21 | 22 | } 23 | var disableDarkMode = function() { 24 | style.innerText = '' 25 | btn.classList.remove('dark-logo') 26 | btn.classList.add('light-logo') 27 | localStorage.darkLight = 'light' 28 | } 29 | 30 | btn.addEventListener('click', function(){ 31 | var currMode = localStorage.darkLight || 'light' 32 | if (currMode == 'light') 33 | enableDarkMode() 34 | else 35 | disableDarkMode() 36 | }) 37 | 38 | if (localStorage.darkLight == 'dark') 39 | enableDarkMode() 40 | 41 | }) 42 | 43 | -------------------------------------------------------------------------------- /asset/docsify-baidu-push.js: -------------------------------------------------------------------------------- 1 | (function(){ 2 | var plugin = function(hook) { 3 | hook.doneEach(function() { 4 | new Image().src = 5 | '//api.share.baidu.com/s.gif?r=' + 6 | encodeURIComponent(document.referrer) + 7 | "&l=" + encodeURIComponent(location.href) 8 | }) 9 | } 10 | var plugins = window.$docsify.plugins || [] 11 | plugins.push(plugin) 12 | window.$docsify.plugins = plugins 13 | })() -------------------------------------------------------------------------------- /asset/docsify-baidu-stat.js: -------------------------------------------------------------------------------- 1 | (function(){ 2 | var plugin = function(hook) { 3 | hook.doneEach(function() { 4 | window._hmt = window._hmt || [] 5 | var hm = document.createElement("script") 6 | hm.src = "https://hm.baidu.com/hm.js?" + window.$docsify.bdStatId 7 | document.querySelector("article").appendChild(hm) 8 | }) 9 | } 10 | var plugins = window.$docsify.plugins || [] 11 | plugins.push(plugin) 12 | window.$docsify.plugins = plugins 13 | })() -------------------------------------------------------------------------------- /asset/docsify-cnzz.js: -------------------------------------------------------------------------------- 1 | (function(){ 2 | var plugin = function(hook) { 3 | hook.doneEach(function() { 4 | var sc = document.createElement('script') 5 | sc.src = 'https://s5.cnzz.com/z_stat.php?id=' + 6 | window.$docsify.cnzzId + '&online=1&show=line' 7 | document.querySelector('article').appendChild(sc) 8 | }) 9 | } 10 | var plugins = window.$docsify.plugins || [] 11 | plugins.push(plugin) 12 | window.$docsify.plugins = plugins 13 | })() -------------------------------------------------------------------------------- /asset/docsify-quick-page.css: -------------------------------------------------------------------------------- 1 | #prev-page-button { 2 | position:fixed; 3 | top:140px; 4 | width: 35px; 5 | height: 35px; 6 | right: 15px; 7 | background-color: transparent; 8 | background-image: url(left.svg); 9 | background-repeat: no-repeat; 10 | background-size: cover; 11 | border:0; 12 | -webkit-user-select: none; 13 | -moz-user-select: none; 14 | -ms-user-select: none; 15 | user-select: none; 16 | outline:none; 17 | cursor: pointer; 18 | } 19 | 20 | #next-page-button { 21 | position:fixed; 22 | top:180px; 23 | width:35px; 24 | height:35px; 25 | right:15px; 26 | background-color: transparent; 27 | background-image: url(right.svg); 28 | background-repeat: no-repeat; 29 | background-size: cover; 30 | border:0; 31 | -webkit-user-select: none; 32 | -moz-user-select: none; 33 | -ms-user-select: none; 34 | user-select: none; 35 | outline:none; 36 | cursor: pointer; 37 | } -------------------------------------------------------------------------------- /asset/docsify-quick-page.js: -------------------------------------------------------------------------------- 1 | document.addEventListener('DOMContentLoaded', function() { 2 | var prevBtn = document.createElement("div") 3 | prevBtn.id = "prev-page-button" 4 | document.body.appendChild(prevBtn) 5 | var nextBtn = document.createElement("div"); 6 | nextBtn.id = "next-page-button" 7 | document.body.appendChild(nextBtn) 8 | 9 | var links = null 10 | var linkMap = null 11 | var getCurIdx = function() { 12 | if (!links) { 13 | links = Array 14 | .from(document.querySelectorAll(".sidebar-nav a")) 15 | .map(x => x.href) 16 | linkMap = {} 17 | links.forEach((x, i) => linkMap[x] = i) 18 | } 19 | 20 | var elem = document.querySelector(".active a") 21 | var curIdx = elem? linkMap[elem.href]: -1 22 | return curIdx 23 | } 24 | 25 | prevBtn.addEventListener('click', function () { 26 | if (!document.body.classList.contains('ready')) 27 | return 28 | var curIdx = getCurIdx() 29 | location.href = curIdx == -1? 30 | links[0]: 31 | links[(curIdx - 1 + links.length) % links.length] 32 | document.body.scrollIntoView() 33 | }, false) 34 | 35 | nextBtn.addEventListener('click', function () { 36 | if (!document.body.classList.contains('ready')) 37 | return 38 | var curIdx = getCurIdx() 39 | location.href = links[(curIdx + 1) % links.length] 40 | document.body.scrollIntoView() 41 | }, false) 42 | }) -------------------------------------------------------------------------------- /asset/edit.css: -------------------------------------------------------------------------------- 1 | #edit-btn { 2 | position: fixed; 3 | right: 15px; 4 | top: 260px; 5 | width: 35px; 6 | height: 35px; 7 | background-repeat: no-repeat; 8 | background-size: cover; 9 | cursor: pointer; 10 | -webkit-user-select: none; 11 | -moz-user-select: none; 12 | -ms-user-select: none; 13 | user-select: none; 14 | background-image: url(edit.svg); 15 | } -------------------------------------------------------------------------------- /asset/edit.js: -------------------------------------------------------------------------------- 1 | document.addEventListener('DOMContentLoaded', function() { 2 | var editBtn = document.createElement('div') 3 | editBtn.id = 'edit-btn' 4 | document.body.append(editBtn) 5 | 6 | var repo = window.$docsify.repo 7 | editBtn.addEventListener('click', function() { 8 | if (!repo) return 9 | if (!/https?:\/\//.exec(repo)) 10 | repo = 'https://github.com/' + repo 11 | var url = repo + '/tree/master' + 12 | location.hash.slice(1) + '.md' 13 | window.open(url) 14 | }) 15 | }) -------------------------------------------------------------------------------- /asset/edit.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Edit 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /asset/left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1210 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /asset/moon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /asset/right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1209 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /asset/share.css: -------------------------------------------------------------------------------- 1 | #share-btn { 2 | position: fixed; 3 | right: 15px; 4 | top: 220px; 5 | width: 35px; 6 | height: 35px; 7 | background-repeat: no-repeat; 8 | background-size: cover; 9 | cursor: pointer; 10 | -webkit-user-select: none; 11 | -moz-user-select: none; 12 | -ms-user-select: none; 13 | user-select: none; 14 | background-image: url('share.svg'); 15 | } -------------------------------------------------------------------------------- /asset/share.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Share-1 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /asset/sidebar.min.css: -------------------------------------------------------------------------------- 1 | .sidebar-nav li{position:relative;margin:0;cursor:pointer}.sidebar-nav ul:not(.app-sub-sidebar)>li:not(.file)::before{content:'';display:block;position:absolute;top:11px;left:-12px;height:6px;width:6px;border-right:1px solid #505d6b;border-bottom:1px solid #505d6b;transform:rotate(-45deg);transition:transform .1s}.sidebar-nav ul:not(.app-sub-sidebar)>li.open::before{transform:rotate(45deg)}.sidebar-nav ul:not(.app-sub-sidebar)>li.collapse::before{transform:rotate(-45deg)} -------------------------------------------------------------------------------- /asset/sun.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /asset/up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1211 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/10.md: -------------------------------------------------------------------------------- 1 | # 字符串替换 2 | 3 | > 原文: [https://pythonbasics.org/replace/](https://pythonbasics.org/replace/) 4 | 5 | Python 内置了对[字符串](https://pythonbasics.org/strings/)替换的支持。 字符串是包含文本数据的变量。 如果您不了解字符串,则可以在[本文](https://pythonbasics.org/strings/)中阅读有关字符串的更多信息。 6 | 7 | 可以使用字符串对象调用`str.replace(old, new)`方法。 本文演示了替换方法。 8 | 9 | 并非所有的编程语言都具有标准的字符串替换函数。 Python 具有许多现成的函数。 10 | 11 | 12 | 13 | ## 示例 14 | 15 | ### 替换方法 16 | 17 | 定义一个字符串并调用`replace()`方法。 第一个参数是要搜索的单词,第二个参数指定新值。 18 | 19 | 输出需要保存在字符串中。 如果您不保存输出,则字符串变量将包含相同的内容。 使用以下命令完成输出保存:`s = function()` 20 | 21 | 请尝试以下程序: 22 | 23 | ```py 24 | s = "Hello World" 25 | s = s.replace("World","Universe") 26 | print(s) 27 | 28 | ``` 29 | 30 | 将程序另存为`app.py`,然后在终端(或 IDE)中运行 31 | 32 | ```py 33 | python app.py 34 | 35 | ``` 36 | 37 | 这将输出字符串变量`s`的新输出: 38 | 39 | ![python replace](img/be45efc6bdd10368a1f750fa80e0a691.jpg) 40 | 41 | ### 要替换的单词数 42 | 43 | 可选参数是将要替换的项目数。 默认情况下是全部。下面的程序仅替换第一项: 44 | 45 | ```py 46 | s = "Hello World World World" 47 | s = s.replace("World","Universe",1) 48 | print(s) 49 | 50 | ``` 51 | 52 | 参数(`1`)表示该字符串仅应替换一次。 53 | 54 | ## 练习 55 | 56 | 下面的练习 57 | 58 | 1. 尝试更换程序 59 | 2. 字符串可以替换两次吗? 60 | 3. 是否仅用单词或短语替换? 61 | 62 | [下载示例](https://gum.co/dcsp) -------------------------------------------------------------------------------- /docs/102.md: -------------------------------------------------------------------------------- 1 | # `QVBoxLayout` 2 | 3 | > 原文: [https://pythonbasics.org/QVBoxLayout/](https://pythonbasics.org/QVBoxLayout/) 4 | 5 | `QVBoxLayout`在窗口中垂直组织窗口小部件。 6 | 7 | 除了让您自己组织所有小部件(指定地理位置)之外,您还可以让 PyQt 来处理它。 8 | 9 | 使用`.addWidget()`添加的每个新窗口小部件都是垂直添加的。 基本上,您可以获得小部件的垂直列表。 每个新的小部件都将添加到列表的底部。 10 | 11 | 从`PyQt5.QtWidgets`导入`QVBoxLayout`。 12 | 13 | 14 | 15 | 16 | ## 垂直布局 17 | 18 | ### `QVboxLayout`示例 19 | 20 | 下面的简单示例创建一个`QVboxLayout`。 然后使用`addWidget`方法,在**垂直方向**上添加新创建的按钮。 21 | 22 | ```py 23 | from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout 24 | app = QApplication([]) 25 | window = QWidget() 26 | layout = QVBoxLayout() 27 | layout.addWidget(QPushButton('1')) 28 | layout.addWidget(QPushButton('2')) 29 | layout.addWidget(QPushButton('3')) 30 | window.setLayout(layout) 31 | window.show() 32 | app.exec_() 33 | 34 | ``` 35 | 36 | 这将创建此应用程序: 37 | 38 | ![pyqt vertical layout](img/0dae36cbf5a5e7f0b1d59b7d66936b89.jpg) 39 | 40 | `addWidget()`中的参数接受`PyQt5.QtWidgets`中的任何小部件,例如`QPushButton`和所有其他可用的小部件。 41 | 42 | 不要忘记使用`window.setLayout(layout)`将`QVBoxLayout`添加到窗口中。 43 | 44 | [下载示例](https://gum.co/pysqtsamples) -------------------------------------------------------------------------------- /docs/103.md: -------------------------------------------------------------------------------- 1 | # PyQt 样式 2 | 3 | > 原文: [https://pythonbasics.org/pyqt-style/](https://pythonbasics.org/pyqt-style/) 4 | 5 | 可以配置 PyQt 样式。 PyQt 的默认样式称为“融合”。 但这不是唯一的样式。 您可能需要在多个操作系统上分发您的应用程序,并具有本机外观。 6 | 7 | 如果您使用 Windows,则可能需要 Windows 外观。 在 Mac 上,您可能需要 Mac OS X 样式。 所有这些都可以配置。 Mac 样式仅在 Mac OS X 上可用。 8 | 9 | 10 | 11 | 12 | ## PyQt 样式 13 | 14 | ### 可用样式 15 | 16 | 可用样式可能因系统而异。 您可以使用 Python 解释器获取可用样式的列表,如下所示: 17 | 18 | ```py 19 | $ python3 20 | Python 3.6.7 (default, Oct 22 2018, 11:32:17) 21 | [GCC 8.2.0] on linux 22 | Type "help", "copyright", "credits" or "license" for more information. 23 | >>> import PyQt5.QtWidgets 24 | >>> print(PyQt5.QtWidgets.QStyleFactory.keys()) 25 | ['Breeze', 'Oxygen', 'QtCurve', 'Windows', 'Fusion'] 26 | 27 | ``` 28 | 29 | 微风风格如下: 30 | 31 | ![pyqt breeze style](img/266da6b6042831619c7fc89594eb03fc.jpg) 32 | 33 | ### 配置样式 34 | 35 | 您可以使用`app.setStyle('Fusion')`行设置样式。 36 | 37 | 像这样: 38 | 39 | ```py 40 | app = QApplication([]) 41 | app.setStyle('Windows') 42 | 43 | ``` 44 | 45 | 然后窗口显示如下(旧的 Win 9x 样式): 46 | 47 | ![pyqt windows style](img/7d686acf4a7018708424fe7d588f16ad.jpg) 48 | 49 | [下载示例](https://gum.co/pysqtsamples) -------------------------------------------------------------------------------- /docs/104.md: -------------------------------------------------------------------------------- 1 | # 编译 PyQt 到 EXE 2 | 3 | > 原文: [https://pythonbasics.org/Compile-PyQt-to-exe/](https://pythonbasics.org/Compile-PyQt-to-exe/) 4 | 5 | 要分发您的应用程序,您需要有一个可执行程序而不是源代码。 这比给用户提供许多 Python 文件要容易。 6 | 7 | 为什么? 用户只需单击一下即可启动您的应用程序。 在 Windows 上,它是`.exe`。 在 Mac OS X 上,它是`.dmg` 8 | 9 | 10 | 11 | 12 | ## 构建 EXE 13 | 14 | ### 安装工具链 15 | 16 | 您可以使用`fbs`创建可以运行的程序。 17 | 18 | ```py 19 | sudo apt3 install python3-venv 20 | python3 -m venv venv 21 | source bin/activate 22 | pip3 install fbs PyQt5==5.9.2 PyInstaller==3.4 23 | fbs startproject 24 | 25 | ``` 26 | 27 | 然后,系统会要求您输入应用程序的名称和作者 28 | 29 | ```py 30 | App name [MyApp] : hello 31 | Author [Linux] : boss 32 | Mac bundle identifier (eg. com.boss.hello, optional): 33 | 34 | Created the src/ directory. 35 | 36 | ``` 37 | 38 | 看一下文件`/venv/src/main/python/main.py`。 这就是您的程序的源代码。 39 | 40 | 键入`fbs run`启动程序。 41 | 42 | ![python pyqt to exe](img/c538d52f29968b5dd86a6ee9c394a355.jpg) 43 | 44 | ### 创建可执行文件 45 | 46 | 您从二进制文件启动应用程序。 在 Windows 上是`.exe`,在 Mac 上是`.dmg` 47 | 48 | 制作独立的可执行文件类型 49 | 50 | `fbs freeze`。 51 | 52 | 然后在`target/`中创建程序。 如果您将应用命名为`hello`,则为`target/hello/hello`。 53 | 54 | ### 设置 55 | 56 | 始终使用安装程序来安装软件。 您可以使用命令`fbs installer`创建自己的安装程序。 57 | 58 | 在 Windows 和 Mac 上,这将创建一个图形安装程序(安装向导)。 59 | 60 | 在 Linux 上,它会创建一个软件包文件(`.deb`,`.rpm`),可以与软件包管理器一起安装。 61 | 62 | [下载示例](https://gum.co/pysqtsamples) -------------------------------------------------------------------------------- /docs/105.md: -------------------------------------------------------------------------------- 1 | # `QDial` 2 | 3 | > 原文: [https://pythonbasics.org/QDial/](https://pythonbasics.org/QDial/) 4 | 5 | PyQT 中包含一个拨号小部件(`QDial`)。它看起来像是您经常在混合面板上看到的音量控件。 它是`PyQt5.QtWidgets`的一部分。 6 | 7 | ![pyqt dial QDial](img/9407ce3a47e209822978ef051a94a41c.jpg) 8 | 9 | `QDial`小部件的外观可能会在操作系统上发生变化。 但是逻辑在所有平台上都是相同的。 10 | 11 | 12 | 13 | 14 | ## `QDial` 15 | 16 | ### 拨号小部件示例 17 | 18 | 它具有最小值和最大值,可以使用方法`setMinimum()`和`setMaximum()`进行设置。 19 | 20 | 您可以使用`setValue()`设置默认值。 如果更改了值,则可以调用方法(`.valueChanged.connect(self.sliderMoved)`)。 21 | 22 | 当前值为`.value()`。 23 | 24 | ### 示例 25 | 26 | 下面的示例创建一个拨号小部件窗口。 您可以复制并粘贴程序进行测试。 必须安装 PyQt5 才能运行该程序。 27 | 28 | ```py 29 | from PyQt5.QtWidgets import * 30 | import sys 31 | 32 | class Window(QWidget): 33 | def __init__(self): 34 | QWidget.__init__(self) 35 | layout = QGridLayout() 36 | self.setLayout(layout) 37 | self.dial = QDial() 38 | self.dial.setMinimum(0) 39 | self.dial.setMaximum(100) 40 | self.dial.setValue(40) 41 | self.dial.valueChanged.connect(self.sliderMoved) 42 | layout.addWidget(self.dial) 43 | 44 | def sliderMoved(self): 45 | print("Dial value = %i" % (self.dial.value())) 46 | 47 | app = QApplication(sys.argv) 48 | screen = Window() 49 | screen.show() 50 | sys.exit(app.exec_()) 51 | 52 | ``` 53 | 54 | [下载示例](https://gum.co/pysqtsamples) -------------------------------------------------------------------------------- /docs/106.md: -------------------------------------------------------------------------------- 1 | # `QCheckBox` 2 | 3 | > 原文: [https://pythonbasics.org/qcheckbox/](https://pythonbasics.org/qcheckbox/) 4 | 5 | 复选框(`QCheckbox`)是默认的 QT 小部件,可以使用方法`setChecked(true)`进行检查。 它是`PyQt5.QtWidgets`的一部分。 6 | 7 | 您可以使用`.toggled.connect()`添加点击回调/信号。 然后,接收槽可以处理事件。 8 | 9 | ![pyqt checkox](img/c05561472bf0335f0774e08359499538.jpg) 10 | 11 | 12 | 13 | 14 | ## `QCheckBox` 15 | 16 | ### PyQt 复选框示例 17 | 18 | 下面的示例在 PyQt 窗口中创建一个复选框。 如果单击复选框,它将调用方法`onClicked()`。 方法`.isChecked()`可用于获取复选框状态。 19 | 20 | ```py 21 | from PyQt5.QtWidgets import * 22 | import sys 23 | 24 | class Window(QWidget): 25 | def __init__(self): 26 | QWidget.__init__(self) 27 | layout = QGridLayout() 28 | self.setLayout(layout) 29 | 30 | radiobutton = QCheckBox("I have a Cat") 31 | radiobutton.setChecked(True) 32 | radiobutton.animal = "Cat" 33 | radiobutton.toggled.connect(self.onClicked) 34 | layout.addWidget(radiobutton, 0, 0) 35 | 36 | def onClicked(self): 37 | radioButton = self.sender() 38 | print("Animal " + (radioButton.animal) + " is " + str(radioButton.isChecked())) 39 | 40 | app = QApplication(sys.argv) 41 | screen = Window() 42 | screen.show() 43 | sys.exit(app.exec_()) 44 | 45 | ``` 46 | 47 | [下载示例](https://gum.co/pysqtsamples) -------------------------------------------------------------------------------- /docs/107.md: -------------------------------------------------------------------------------- 1 | # PyQt 单选按钮 2 | 3 | > 原文: [https://pythonbasics.org/pyqt-radiobutton/](https://pythonbasics.org/pyqt-radiobutton/) 4 | 5 | PyQT `QRadioButton`是一个简单的单选按钮。 通常,当只有一个选项(而不是复选框)时才使用。 6 | 7 | 在 qt 中,复选框始终具有圆形按钮和`QRadioButton("Australia")`之类的标签。 8 | 9 | ![pyqt radiobutton QRadioButton](img/40381d87dcf1cdf4992a4130e8a00a9c.jpg) 10 | 11 | 12 | 13 | 14 | ## 单选按钮 15 | 16 | ### PyQT 单选按钮示例 17 | 18 | 下面的代码创建 3 个单选按钮。 它将 3 个单选按钮添加到网格中。 19 | 如果单击任何单选按钮,它将调用方法`onClicked()`。 使用`radiobutton.toggled.connect(self.onClicked)`将单选按钮连接到该方法。 20 | 21 | ```py 22 | from PyQt5.QtWidgets import * 23 | import sys 24 | 25 | class Window(QWidget): 26 | def __init__(self): 27 | QWidget.__init__(self) 28 | layout = QGridLayout() 29 | self.setLayout(layout) 30 | 31 | radiobutton = QRadioButton("Australia") 32 | radiobutton.setChecked(True) 33 | radiobutton.country = "Australia" 34 | radiobutton.toggled.connect(self.onClicked) 35 | layout.addWidget(radiobutton, 0, 0) 36 | 37 | radiobutton = QRadioButton("China") 38 | radiobutton.country = "China" 39 | radiobutton.toggled.connect(self.onClicked) 40 | layout.addWidget(radiobutton, 0, 1) 41 | 42 | radiobutton = QRadioButton("Japan") 43 | radiobutton.country = "Japan" 44 | radiobutton.toggled.connect(self.onClicked) 45 | layout.addWidget(radiobutton, 0, 2) 46 | 47 | def onClicked(self): 48 | radioButton = self.sender() 49 | if radioButton.isChecked(): 50 | print("Country is %s" % (radioButton.country)) 51 | 52 | app = QApplication(sys.argv) 53 | screen = Window() 54 | screen.show() 55 | sys.exit(app.exec_()) 56 | 57 | ``` 58 | 59 | [下载示例](https://gum.co/pysqtsamples) -------------------------------------------------------------------------------- /docs/108.md: -------------------------------------------------------------------------------- 1 | # PyQt 分组框 2 | 3 | > 原文: [https://pythonbasics.org/pyqt-groupbox/](https://pythonbasics.org/pyqt-groupbox/) 4 | 5 | 分组框`QGroupBox`可以对小部件进行分组。 它通常具有标题和边框。 任何小部件都可以添加到分组框中。 这可以进一步用于将 UI/UX 与用户进行通信。 6 | 7 | 本示例演示如何创建分组框,如下所示: 8 | 9 | ![pyqt groupbox](img/b7d7436549630e570c53922ca7771eda.jpg) 10 | 11 | 12 | 13 | 14 | ## `QGroupBox` 15 | 16 | ### PyQt 分组框 17 | 18 | 用`QGroupBox("title")`初始化分组框。 然后将布局添加到分组框。 小部件将添加到布局中。 19 | 20 | ```py 21 | from PyQt5.QtWidgets import * 22 | import sys 23 | 24 | class GroupBox(QWidget): 25 | 26 | def __init__(self): 27 | QWidget.__init__(self) 28 | 29 | self.setWindowTitle("GroupBox") 30 | layout = QGridLayout() 31 | self.setLayout(layout) 32 | 33 | groupbox = QGroupBox("GroupBox Example") 34 | groupbox.setCheckable(True) 35 | layout.addWidget(groupbox) 36 | 37 | vbox = QVBoxLayout() 38 | groupbox.setLayout(vbox) 39 | 40 | radiobutton = QRadioButton("RadioButton 1") 41 | vbox.addWidget(radiobutton) 42 | 43 | radiobutton = QRadioButton("RadioButton 2") 44 | vbox.addWidget(radiobutton) 45 | 46 | radiobutton = QRadioButton("RadioButton 3") 47 | vbox.addWidget(radiobutton) 48 | 49 | radiobutton = QRadioButton("RadioButton 4") 50 | vbox.addWidget(radiobutton) 51 | 52 | app = QApplication(sys.argv) 53 | screen = GroupBox() 54 | screen.show() 55 | sys.exit(app.exec_()) 56 | 57 | ``` 58 | 59 | [下载示例](https://gum.co/pysqtsamples) -------------------------------------------------------------------------------- /docs/109.md: -------------------------------------------------------------------------------- 1 | # PyQt 工具提示 2 | 3 | > 原文: [https://pythonbasics.org/pyqt-tooltip/](https://pythonbasics.org/pyqt-tooltip/) 4 | 5 | 工具提示是将鼠标悬停在小部件上时显示的消息。 6 | 7 | 这可以是纯文本消息或格式消息(HTML)。 您可以通过在小部件上调用`.setToolTip("text")`来添加工具提示。 这通常用于协助用户。 8 | 9 | 10 | 11 | 12 | ## 工具提示示例 13 | 14 | ### PyQt 工具提示示例 15 | 16 | 下面的程序将工具提示消息添加到按钮。 它可以是纯文本或 HTML 格式的标签(标签为粗体和斜体)。 17 | 18 | 您可以在工具提示消息中设置所需的任何消息。 19 | 20 | ```py 21 | from PyQt5.QtWidgets import * 22 | import sys 23 | 24 | class Window(QWidget): 25 | 26 | def __init__(self): 27 | QWidget.__init__(self) 28 | layout = QGridLayout() 29 | self.setLayout(layout) 30 | 31 | button = QPushButton("Button") 32 | button.setToolTip("This is a text") 33 | layout.addWidget(button, 0, 0) 34 | 35 | button = QPushButton("Button") 36 | button.setToolTip("HTML can be shown too..") 37 | layout.addWidget(button, 1, 0) 38 | 39 | app = QApplication(sys.argv) 40 | screen = Window() 41 | screen.show() 42 | sys.exit(app.exec_()) 43 | 44 | ``` 45 | 46 | [下载示例](https://gum.co/pysqtsamples) -------------------------------------------------------------------------------- /docs/11.md: -------------------------------------------------------------------------------- 1 | # 字符串连接 2 | 3 | > 原文: [https://pythonbasics.org/join/](https://pythonbasics.org/join/) 4 | 5 | `join(sequence)`方法连接元素并返回组合的字符串。 连接方法组合序列的每个元素。 6 | 7 | 合并单词列表? 8 | 9 | 使用`join(sequence)`方法将它们组合成一个句子。 在分隔符字符串上调用该方法,该字符串可以是任何字符,从空格到破折号。 10 | 11 | 这比对每个单词使用加号运算符要容易,因为每个单词的列表很快就会变得很乏味。 12 | 13 | 14 | 15 | ## 示例 16 | 17 | `join`方法将序列作为参数。 序列被写为单个参数:您需要在序列周围添加方括号。 18 | 19 | 如果需要,您可以传递一个将序列作为参数的变量。 这使其更易于阅读。 在下面的示例中,我们将使用空格分隔符字符串。 20 | 21 | 请尝试以下程序: 22 | 23 | ```py 24 | # define strings 25 | firstname = "Bugs" 26 | lastname = "Bunny" 27 | 28 | # define our sequence 29 | sequence = (firstname,lastname) 30 | 31 | # join into new string 32 | name = " ".join(sequence) 33 | print(name) 34 | 35 | ``` 36 | 37 | 您应该看到以下输出: 38 | 39 | ![string join output](img/b99515f7c4187ff3259d9105e70f3bd6.jpg) 40 | 41 | 它还可以加入单词列表: 42 | 43 | ```py 44 | words = ["How","are","you","doing","?"] 45 | sentence = ' '.join(words) 46 | print(sentence) 47 | 48 | ``` 49 | 50 | ## 练习 51 | 52 | 试试下面的练习 53 | 54 | 1. 像上面的示例一样,创建单词列表并将其连接起来。 55 | 2. 尝试将分隔符字符串从空格更改为下划线。 56 | 57 | [下载示例](https://gum.co/dcsp) -------------------------------------------------------------------------------- /docs/110.md: -------------------------------------------------------------------------------- 1 | # PyQt 工具箱 2 | 3 | > 原文: [https://pythonbasics.org/pyqt-toolbox/](https://pythonbasics.org/pyqt-toolbox/) 4 | 5 | 工具箱是一个容器。 它可以显示由选项卡分隔的项目组。 如果工具栏有很多项目,则可能需要一个工具箱。 6 | 7 | 工具箱`QToolBox`的屏幕截图如下所示。 8 | 9 | ![toolbox pyqt qtoolbox](img/7abfe71cbe8a2a2a5d896122b9f66de2.jpg) 10 | 11 | 12 | 13 | 14 | ## 工具箱示例 15 | 16 | ### `QToolBox` 17 | 18 | 下面的代码创建一个包含 3 个项目的工具箱。 工具箱`QToolBox`具有方法`.addItem()`。 19 | 20 | 工具箱本身必须添加到布局中,例如`layout.addWidget(toolbox, 0, 0)`。 21 | 22 | ```py 23 | from PyQt5.QtWidgets import * 24 | import sys 25 | 26 | class Window(QWidget): 27 | 28 | def __init__(self): 29 | QWidget.__init__(self) 30 | layout = QGridLayout() 31 | self.setLayout(layout) 32 | 33 | # Add toolbar and items 34 | toolbox = QToolBox() 35 | layout.addWidget(toolbox, 0, 0) 36 | label = QLabel() 37 | toolbox.addItem(label, "Students") 38 | label = QLabel() 39 | toolbox.addItem(label, "Teachers") 40 | label = QLabel() 41 | toolbox.addItem(label, "Directors") 42 | 43 | app = QApplication(sys.argv) 44 | screen = Window() 45 | screen.show() 46 | sys.exit(app.exec_()) 47 | 48 | ``` 49 | 50 | [下载示例](https://gum.co/pysqtsamples) -------------------------------------------------------------------------------- /docs/111.md: -------------------------------------------------------------------------------- 1 | # PyQt 工具栏 2 | 3 | > 原文: [https://pythonbasics.org/pyqt-Toolbar/](https://pythonbasics.org/pyqt-Toolbar/) 4 | 5 | PyQt 窗口除了文件菜单外,通常还具有工具栏`QToolBar`。 工具栏包含一些按钮。 在网络浏览器中,这些按钮可以是后退,前进,刷新,主页。 在文本编辑器中,打开,保存等等。 6 | 7 | ![qt toolbar pyqt](img/c0ebe078f580acf33bdbd871884e2a85.jpg) 8 | 9 | 在本文中,您将学习如何在窗口中添加工具栏。 10 | 11 | 12 | 13 | 14 | ## 工具栏 15 | 16 | ### `QToolBar`示例 17 | 18 | 下面的程序创建一个带有工具栏`QToolBar`和按钮`QToolButton`的窗口。 您可以将工具栏添加到任何 PyQt 窗口。 它还添加了文本框。 19 | 20 | 工具栏添加到布局`QGridLayout`,按钮`QToolButton`添加到`QToolBar`。 21 | 22 | ```py 23 | from PyQt5.QtWidgets import * 24 | import sys 25 | 26 | class Window(QWidget): 27 | 28 | def __init__(self): 29 | QWidget.__init__(self) 30 | layout = QGridLayout() 31 | self.setLayout(layout) 32 | 33 | # Create pyqt toolbar 34 | toolBar = QToolBar() 35 | layout.addWidget(toolBar) 36 | 37 | # Add buttons to toolbar 38 | toolButton = QToolButton() 39 | toolButton.setText("Apple") 40 | toolButton.setCheckable(True) 41 | toolButton.setAutoExclusive(True) 42 | toolBar.addWidget(toolButton) 43 | toolButton = QToolButton() 44 | toolButton.setText("Orange") 45 | toolButton.setCheckable(True) 46 | toolButton.setAutoExclusive(True) 47 | toolBar.addWidget(toolButton) 48 | 49 | # Add textfield to window 50 | tbox = QPlainTextEdit() 51 | layout.addWidget(tbox) 52 | 53 | app = QApplication(sys.argv) 54 | screen = Window() 55 | screen.show() 56 | sys.exit(app.exec_()) 57 | 58 | ``` -------------------------------------------------------------------------------- /docs/112.md: -------------------------------------------------------------------------------- 1 | # PyQt 菜单栏 2 | 3 | > 原文: [https://pythonbasics.org/pyqt-menubar/](https://pythonbasics.org/pyqt-menubar/) 4 | 5 | 菜单栏可以添加到 PyQt 窗口中。 它是带有按钮项的水平条,通常是文件菜单等。 6 | 7 | 本示例向 PyQt 窗口添加菜单栏和文本框。 如下面的屏幕截图所示。 8 | 9 | ![menubar in pyqt](img/93ba1beccbdd7671d2f987f5d8ce0ffb.jpg) 10 | 11 | 12 | 13 | 14 | ## PyQt 菜单栏 15 | 16 | ### 菜单栏示例 17 | 18 | 可以使用`QMenuBar()`来构建菜单栏。 您可以像这样添加菜单`.addMenu("File")`。 然后将操作添加到菜单,使`.addAction("Open")`成为可能。 19 | 20 | 菜单栏必须添加到布局中,可通过此行`layout.addWidget(menubar, 0, 0)`完成。 21 | 22 | ```py 23 | from PyQt5.QtCore import * 24 | from PyQt5.QtWidgets import * 25 | import sys 26 | 27 | class Window(QWidget): 28 | def __init__(self): 29 | QWidget.__init__(self) 30 | layout = QGridLayout() 31 | self.setLayout(layout) 32 | 33 | # create menu 34 | menubar = QMenuBar() 35 | layout.addWidget(menubar, 0, 0) 36 | actionFile = menubar.addMenu("File") 37 | actionFile.addAction("New") 38 | actionFile.addAction("Open") 39 | actionFile.addAction("Save") 40 | actionFile.addSeparator() 41 | actionFile.addAction("Quit") 42 | menubar.addMenu("Edit") 43 | menubar.addMenu("View") 44 | menubar.addMenu("Help") 45 | 46 | # add textbox 47 | tbox = QPlainTextEdit() 48 | layout.addWidget(tbox, 1, 0) 49 | 50 | app = QApplication(sys.argv) 51 | screen = Window() 52 | screen.show() 53 | sys.exit(app.exec_()) 54 | 55 | ``` 56 | 57 | [下载示例](https://gum.co/pysqtsamples) -------------------------------------------------------------------------------- /docs/113.md: -------------------------------------------------------------------------------- 1 | # PyQt 标签小部件 2 | 3 | > 原文: [https://pythonbasics.org/pyqt-TabWidget/](https://pythonbasics.org/pyqt-TabWidget/) 4 | 5 | 标签可以添加到`QTabWidget`中。 `QTabWidget`可以添加到布局中,也可以添加到窗口中。 6 | 7 | 可以有任意数量的标签。 下例显示了添加标签的窗口。 8 | 9 | ![tabs in pyqt window](img/1423f5646dd3a4d92eccfc7263fe178c.jpg) 10 | 11 | 图片:在 PyQt 窗口中显示的标签。 12 | 13 | 14 | 15 | 16 | ## 标签示例 17 | 18 | ### PyQt 标签示例 19 | 20 | 运行以下代码,以在 PyQt 窗口中查看选项卡小部件。 在选项卡之间导航会显示添加到选项卡的小部件。 21 | 22 | 要将选项卡添加到`QTabWidget`,请调用方法`.addTab()`。 23 | 24 | ```py 25 | from PyQt5.QtCore import * 26 | from PyQt5.QtWidgets import * 27 | import sys 28 | 29 | class Window(QWidget): 30 | def __init__(self): 31 | QWidget.__init__(self) 32 | layout = QGridLayout() 33 | self.setLayout(layout) 34 | label1 = QLabel("Widget in Tab 1.") 35 | label2 = QLabel("Widget in Tab 2.") 36 | tabwidget = QTabWidget() 37 | tabwidget.addTab(label1, "Tab 1") 38 | tabwidget.addTab(label2, "Tab 2") 39 | layout.addWidget(tabwidget, 0, 0) 40 | 41 | app = QApplication(sys.argv) 42 | screen = Window() 43 | screen.show() 44 | sys.exit(app.exec_()) 45 | 46 | ``` -------------------------------------------------------------------------------- /docs/114.md: -------------------------------------------------------------------------------- 1 | # PyQt 自动补全 2 | 3 | > 原文: [https://pythonbasics.org/pyqt-auto-complete/](https://pythonbasics.org/pyqt-auto-complete/) 4 | 5 | PyQt 支持自动补全。 如果输入文本框(`QLineEdit`),它可以提出建议。 从列表中推荐这些建议。 6 | 7 | 本示例将自动补全功能添加到`QLineEdit`文本框中。 8 | 9 | ![auto complete QLineEdit](img/d1daeade8423826325f8b569bf16acc5.jpg) 10 | 11 | 图片:在 PyQt 窗口中显示的标签。 12 | 13 | ## 自动补全 14 | 15 | ### `QLineEdit`自动补全示例 16 | 17 | 首先创建选项(名称)列表,然后创建`completer = QCompleter(names)`。 18 | 19 | 使用行`self.lineedit = QLineEdit()`创建行编辑。 否则,行编辑将正常进行。 20 | 21 | 这些建议已添加到`self.lineedit.setCompleter(completer)`中。 22 | 23 | 如果忘记了最后一行,则`QCompleter`和`QLineEdit`未连接,这意味着没有**自动补全**。 24 | 25 | ```py 26 | from PyQt5.QtWidgets import * 27 | import sys 28 | 29 | class Window(QWidget): 30 | def __init__(self): 31 | QWidget.__init__(self) 32 | layout = QGridLayout() 33 | self.setLayout(layout) 34 | 35 | # auto complete options 36 | names = ["Apple", "Alps", "Berry", "Cherry" ] 37 | completer = QCompleter(names) 38 | 39 | # create line edit and add auto complete 40 | self.lineedit = QLineEdit() 41 | self.lineedit.setCompleter(completer) 42 | layout.addWidget(self.lineedit, 0, 0) 43 | 44 | app = QApplication(sys.argv) 45 | screen = Window() 46 | screen.show() 47 | sys.exit(app.exec_()) 48 | 49 | ``` -------------------------------------------------------------------------------- /docs/115.md: -------------------------------------------------------------------------------- 1 | # PyQt 列表框 2 | 3 | > 原文: [https://pythonbasics.org/pyqt-list-box/](https://pythonbasics.org/pyqt-list-box/) 4 | 5 | 列表框(`QListWidget`)提供了多个选项。 您可以单击一个项目。 想一想歌曲播放列表。 与组合框不同,它显示所有可能的选项。 6 | 7 | 下面的屏幕截图在一个窗口中显示了一个 PyQt 列表框。 8 | 9 | ![pyqt listbox](img/e9d04a97c37222a7c48d0730bf3dcc10.jpg) 10 | 11 | 12 | 13 | 14 | ## PyQt 列表框示例 15 | 16 | ### `QListWidget` 17 | 18 | 使用`QListWidget()`创建一个列表框小部件。 然后添加带有`self.listwidget.insertItem(0, "Red")`的项目,其中第一个参数是索引。 19 | 20 | 点击事件会添加点击的方法`self.listwidget.clicked.connect(self.clicked)` 21 | 22 | ```py 23 | from PyQt5.QtWidgets import * 24 | import sys 25 | 26 | class Window(QWidget): 27 | def __init__(self): 28 | QWidget.__init__(self) 29 | layout = QGridLayout() 30 | self.setLayout(layout) 31 | self.listwidget = QListWidget() 32 | self.listwidget.insertItem(0, "Red") 33 | self.listwidget.insertItem(1, "Orange") 34 | self.listwidget.insertItem(2, "Blue") 35 | self.listwidget.insertItem(3, "White") 36 | self.listwidget.insertItem(4, "Green") 37 | self.listwidget.clicked.connect(self.clicked) 38 | layout.addWidget(self.listwidget) 39 | 40 | def clicked(self, qmodelindex): 41 | item = self.listwidget.currentItem() 42 | print(item.text()) 43 | 44 | app = QApplication(sys.argv) 45 | screen = Window() 46 | screen.show() 47 | sys.exit(app.exec_()) 48 | 49 | ``` 50 | 51 | [下载示例](https://gum.co/pysqtsamples) -------------------------------------------------------------------------------- /docs/116.md: -------------------------------------------------------------------------------- 1 | # PyQt 输入对话框 2 | 3 | > 原文: [https://pythonbasics.org/pyqt-input-dialog/](https://pythonbasics.org/pyqt-input-dialog/) 4 | 5 | 开箱即用地支持 PyQt 中的输入对话框(`QInputDialog`)。 它具有输入文本,确定和取消按钮。 6 | 7 | 在本文中,您将看到它在 PyQt 中有效。 如屏幕截图所示 8 | 9 | ![pyqt input dialog](img/d94bc3378d5cbdc5aa8d3a5c32b3dd69.jpg) 10 | 11 | 12 | 13 | 14 | ## 输入对话框 15 | 16 | ### 示例 17 | 18 | 下面的代码创建一个 PyQt 输入对话框。 单击按钮后,您可以输入一些文本。 文本显示为标签。 19 | 20 | 该对话框是使用`showDialog`方法创建的,仅几行。 输入方言是`PyQt5.QtWidgets`的一部分。 21 | 22 | ```py 23 | from PyQt5.QtWidgets import (QWidget, QPushButton, QLineEdit, QInputDialog, QApplication, QLabel) 24 | import sys 25 | 26 | class Example(QWidget): 27 | 28 | def __init__(self): 29 | super().__init__() 30 | self.initUI() 31 | 32 | def initUI(self): 33 | # Add button 34 | self.btn = QPushButton('Show Input Dialog', self) 35 | self.btn.move(30, 20) 36 | self.btn.clicked.connect(self.showDialog) 37 | 38 | # Add label 39 | self.le = QLabel(self) 40 | self.le.move(30, 62) 41 | self.le.resize(400,22) 42 | 43 | self.setGeometry(300, 300, 290, 150) 44 | self.setWindowTitle('Input dialog') 45 | self.show() 46 | 47 | def showDialog(self): 48 | text, ok = QInputDialog.getText(self, 'Input Dialog', 'Enter text:') 49 | if ok: 50 | self.le.setText(str(text)) 51 | 52 | if __name__ == '__main__': 53 | app = QApplication(sys.argv) 54 | ex = Example() 55 | sys.exit(app.exec_()) 56 | 57 | ``` -------------------------------------------------------------------------------- /docs/118.md: -------------------------------------------------------------------------------- 1 | # 机器学习 -------------------------------------------------------------------------------- /docs/119.md: -------------------------------------------------------------------------------- 1 | # 数据科学 2 | 3 | > 原文: [https://pythonbasics.org/data-science/](https://pythonbasics.org/data-science/) 4 | 5 | 数据科学是科学地从各种结构化和非结构化数据中提取知识的过程。 它是一个多学科领域,使用不同种类的算法和技术来识别数据的真实目的和含义。 6 | 7 | 数据科学家需要具备高超的技术才能解释数据并提取含义。 数据科学家需要成为各种数据科学工具的专家,例如分析工具,数据可视化工具,数据库工具和其他工具。 数据科学包括以下组件,数据分析&: 8 | 9 | 10 | 11 | ## 数据科学 12 | 13 | ### 探索数据 14 | 15 | 数据科学主要从探索和分析开始。 数据科学家探索数据并将其处理到微观层次。 16 | 17 | 在开始数据分析之前,将识别具有不同数据集的常见数据并进行分类。 KNIME,OpenRefin,Orange,RapidMiner,Pentaho,Talend 是用于此类工作的一些数据探索和数据分析工具。 18 | 19 | ### 数据可视化 20 | 21 | 数据科学中的可视化意味着通过各种可视内容以更容易理解的方式呈现数据。 22 | 23 | 这主要是针对不了解数据技术表示形式的普通读者完成的。 数据的可视化对于将数据呈现给最终用户非常有效。 24 | 25 | 一些数据可视化工具是 Tableau,Infogram,ChartBlocks,Datawrapper,Plotly,RAW,Visual.ly 等。 26 | 27 | ### 经典机器学习 28 | 29 | 在数据科学中,计算机本身学习如何使用不同的算法和统计信息来计算不同的数据。 30 | 31 | 该技术非常耗时且复杂。 但是随着时间的流逝,它现在变得越来越快。 32 | 33 | 这些类型的计算称为机器学习或人工智能。 34 | 35 | 它无需程序员的帮助即可自动从工作和系统中学习。 这些类型的软件应用程序根据其计算经验进行学习。 36 | 37 | 一些机器学习工具包括 Google ML Kit,OpenNN,Apache Mahout,HPE Haven OnDemand,HPE Haven OnDemand 等。 38 | 39 | ### 深度学习 40 | 41 | 深度学习或深度学习实际上是机器学习的一部分。 它基于数据表示和算法。 42 | 43 | 这种深度学习技术对于数据科学至关重要。 ylearn2,Theano,Caffe,Torch,Cuda-convent,Deeplearning4j 这些是用于数据科学中深度学习的一些工具。 44 | 45 | ### 数据存储和大数据框架 46 | 47 | 数据是数据科学过程的核心和主要组成部分。 公司将数据存储在大型基础架构中,并为存储的数据设置不同的框架。 48 | 49 | 所有数据都以井井有条的方式存储,因此用户可以轻松访问和处理数据。 它使数据科学家可以轻松地分析,探索,访问和处理海量数据。 50 | 51 | ![big data](img/e238a9edc229de15d7efe37f83b76b42.jpg) 52 | 53 | ### 总结 54 | 55 | 如今,对数据科学的最初威胁是难以阅读某些自然语言,数据处理和图像处理。 56 | 57 | 尽管开发了各种应用程序和软件来限制这些威胁,但仍出现了新问题。 58 | 59 | 数据科学是计算机科学中的下一件大事。 对新数据科学家的需求正在迅速扩展,并且该行业正在迅速发展。 -------------------------------------------------------------------------------- /docs/12.md: -------------------------------------------------------------------------------- 1 | # 字符串查找 2 | 3 | > 原文: [https://pythonbasics.org/string-find/](https://pythonbasics.org/string-find/) 4 | 5 | `find(query)`方法内置于标准 python。 只需在字符串对象上调用方法以搜索字符串,例如:`obj.find("search")`。 6 | 7 | `find()`方法搜索查询字符串并返回找到的字符位置。 如果找不到该字符串,则返回 -1。 8 | 9 | 用简单的英语来说:找出一个字符串是否包含另一个字符串。 10 | 11 | 12 | 13 | ## 示例 14 | 15 | ### 查找方法 16 | 17 | 如果找到一个单词,find 方法将返回索引。 如果找不到,则返回 -1。 您可以添加开始索引和结束索引:`find(query, start, end)`,但是这些参数是可选的。 18 | 19 | 请尝试以下程序: 20 | 21 | ```py 22 | s = "That I ever did see. Dusty as the handle on the door" 23 | 24 | index = s.find("Dusty") 25 | print(index) 26 | 27 | ``` 28 | 29 | 将程序另存为`search.py​​`,可从终端或 IDE 运行。 30 | 您应该看到以下输出: 31 | 32 | ![string find](img/e0899da7ba3f5b7de1e37e2be3467116.jpg) 33 | 34 | ### `in`关键字 35 | 36 | 您也可以使用关键字`in`。 下面的示例向您展示如何使用 Python `in`关键字。 37 | 38 | ```py 39 | s = "That I ever did see. Dusty as the handle on the door" 40 | 41 | if "Dusty" in s: 42 | print("query found") 43 | 44 | ``` 45 | 46 | 区别在于`in`关键字如果字符串包含单词则返回,而`find`返回字符位置。 47 | 48 | ## 练习 49 | 50 | 试试下面的练习 51 | 52 | 1. 找出字符串查找是否区分大小写 53 | 2. 如果查询字符串在字符串中出现两次,该怎么办? 54 | 3. 编写一个要求控制台输入并搜索查询的程序。 55 | 56 | [下载示例](https://gum.co/dcsp) -------------------------------------------------------------------------------- /docs/120.md: -------------------------------------------------------------------------------- 1 | # 如何从机器学习和 AI 认真地起步 2 | 3 | > 原文: [https://pythonbasics.org/how-to-seriously-start-with-machine-learning-and-ai/](https://pythonbasics.org/how-to-seriously-start-with-machine-learning-and-ai/) 4 | 5 | 计算机科学是一个很大的领域,但是我们将专注于人工智能和机器学习。 6 | 7 | 机器学习和 AI 用于医疗保健,汽车,政府,军事,金融和经济学,视频游戏,广告,艺术等领域。 每个有兴趣的人都可以达到的目标。 8 | 9 | 机器学习算法可以做出预测或决策。 他们使用训练数据来训练模型,他们“从数据中学习”。 10 | 11 | 因此,您了解所有这一切,并且可能想知道“我如何开始?” 12 | 13 | ## 从机器学习开始 14 | 15 | ### 课程 16 | 17 | 课堂课程或在线课程。 报名参加课程之前,了解基本知识很重要。 您并没有那么快或太慢的解释,所以确保您能赶上进度是最好的。 18 | 19 | * [使用 Python 入门机器学习](https://gum.co/MnRYU) 20 | * [伯克利 AI 入门](http://ai.berkeley.edu/lecture_videos.html) 21 | * [fast.ai](http://fast.ai/) 22 | * [Ethz 机器学习](https://www.ethz.ch/content/vp/en/lectures/d-infk/2017/autumn/252-0535-00L.html) 23 | 24 | ### 书籍 25 | 26 | 书籍既经典又安全。 真正的文档是下一步。 从人工智能到最简单的编程语言,都有关于这一切的书籍。 27 | 28 | * [http://www.deeplearningbook.org/](http://www.deeplearningbook.org/) 29 | * [http://neuralnetworksanddeeplearning.com/](http://neuralnetworksanddeeplearning.com/) 30 | 31 | ### 互联网 32 | 33 | 今天,当您考虑学习某事时,首先想到的就是 Google。 34 | 35 | 在互联网上搜索信息很有用,请不要小看自我学习。 36 | 37 | 在线教程非常适合开始练习。 如果您有计算机并且有时间去做,那么教程可能会让您了解 AI 和 ML 的工作方式。 38 | 39 | * [Python 机器学习](https://pythonbasics.org/machine-learning-libraries/) 40 | 41 | ![machine learning in python](img/61ed7d26f888c86bd50826965628f8e1.jpg) 42 | 43 | ### 大学 44 | 45 | 学院。 取决于您已经学习的内容和可能性; 大学是知识专业化的最佳途径。 46 | 47 | 有时大学提供一些短期课程,您可以尝试; 在进行金融投资之前,要真正了解您是否有这种想法。 48 | 49 | 无论您做什么学习,都不要忘记科学是试错法。 -------------------------------------------------------------------------------- /docs/122.md: -------------------------------------------------------------------------------- 1 | # 机器学习库 2 | 3 | > 原文: [https://pythonbasics.org/machine-learning-libraries/](https://pythonbasics.org/machine-learning-libraries/) 4 | 5 | 每个程序员都应该了解 Python 机器学习的库。 6 | 7 | 如果开发人员需要从事统计技术或数据分析工作,那么他或她将(可能)考虑使用 Python。 8 | 9 | 该编程语言以友好,易学而著称,并且具有用于机器学习的大量库。 10 | 11 | 在机器学习方面,Python 绝对是最受欢迎的选择之一。 12 | 13 | 14 | 15 | 可是等等! 首先,让我们弄清楚什么是机器学习以及什么是库。 16 | 17 | ## 什么是机器学习? 18 | 19 | 机器学习实际上是对算法的研究,该算法允许人工智能通过机器从数据中学习。 20 | 21 | 那不是令人难以置信吗? 总有一天,技术将能够以我们人类无法实现的方式为我们学习和理解信息。 22 | 23 | 另一方面,库是用诸如 Python 之类的编程语言编写的例程和函数集。 这样,开发人员可以避免编写多行代码。 24 | 25 | 它背后的魔力是数学,统计学和概率。 26 | 27 | ## 机器学习库 28 | 29 | 那么,哪些是 python 机器学习的基本库? 30 | 31 | ### Pandas 32 | 33 | 熊猫是数据科学的基础。 这是用于数据集的强制性库,用于数据提取和准备。 34 | 35 | 熊猫提供了用于分组,合并和过滤数据以及执行时间序列分析的方法。 36 | 37 | 它有两个主要结构:一维(系列)和二维(数据帧)。 38 | 39 | 熊猫的关键字是标签和关系数据。 40 | 41 | ### Matplotlib 42 | 43 | 当开发人员考虑可视化库时,首先想到的就是这种方法。 44 | 45 | Matplotlib 通常用于创建 2D 绘图和图形。 开发人员还可以绘制图表,直方图和散点图。 46 | 47 | 一方面有一个很低的层次,因为程序员需要知道更多的命令,但是…另一方面,有了权限和足够的命令,您就可以制作所需的图形。 48 | 49 | ### Seaborn 50 | 51 | Seaborn 是“另一个”可视化库。 它建立在 Matplotlib 的基础上,不仅取决于它,而且还可以将其发展到更高的层次。 52 | 53 | Seaborn 使生成某些类型的图,热图,时间序列和小提琴图更容易。 54 | 55 | ### Scikit-learn 56 | 57 | Scikit-learn 管理两个基本术语:数据挖掘和数据分析。 58 | 59 | 是使用经典 ML 算法的理想选择。 60 | 61 | Scikit-learn 的设计能够与 SciPy 和 NumPy 等其他 Python 库进行互操作。 62 | 63 | ![sklearn, scikit-learn, a machine learning module for python](img/5d99d2bfbe94d99072e9460d40821ee1.jpg) 64 | 65 | ### Tensorflow 66 | 67 | TensorFlow 是用于数据流和差异化编程的最受欢迎的开源软件库之一。 68 | 69 | 有时不一定需要深度学习算法,但有用吗? 您永远不要怀疑,这就是 TensorFlow 的目的。 70 | 71 | TensorFlow 非常适合在以下两种平台上运行和编译:中央处理器和图形处理器。 72 | 73 | ### Theano 74 | 75 | Theano 与 TensorFlow 有很多共同点:也用于深度学习,并且可以在 CPU 和 GPU 上使用。 76 | 77 | 这是一个多维数组,具有数学表达式和运算,两者都与 NumPy 相似。 78 | 79 | 考虑到 Theano 是最繁重的库之一,Theano 可根据需要进行评估,优化和定义。 80 | 81 | 在有监督或无监督的机器学习人工智能是改善编程和开发所必需的工具。 -------------------------------------------------------------------------------- /docs/123.md: -------------------------------------------------------------------------------- 1 | # 什么是机器学习? 2 | 3 | > 原文: [https://pythonbasics.org/what-is-machine-learning/](https://pythonbasics.org/what-is-machine-learning/) 4 | 5 | 机器学习是人工智能的一个子领域。 6 | 7 | 科学家一直在尝试制造智能机器。 这台机器擅长于一件事,除了编程要完成的任务外,只有一件事无能为力。 8 | 9 | 10 | 11 | ## 机器学习 12 | 13 | ### 历史 14 | 15 | 1997 年,一台名为“深蓝”的计算机击败了世界象棋世界象棋锦标赛的冠军。聪明? 不,这是这台计算机所能做的:它无能为力。 16 | 17 | 因此,如果您遇到新问题,计算机将无法解决。 这意味着用新的逻辑和规则创建一个新程序。 18 | 19 | 您可以使用从示例和经验中学习的算法,而不必依赖硬编码规则。 这称为机器学习。 20 | 21 | ![artificial intelligence](img/c14011f6cb8ac3d59afd69054b81ea28.jpg) 22 | 23 | ### 示例 24 | 25 | 机器学习算法可以解决许多问题,例如: 26 | 27 | * **垃圾邮件分类**:电子邮件是否是垃圾邮件。 28 | * **文档分类**:它是什么类型的文档。 29 | * **人脸检测**:是不是人脸? 30 | * **价格预测**:预期价格是多少?。 31 | 32 | 还有很多。 33 | 34 | 机器学习算法有不同类型,它们可以分为: 35 | 36 | * 监督学习算法 37 | * 无监督学习算法 38 | 39 | ### 分类 40 | 41 | 监督学习问题的一种类型是分类。 假设算法必须确定电子邮件是否为垃圾邮件。 您可以编写许多逻辑规则,但这很难维护并且很难更改。 42 | 43 | 您可以做的是创建一个程序,该程序使用应为输入生成的带有标签的输出示例。 该程序使用交易数据。 用训练数据对算法进行训练后,您可以进行预测。 44 | 45 | 给定一个新的示例电子邮件,该算法可以**预测/分类**,无论新电子邮件是垃圾邮件还是垃圾邮件。 由于使用了训练数据,因此我们将其称为**监督学习算法**。 -------------------------------------------------------------------------------- /docs/124.md: -------------------------------------------------------------------------------- 1 | # 区分机器学习,深度学习和 AI? 2 | 3 | > 原文: [https://pythonbasics.org/difference-machine-learning-deep-learning-ai/](https://pythonbasics.org/difference-machine-learning-deep-learning-ai/) 4 | 5 | 人工智能,机器学习和深度学习之间有什么区别? 6 | 7 | **人工智能(AI)**,**机器学习**和**深度学习**是流行的术语。 8 | 9 | 但是名字叫什么? 10 | 11 | 这些短语混合起来就好像它们是可互换的,因为它们都围绕着几种使用数据解释来解决问题的技术。 12 | 13 | 这些术语背后的关键概念非常不同。 这是对这些技术的一般描述。 14 | 15 | 16 | 17 | ## 人工智能 18 | 19 | **人工智能**是指机器执行复杂任务的能力,这是一个通用术语。 通常,这些是基于能够进行认知计算的算法的软件。 20 | 21 | 这包括机器人技术,自然语言处理,机器学习和深度学习。 22 | 23 | 计算能力的指数级增长已导致 AI 应用程序的爆炸式增长。您现在在科幻小说中看到的东西已经成为日常生活的一部分。 24 | 25 | 机器现在可以执行复杂的任务,而无需人工干预。这种最著名的两种形式是**机器学习**和**深度学习**。 26 | 27 | ## 机器学习 28 | 29 | **机器学习**的思想可以追溯到 1950 年代后期。 他从斯坦福大学的一位计算机科学家开始,他认为:机器可以自己学习,而不是由人类教计算机。 30 | 31 | 学习过程需要数据,并且在线生成了大量数据,这才开始。 32 | 33 | 机器学习由可分析数据并从中学习的算法组成。这些算法使软件能够进行预测和关联。 34 | 35 | 这不同于传统编程,在传统编程中,软件依赖于手动编码的软件例程。 36 | 37 | **真实世界示例**:为防止欺诈,机器学习有助于识别模式,行为和风险趋势并对之做出反应。 它使用训练数据来这样做。 38 | 39 | ## 深度学习 40 | 41 | 深度学习是指一类特定的机器学习和人工智能。深度学习基于**神经网络**。 42 | 43 | 神经网络创建于 1950 年代,其灵感来自人脑生物学模型。 44 | 45 | ![artificial neural network](img/03ca13c6fd49797b53b5cd1975077dd2.jpg) 46 | 47 | 如果我们说机器学习是人工智能的一个分支,那么深度学习就是机器学习的一个分支。 48 | 49 | **深度学习**是一组机器学习算法,它们使用能够从经验中学习的复杂神经网络。 这些系统必须根据现有示例进行训练。 50 | 51 | 它如何工作? 52 | 53 | 在神经网络中,人工神经元被分为几层。 信息是单向流动的。 一层中的每个神经元都与其余的神经元进行通信,直到到达网络的尽头。 结果是深度学习能够使用大量数据为复杂的决策提供计算机系统。 -------------------------------------------------------------------------------- /docs/125.md: -------------------------------------------------------------------------------- 1 | # 机器学习 2 | 3 | > 原文: [https://pythonbasics.org/machine-learning/](https://pythonbasics.org/machine-learning/) 4 | 5 | 在想学习 Python 的人当中,Scikit 是目前最热门的名称之一。 它是最有效的机器学习库。 scikit 最好的部分是初学者可以发现它有效。 6 | 7 | 8 | 9 | ## 使用 Python 进行机器学习 10 | 11 | ### Scikit-Learn 简介 12 | 13 | 首先,该工具以前称为 scikit-learn,主要是一个免费的工具机器学习平台,专门用于 Python 编码语言。 该软件带有一系列分类,回归以及一堆算法,其中还包括支持向量机。 14 | 15 | 也有梯度增强,随机森林,DBSCAN,k-means。 其开发的主要目的是沿着编程编号以及 NumPy 和 Scipy 之类的技术库交换和使用数据。 如上所述,由 David Cournapeau 编写的 Google Summer of Code 项目以 scikit-learn 的形式引入了该机器学习平台。 16 | 17 | 该名称来源于基本概念,即该产品是“SciKit”或 SciPy Toolkit,这是 SciPy 的独特制造和提供的外部组件。 然后,其他编码人员再次编写了本机代码平台。 据说 scikit-learn 仍处于开发阶段。 18 | 19 | ![sklearn machine learning python](img/fd8e8017293a8080614eefedfdc5c6b2.jpg) 20 | 21 | ### Scikit 入门 22 | 23 | 开始执行时,该工具主要是使用 Python 准备的。 但是,某些核心算法是用 Cython 编码的,其主要目的是提高性能。 LIBSVM 上的 Cython 封面执行支持向量机。 另一方面,逻辑回归以及线性支持向量机是通过围绕 LIBLINEAR 的等效覆盖完成的。 24 | 25 | 26 | 最终,机器学习平台简单易用,使数据挖掘和分析变得简单。 每个人都可以使用该工具。 它可以在各个方面重复使用。 这个开源工具也可以用于商业目的。 它所需要的只是拥有 BSD 许可证。 在将本机数据集应用于机器学习后,就可以立即开始一个项目。 27 | 28 | ```py 29 | pip install sklearn 30 | 31 | ``` 32 | 33 | ### 应用 34 | 35 | 初级或初学者的 Python 机器学习过去很难。 但是,用户友好的机器学习平台 Scikit-learn 确实使事情变得更简单。 使用 scikit-learn 学习,以及进行任何类型的定制产品开发或用于 R&D 用途。 Scikit 附带了一系列模块和库,供初学者选择,从而提供了处理特定任务的多种方式。 在学习的同时,可以处理一个完整的项目。 36 | 37 | 作为工具的 Scikit 非常易于使用。 您可以简单地安装该工具并在初始阶段开始使用 Python 解释器。 特别是,该工具对于寻找小型端到端项目的初学者可能很有用。 38 | 39 | 尽管有各种版本的 Scikits 软件,但 Scikit-Learn 确实是用于机器学习 Python 的最先进且配备最完善的工具。 Scikit-Image 被认为是同等丰富的工具。 -------------------------------------------------------------------------------- /docs/126.md: -------------------------------------------------------------------------------- 1 | # 机器学习算法比较 2 | 3 | > 原文: [https://pythonbasics.org/machine-learning-algorithms-comparison/](https://pythonbasics.org/machine-learning-algorithms-comparison/) 4 | 5 | 人工智能(特别是机器学习)的创建是为了简化开发人员和程序员的工作。 6 | 7 | 不必编写很多代码,您必须在机器学习算法之间进行选择,然后再决定一种编程语言。 那可能很棘手。 8 | 9 | 10 | 11 | 为什么? 首先,有四种类型的机器学习算法。 12 | 13 | ## 机器学习算法 14 | 15 | ### 监督学习 16 | 17 | 监督学习基于**标记的训练数据**。 18 | 19 | 监督学习的基础是称为训练数据的数据和一组训练示例。 20 | 21 | 带标签的训练集具有预测其他对象上未知标签的特征。 22 | 23 | 它有两种类型: 24 | 25 | 1. 回归(如果标签是实数) 26 | 2. 分类(如果标签是有限且无序的)。 27 | 28 | ![supervised learning uses labeled training data](img/a00bd824aae90021b95e57c905444e0f.jpg) 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 | * **Logistic 回归**:执行二进制分类,因此标签输出为二进制。 它采用特征的线性组合,并对其应用非线性函数。 这是非线性分类器最简单的算法。 63 | 64 | * **决策树**:树枝和树叶可以挽救生命。 该算法是从观察到结论的预测模型。 真实的人可以使用决策树来做出决策,这使得它很容易理解。 最容易解释的通常用于组成随机森林或渐变增强。 65 | 66 | * **K-均值**:如果您的目标是根据对象的特征分配标签,但是您没有任何标签,则称为聚类任务,该算法可以实现这一任务。 但是,有多种聚类方法具有不同的优缺点,应该首先考虑一下。 67 | 68 | * **主成分分析(PCA)**:当您具有广泛的特征,彼此之间高度相关并且模型很容易适合大量数据时,可以应用它。 该算法在减少信息损失最小的情况下很好地减少了维数。 69 | 70 | * **神经网络**:每个特定任务都有许多不同的体系结构或一系列层/组件。 在处理图像时,神经网络是理想的选择。 他们的训练需要巨大的计算复杂性,但却提出了算法的新时代。 -------------------------------------------------------------------------------- /docs/127.md: -------------------------------------------------------------------------------- 1 | # 为什么要使用 Scikit-Learn? 2 | 3 | > 原文: [https://pythonbasics.org/why-use-scikit-learn/](https://pythonbasics.org/why-use-scikit-learn/) 4 | 5 | 为什么要使用 Scikit-learn 进行机器学习? 6 | 7 | 在讨论“为什么要被用作或推荐为 python 编程语言的最佳免费软件机器学习库之前,我们对 scikit-learn(**sklearn**)了解甚少,这一点很重要。 8 | 9 | 10 | 11 | ## Scikit-Learn 12 | 13 | ### 什么是 Scikit-Learn 14 | 15 | Sсіkіt-lеаrn(**sklearn**)是一种免费使用的机器学习模块。 这是用于数据分析和机器学习的简有效的工具。 因为它在 BSD 协议下发布,所以无论是出于商业目的还是出于商业目的,都可以使用它。 16 | 17 | 在 scikit-learn 中,用户可以执行不同类别的多种任务,例如模型选择,聚类,预处理和更多。 该模块提供了实现完整的手段。 18 | 19 | ### 为什么要学习 Scikit? 20 | 21 | 基于以下原因,我建议使用 scikit-learn 22 | 23 | **1\. 使用各种工具简单易学** 24 | 25 | Sсіkіt-lеаrn 提供了很多简单的,еаѕу到 lеаrnаlgоrіthmѕ是рrеttуmuсh 只有 rеԛuіrеуоurdаtа着 tоbеоrgаnіzеd 在 thеrіghtwауbеfоrе可以运行 _whаtеvеrсlаѕѕіfісаtіоn,rеgrеѕѕіоn,оr 集群аlgоrіthm 你 nееd[HTG1。_ 26 | 27 | 该系统中的реретерие可使数据的传输过程更加轻松。 28 | 29 | Scikit 学习有很多方法可以帮助您找到正确的变量和变量。 有了一项新的工作,一个新的数据科学家就可以在几分钟之内做出最准确的预测。 30 | 31 | **2、. 解决不同类型问题的能力** 32 | 33 | Scikit-learn 可以用于机器学习中三种不同的问题,即监督学习,无监督学习和强化学习(AlрhаGо)。 34 | 35 | 无监督学习的情况下,其数据集中就没有“您”的踪影。降维和聚类是两个例子。 36 | 37 | Scikit-learn 具有主成分分析的不同实现(例如`SparsePCA`,`KerrnlPCA`和`IncrementalPCA`等)。 38 | 39 | 监督学习涵盖的问题包括垃圾邮件检测,租金预测等等,在这些问题中,数据集展示了 y 标签。例如线性回归,随机森林,adaboost 等的模型已在 Sklearn 中实现。 40 | 41 | **3\. 主动和开源** 42 | 43 | Sklearn 是一种非常活跃的解决方案,它可以极大地简化您的工作。 通常是通过 Sроtіfу,booking.com 和其他网站来进行搜索。 44 | 45 | 这是因为,任何人都可以确保自己的完整性,但是从我合并后的经验中,我可以告诉您很多。让我们告诉您- 46 | 47 | 所有的原因都至少有两个方面引起了争议。 每个代码都经过多次验证。 尽管这可以解决所有问题,但必须确保 Sklearn 在所有情况下都具有其过时的标准。 48 | 49 | 您不必一夜之间就建立起了一个“最原始的来源”之类的链接! 50 | 51 | ![sklearn, scikit-learn, a machine learning module for python](img/5d99d2bfbe94d99072e9460d40821ee1.jpg) 52 | 53 | 4\. 有助于高度不平衡的疾病的检测 54 | 55 | Scikit-learn 还可以通过诸如 EllipticEnvelope 和 OnSclsSVM 等多种工具在高度不平衡的数据中(99.9% 到 0.1% 的欺诈检测中)提供帮助。 56 | 57 | 在这方面,在较大的尺寸范围内,具有较大性能的 Riso 隔离森林算法尤其适用。 58 | 59 | Scikit-learn 实际上是最好的选择。 -------------------------------------------------------------------------------- /docs/129.md: -------------------------------------------------------------------------------- 1 | # 机器学习分类器 2 | 3 | > 原文: [https://pythonbasics.org/machine-learning-classifier/](https://pythonbasics.org/machine-learning-classifier/) 4 | 5 | 分类是机器学习任务之一。 那么什么是分类呢? 6 | 您一直都在对数据进行分类。 7 | 8 | 看看任何物体,您将立即知道它属于哪个类:它是杯子,桌子还是椅子。这是分类的任务,计算机可以执行此操作(基于数据)。 9 | 10 | 本文是面向初学者的机器学习。 让我们做第一个机器学习程序 11 | 12 | 13 | 14 | ## 监督机器学习 15 | 16 | ### 训练数据 17 | 18 | 导入机器学习模块`sklearn`。 (受监督)机器学习算法使用示例或训练数据。 训练阶段是机器学习算法的第一步。 19 | 20 | **由于使用示例数据,因此请首先收集数据**。像一组苹果和桔子的图像,并记下了特征。 21 | 22 | **特征可用于区分两个类别**。特征是一种属性,例如颜色,形状或重量。 它可以表示为数值。 23 | 24 | 关键任务之一是从训练数据中获得良好的特征。 写下每个图像的类别。 类别是类,对于苹果,您可以选择 0 类,对于橘子,您可以采用 1 类。 25 | 26 | 您可以根据需要设置任意多个类,但是在此示例中,我们将使用 2 个类(苹果和橘子)。 27 | 28 | ![machine learning training data for classifier](img/032fd8512b1b4b91c77d473d11e46b59.jpg) 29 | 30 | 水平写入特征,该线代表第一张图像。 31 | 32 | 因此,这称为特征向量。 这组数字代表图像。 33 | 34 | ### 分类器 35 | 36 | 在训练阶段之后,分类器**可以做出预测**。给定一个新的特征向量,该图像是苹果还是桔子? 37 | 38 | 分类算法有多种类型,其中一种是决策树。 39 | 40 | 如果您有新数据,则算法可以确定新数据属于哪个类。苹果的输出为`[0]`,橙色的输出为`[1]`。 41 | 42 | 所以这是新数据,然后我们简单地使算法进行预测。 43 | 44 | ```py 45 | from sklearn import tree 46 | 47 | features = [[0,50],[0,60],[1,35],[1,36],[1,40]] 48 | labels = [0,0,1,1,1] 49 | 50 | algorithm = tree.DecisionTreeClassifier() 51 | algorithm = algorithm.fit(features, labels) 52 | 53 | newData = [[0,51]] 54 | print(algorithm.predict(newData)) 55 | 56 | ``` 57 | 58 | ### 过拟合和欠拟合 59 | 60 | 通常,训练数据越多,分类器就越好。如果您的训练数据很少(不及),那么您将没有好的预测。 61 | 62 | 因此,总的来说,随着更多数据它变得更加准确。 但是有一个限制,那就是过拟合。 63 | 64 | [下载示例和练习](https://gum.co/MnRYU) -------------------------------------------------------------------------------- /docs/13.md: -------------------------------------------------------------------------------- 1 | # 分割 2 | 3 | > 原文: [https://pythonbasics.org/split/](https://pythonbasics.org/split/) 4 | 5 | 可以使用`split(param)`方法将字符串拆分为子字符串。 此方法是字符串对象的一部分。 该参数是可选的,但是您可以分割特定的字符串或字符。 6 | 7 | 给定一个句子,可以将字符串拆分为单词。 如果您有一个段落,则可以按短语拆分。 如果您有一个单词,可以将其拆分为单个字符。 8 | 9 | 在大多数情况下,`split()`方法可以。 对于字符,可以使用列表方法。 10 | 11 | 12 | 13 | ## 字符串分割 14 | 15 | 如果您有一个字符串,则可以将其细分为几个字符串。 该字符串需要至少有一个分隔符,可以是一个空格。 16 | 17 | 默认情况下,`split`方法将使用空格作为分隔符。 调用该方法将返回所有子字符串的列表。 18 | 19 | ### 字符串到单词 20 | 21 | 下面的演示将字符串拆分为字符。 22 | 23 | ```py 24 | s = "Its to easy" 25 | words = s.split() 26 | print(words) 27 | 28 | ``` 29 | 30 | `len()`方法将为您提供字符数和单词数: 31 | 32 | ```py 33 | print(len(words)) 34 | print(len(s)) 35 | 36 | ``` 37 | 38 | 输出应类似于下图: 39 | 40 | ![string split](img/f242bcf3542f9154b1000948515ae8d0.jpg) 41 | 42 | ### 字符串到字符 43 | 44 | 如果要将单词拆分为字符,请改用`list()`方法: 45 | 46 | ```py 47 | word = "Easy" 48 | x = list(word) 49 | print(x) 50 | 51 | ``` 52 | 53 | 可以使用[`join`](https://pythonbasics.org/join/)方法重构字符串,该方法将序列组合为新字符串。 54 | 55 | ### 练习 56 | 57 | 1. 字符串可以拆分为多个字符吗? 58 | 2. 您可以将一个字符串拆分为这个字符串吗?:世界,地球,美国,加拿大 59 | 3. 给定一篇文章,您可以根据短语拆分它吗? 60 | 61 | [下载示例](https://gum.co/dcsp) -------------------------------------------------------------------------------- /docs/130.md: -------------------------------------------------------------------------------- 1 | # 机器学习回归 2 | 3 | > 原文: [https://pythonbasics.org/machine-learning-regression/](https://pythonbasics.org/machine-learning-regression/) 4 | 5 | 线性回归算法可预测连续值(例如价格,温度)。这是针对初学者的机器学习算法系列中的另一篇文章。这是一种有监督的学习算法,您需要收集训练数据才能使其工作。 6 | 7 | 8 | 9 | ## 线性回归 10 | 11 | ### 简介 12 | 13 | 分类输出只能是离散值。 可以有`[0]`,`[1]`,`[2]`等。如果要输出价格或其他连续值怎么办? 14 | 15 | 然后,您使用回归算法。 16 | 17 | 假设您要根据特征预测房价。 收集数据是 18 | 的第一步。 特征可能是房间数量,以 m^2 为单位的面积,邻里质量等。 19 | 20 | ![linear regression training data](img/79a66fc75d419b006ca2189da2f75d08.jpg) 21 | 22 | ### 示例 23 | 24 | 写下特征:`#area_m2`。对于我们的示例代码,如下所示。 25 | 26 | ```py 27 | from sklearn.linear_model import LinearRegression 28 | 29 | X = [[4], [8], [12], [16], [18]] 30 | y = [[40000], [80000], [100000], [120000], [150000]] 31 | 32 | model = LinearRegression() 33 | model.fit(X,y) 34 | 35 | # predict 36 | rooms = 11 37 | prediction = model.predict([[rooms]]) 38 | print('Price prediction: $%.2f' % prediction) 39 | 40 | ``` 41 | 42 | 然后,您可以根据该数据创建绘图(如果需要)。您看到面积与价格之间存在相关性。 43 | 44 | 这是线性关系。您可以使用线性回归算法预测价格。 45 | 46 | ### 解释 47 | 48 | 首先,从学习的过程中导入线性回归算法,然后定义训练数据`X`和`Y`,其中`x`是面积,`y`是价格。 49 | 50 | ```py 51 | model = LinearRegression() 52 | model.fit(X,y) 53 | 54 | ``` 55 | 56 | 线性回归算法由于存在线性关系,因此我们使用训练数据来训练算法。 57 | 58 | 现在已经对算法进行了训练,您可以使用该区域进行预测了。一个新示例,可以为您预测价格。 59 | 60 | ```py 61 | rooms = 11 62 | prediction = model.predict([[rooms]]) 63 | print('Price prediction: $%.2f' % prediction) 64 | 65 | ``` 66 | 67 | 仅当数据集中存在线性关系时,算法`LinearRegression`才有效。如果没有,则需要多项式算法。 68 | 69 | 绘图以确认存在线性关系。 70 | 71 | [下载示例和练习](https://gum.co/MnRYU) -------------------------------------------------------------------------------- /docs/131.md: -------------------------------------------------------------------------------- 1 | # Python 中的多项式回归 2 | 3 | > 原文: [https://pythonbasics.org/polynomial-regression-in-python/](https://pythonbasics.org/polynomial-regression-in-python/) 4 | 5 | 多项式回归可能非常有用。 X 和 Y 之间并不总是存在线性关系。有时,该关系是指数级或 N 阶。 6 | 7 | 8 | 9 | ## 回归 10 | 11 | ### 多项式回归 12 | 13 | 您可以绘制 X 和 Y 之间的多项式关系。如果没有线性关系,则可能需要多项式。 与线性关系不同,多项式可以更好地拟合数据。 14 | 15 | ![polynomial regression in python](img/5c749f6c8613fd4c994678694ca1e07b.jpg) 16 | 17 | 您只需一行代码即可创建此多项式行。 18 | 19 | ```py 20 | poly_fit = np.poly1d(np.polyfit(X,Y, 2)) 21 | 22 | ``` 23 | 24 | 那将训练算法并使用二阶多项式。 25 | 训练后,您可以使用一个新示例通过调用`polyfit`来预测值。 然后它将输出一个连续值。 26 | 27 | ### 示例 28 | 29 | 下面的示例在收集到的数据上方绘制了一条多项式线。 它训练算法,然后预测连续值。 30 | 31 | ```py 32 | import numpy as np 33 | import matplotlib.pyplot as plt 34 | 35 | X = [1, 5, 8, 10, 14, 18] 36 | Y = [1, 1, 10, 20, 45, 75] 37 | 38 | # Train Algorithm (Polynomial) 39 | degree = 2 40 | poly_fit = np.poly1d(np.polyfit(X,Y, degree)) 41 | 42 | # Plot data 43 | xx = np.linspace(0, 26, 100) 44 | plt.plot(xx, poly_fit(xx), c='r',linestyle='-') 45 | plt.title('Polynomial') 46 | plt.xlabel('X') 47 | plt.ylabel('Y') 48 | plt.axis([0, 25, 0, 100]) 49 | plt.grid(True) 50 | plt.scatter(X, Y) 51 | plt.show() 52 | 53 | # Predict price 54 | print( poly_fit(12) ) 55 | 56 | ``` 57 | 58 | ### 过拟合和欠拟合 59 | 60 | 切勿过拟合或欠拟合,这是很重要的,您想抓住这种关系但又不能完全遵循这些要点。 线性关系会欠拟合,而过拟合会选择程度高到可以拟合点的程度。 相反,您想要捕获关系。 61 | 62 | [下载示例和练习](https://gum.co/MnRYU) -------------------------------------------------------------------------------- /docs/137.md: -------------------------------------------------------------------------------- 1 | # Selenium -------------------------------------------------------------------------------- /docs/139.md: -------------------------------------------------------------------------------- 1 | # Selenium Cookie 2 | 3 | > 原文: [https://pythonbasics.org/selenium_cookies/](https://pythonbasics.org/selenium_cookies/) 4 | 5 | Cookie 是 Web 服务器提供给 Web 浏览器的消息。 这使您的 Web 浏览器可以存储登录信息,用户名,购物车等信息。 网站需要在不同页面之间记住这一点,有时会使用 cookie。 6 | 7 | 在 Selenium 中,您可以使用`get_cookies()`和`add_cookie()`方法获取并设置 cookie。 8 | 9 | ### Selenium Cookie 10 | 11 | 下面的 Selenium cookie 代码获取站点 reddit 设置的所有 cookie。 12 | 13 | ```py 14 | # -*- coding: utf-8 -*- 15 | from selenium import webdriver 16 | import time 17 | 18 | browser=webdriver.Firefox() 19 | browser.get("https://reddit.com") 20 | cookies = browser.get_cookies() 21 | for cookie in cookies: 22 | print(cookie) 23 | 24 | browser.quit() 25 | 26 | ``` 27 | 28 | ![selenium cookies](img/286f2e902c088e653e8b3c290ba073d3.jpg) 29 | 30 | ### Selenium 添加删除 cookie 31 | 32 | 下面的 Selenium 代码获取 cookie,然后添加一个新 cookie,再次获取它们(显示),最后将其删除。 33 | 34 | ```py 35 | # -*- coding: utf-8 -*- 36 | from selenium import webdriver 37 | import time 38 | 39 | browser=webdriver.Firefox() 40 | browser.get("https://reddit.com") 41 | print(browser.get_cookies()) 42 | browser.add_cookie({"name":"python","domain":"reddit.com","value":"python"}) 43 | print(browser.get_cookies()) 44 | browser.delete_all_cookies() 45 | print(browser.get_cookies()) 46 | browser.close() 47 | 48 | ``` 49 | 50 | ![selenium add delete cookies](img/9f42c9b17efc8d19906b7716ba8f8db7.jpg) 51 | 52 | [下载示例](https://gum.co/GjuJxo) -------------------------------------------------------------------------------- /docs/14.md: -------------------------------------------------------------------------------- 1 | # 随机数 2 | 3 | > 原文: [https://pythonbasics.org/random-numbers/](https://pythonbasics.org/random-numbers/) 4 | 5 | 名为`random`的模块可用于在 Python 中生成随机数。 要使用模块,您需要输入`import module`。 这会将所有函数加载到模块内部。 6 | 7 | 请记住,带有随机模块的随机数是伪随机数。 对于大多数程序来说,这很好。 8 | 9 | 10 | 11 | ## 随机 12 | 13 | ### 随机模块 14 | 15 | 要使用 Python 代码创建随机数,您可以使用`random`模块。 要使用它,只需键入: 16 | 17 | ```py 18 | import random 19 | 20 | ``` 21 | 22 | 这个模块有几个函数,最重要的一个就是命名为`random()`。`random()`函数生成介于 0 和 1 之间的浮点数 `[0.0, 1.0]`。 23 | 24 | 随机模块具有伪随机数生成器,这意味着它们并不是真正的随机数。 25 | 26 | ### 生成随机数 27 | 28 | 本示例创建几个随机数。键入下面显示的程序并运行它: 29 | 30 | ```py 31 | import random 32 | 33 | # Create a random floating point number and print it. 34 | print(random.random()) 35 | 36 | # pick a random whole number between 0 and 10. 37 | print(random.randrange(0,10)) 38 | 39 | # pick a random floating point number between 0 and 10. 40 | print(random.uniform(0,10)) 41 | 42 | ``` 43 | 44 | 在所有情况下,我们都使用随机模块。 生成几个随机数。 45 | 46 | 如果要在 1 到 10 之间的随机浮点,可以使用以下技巧: 47 | 48 | ```py 49 | import random 50 | 51 | x = random.uniform(1, 10) 52 | print(x) 53 | 54 | ``` 55 | 56 | 对于随机整数,将其设置为整数或使用`randrange`函数。 57 | 58 | ## 练习 59 | 60 | 试试下面的练习 61 | 62 | 1. 编写一个创建随机数并将其存储到`x`的程序。 63 | 2. 制作一个打印 3 个随机数的程序。 64 | 3. 创建一个程序,该程序生成 100 个随机数并找到每个数字的频率。 65 | 66 | 完成这些步骤后,继续下一个练习。 67 | 68 | [下载示例](https://gum.co/dcsp) -------------------------------------------------------------------------------- /docs/140.md: -------------------------------------------------------------------------------- 1 | # Selenium 执行 JavaScript 2 | 3 | > 原文: [https://pythonbasics.org/selenium_execute_javascript/](https://pythonbasics.org/selenium_execute_javascript/) 4 | 5 | Selenium Webdriver 可以执行 Javascript。 加载页面后,您可以执行所需的任何 JavaScript。 必须安装 Web 驱动程序,Selenium 才能工作。 6 | 7 | 只需调用方法`execute_script(js)`,其中 js 是您的 JavaScript 代码。 8 | 9 | 10 | ## javascript 11 | 12 | ### Selenium 执行 javascript 13 | 14 | 加载页面后,下面的程序将运行一行 javascript 命令。 这将在网页中显示警报框。 15 | 16 | ```py 17 | from selenium import webdriver 18 | 19 | driver=webdriver.Firefox() 20 | driver.implicitly_wait(3) 21 | driver.get("https://pythonbasics.org") 22 | js = 'alert("Hello World")' 23 | driver.execute_script(js) 24 | 25 | ``` 26 | 27 | ![selenium execute javascript](img/d64bb0b04092fe87118d67e850135a32.jpg) 28 | 29 | [下载示例](https://gum.co/GjuJxo) -------------------------------------------------------------------------------- /docs/141.md: -------------------------------------------------------------------------------- 1 | # Selenium 按 ID 查找元素 2 | 3 | > 原文: [https://pythonbasics.org/selenium_find_element/](https://pythonbasics.org/selenium_find_element/) 4 | 5 | 网页元素可以通过其 ID 来实现。 这是在带有 Selenium 的网页上选择元素的方法之一。 6 | 7 | 您必须具有可通过开发人员工具获得的元素 ID。 您也可以使用 id 或 css 选择网页元素。 8 | 9 | ## 查找元素 10 | 11 | ### Selenium 按 ID 查找元素 12 | 13 | Selenium 代码使用`find_element`和 ID 来选择搜索框。 然后,它在搜索框中键入一条消息。 14 | 15 | ```py 16 | #_*_coding: utf-8_*_ 17 | 18 | from selenium import webdriver 19 | from selenium.webdriver.common.by import By 20 | import time 21 | 22 | browser=webdriver.Firefox() 23 | browser.get("https://wiki.ubuntu.com") 24 | element=browser.find_element(By.ID,"searchinput") 25 | element.send_keys("typing") 26 | print(element) 27 | time.sleep(3) 28 | browser.close() 29 | 30 | ``` 31 | 32 | ![selenium find element by id](img/9afc0d0e17e26be6930a6d0bdba3f350.jpg) 33 | 34 | ### Selenium 查找列表项目 35 | 36 | 下面的 Python 代码使用 selenium 在网页上查找列表项`li`。 37 | 38 | ```py 39 | from selenium import webdriver 40 | from selenium.webdriver.common.by import By 41 | 42 | driver = webdriver.Firefox() 43 | driver.get("https://selenium-python.readthedocs.io/locating-elements.html") 44 | 45 | items = driver.find_elements(By.XPATH, '//li') 46 | for item in items: 47 | print(item.text) 48 | 49 | ``` 50 | 51 | ![selenium find list items](img/53c0a3ad6e436f624fdb6710b8f2560a.jpg) 52 | 53 | ### Selenium 按名称查找元素 54 | 55 | Selenium 可以按名称而不是代码查找元素。 这样完成: 56 | 57 | ```py 58 | #_*_coding: utf-8_*_ 59 | 60 | from selenium import webdriver 61 | from selenium.webdriver.common.by import By 62 | import time 63 | 64 | browser=webdriver.Firefox() 65 | browser.get("https://stackoverflow.com") 66 | element = browser.find_element_by_name("q") 67 | element.send_keys("typing") 68 | print(element) 69 | time.sleep(3) 70 | browser.close() 71 | 72 | ``` 73 | 74 | ![selenium find element by name](img/da14970297111ba7950c50388c6f1db1.jpg) -------------------------------------------------------------------------------- /docs/142.md: -------------------------------------------------------------------------------- 1 | # Selenium 无头 Firefox 2 | 3 | > 原文: [https://pythonbasics.org/selenium_firefox_headless/](https://pythonbasics.org/selenium_firefox_headless/) 4 | 5 | 无头浏览器是没有用户界面的 Web 浏览器。 如果您想启动网络浏览器来执行任务,但又不想或不需要查看它,那就很好了。 6 | 7 | 您可以使用 Firefox 或 Chrome 之类的 GUI 浏览器。 然后将其设置为无头模式。 无论如何,都需要安装 Web 驱动程序。 8 | 9 | ## Selenium 10 | 11 | ### Selenium 无头 Firefox 12 | 13 | 下面的代码启动 Firefox,但处于无头模式。 它可以执行 Firefox 可以执行的任何操作,但是在屏幕上将不可见。 下面的屏幕截图输出了网页的 html 代码,但这是可选的。 14 | 15 | ```py 16 | from selenium import webdriver 17 | 18 | try: 19 | fireFoxOptions = webdriver.FirefoxOptions() 20 | fireFoxOptions.set_headless() 21 | brower = webdriver.Firefox(firefox_options=fireFoxOptions) 22 | 23 | brower.get('https://pythonbasics.org') 24 | print(brower.page_source) 25 | finally: 26 | try: 27 | brower.close() 28 | except: 29 | pass 30 | 31 | ``` 32 | 33 | ![selenium firefox headless](img/e09bbb4accc7a5986de59b3f2e563d16.jpg) 34 | 35 | [下载示例](https://gum.co/GjuJxo) -------------------------------------------------------------------------------- /docs/143.md: -------------------------------------------------------------------------------- 1 | # Selenium Firefox 2 | 3 | > 原文: [https://pythonbasics.org/selenium_firefox/](https://pythonbasics.org/selenium_firefox/) 4 | 5 | Firefox 可以由 Python 控制。 为此,您需要 Selenium 模块和 Web 驱动程序。 Python 代码启动 Web 浏览器,然后完全控制它。 6 | 7 | 然后,该代码可以执行您在网络浏览器中可以执行的任何操作,例如打开页面,发送按键或单击按钮。 8 | 9 | 10 | ## firefox 11 | 12 | ### Selenium Firefox 13 | 14 | 看一下 Selenium Firefox 代码。 首先导入 webdriver,然后使其启动 firefox。 15 | 打开并获取页面,并可以选择“发送”按钮。 16 | 17 | ```py 18 | # coding=utf-8 19 | from selenium import webdriver 20 | 21 | driver = webdriver.Firefox() 22 | driver.get("https://dev.to") 23 | 24 | driver.find_element_by_id("nav-search").send_keys("Selenium") 25 | 26 | ``` 27 | 28 | ![selenium firefox](img/b8fbe36ec9fbec5e52c7ce05781b4742.jpg) 29 | 30 | [下载示例](https://gum.co/GjuJxo) -------------------------------------------------------------------------------- /docs/144.md: -------------------------------------------------------------------------------- 1 | # Selenium 获取 HTML 2 | 3 | > 原文: [https://pythonbasics.org/selenium_get_html/](https://pythonbasics.org/selenium_get_html/) 4 | 5 | Selenium 是用于浏览器自动化的 Python 模块。 您可以使用它来抓取 html 代码,该网页由什么构成:超文本标记语言(HTML)。 6 | 7 | 要获取它,首先启动 Web 浏览器并加载页面。 然后,您可以获取它。 为此,必须安装 Web 驱动程序。 8 | 9 | 10 | ## 获取 html 11 | 12 | ### Selenium 获取 html 13 | 14 | 下面的代码启动 Firefox Web rbowser,使用`get()`方法打开一个网页,最后使用`browser.page_source`存储该网页 html。 15 | 16 | ```py 17 | #_*_coding: utf-8_*_ 18 | 19 | from selenium import webdriver 20 | import time 21 | 22 | # start web browser 23 | browser=webdriver.Firefox() 24 | 25 | # get source code 26 | browser.get("https://en.wikipedia.org") 27 | html = browser.page_source 28 | time.sleep(2) 29 | print(html) 30 | 31 | # close web browser 32 | browser.close() 33 | 34 | ``` 35 | 36 | ![selenium get html](img/b2c25ad5890802ea7ef9624d826e9b07.jpg) 37 | 38 | [下载示例](https://gum.co/GjuJxo) -------------------------------------------------------------------------------- /docs/145.md: -------------------------------------------------------------------------------- 1 | # Selenium 键盘 2 | 3 | > 原文: [https://pythonbasics.org/selenium_keyboard/](https://pythonbasics.org/selenium_keyboard/) 4 | 5 | Selenium Webdriver 可以在任何网页上输入按键或键入内容。 Selenium 是使网络浏览器自动化的 Python 模块。 6 | 7 | Selenium Webdriver 启动浏览器,浏览器加载网页,选择文本框和类型。 8 | 9 | 10 | ## 键盘 11 | 12 | ### Selenium 键盘 13 | 14 | 下面的 Selenium 键盘代码示例可以完成所有这些操作。 在此示例中,它在 Wikipedia 上进行了自动搜索,但是该原理可在任何站点上使用。 15 | 16 | ```py 17 | # -*- coding: utf-8 -*- 18 | from selenium import webdriver 19 | from selenium.webdriver.common.by import By 20 | from selenium.webdriver.common.keys import Keys 21 | from selenium.webdriver.support import expected_conditions as EC 22 | from selenium.webdriver.support.wait import WebDriverWait 23 | import time 24 | 25 | browser=webdriver.Firefox() 26 | try: 27 | browser.get("https://en.wikipedia.org") 28 | print(browser.title) 29 | input=browser.find_element_by_id("searchInput") 30 | input.send_keys("Python") 31 | input.send_keys(Keys.ENTER) 32 | wait=WebDriverWait(browser,10) 33 | wait.until(EC.presence_of_element_located((By.ID,"content"))) 34 | print(browser.title) 35 | #print(browser.get_cookies()) 36 | #print(browser.page_source) 37 | time.sleep(10) 38 | finally: 39 | browser.close() 40 | 41 | ``` 42 | 43 | ![selenium keyboard](img/4869e893634e8cbc70809a8a73699b79.jpg) 44 | 45 | [下载示例](https://gum.co/GjuJxo) -------------------------------------------------------------------------------- /docs/146.md: -------------------------------------------------------------------------------- 1 | # Selenium 最大化 2 | 3 | > 原文: [https://pythonbasics.org/selenium_maximize/](https://pythonbasics.org/selenium_maximize/) 4 | 5 | 通过 Python Selenium 最大化 Web 浏览器非常容易。 简而言之,您要做的就是启动浏览器并调用`maximum_window()`。 6 | 7 | (Selenium 是一个 Python 模块,使用 Web 驱动程序来为您控制 Web 浏览器) 8 | 9 | 10 | 11 | 12 | 13 | ## Selenium 14 | 15 | ### Selenium 最大化 16 | 17 | 首先导入 webdriver 和时间模块。 您需要安装 Selenium Web 驱动程序。 然后使用`webdriver.Firefox()`打开 firefox,并使用`maximize_window().`调用最大化窗口 18 | 19 | ```py 20 | from selenium import webdriver 21 | import time 22 | 23 | driver = webdriver.Firefox() 24 | driver.maximize_window() 25 | time.sleep(5) 26 | 27 | driver.get("https://www.python.org") 28 | 29 | ``` 30 | 31 | ![selenium maximize](img/52e206bcc9cfbd565d1bfefbf8f6f304.jpg) 32 | 33 | [下载示例](https://gum.co/GjuJxo) -------------------------------------------------------------------------------- /docs/147.md: -------------------------------------------------------------------------------- 1 | # Selenium 截图 2 | 3 | > 原文: [https://pythonbasics.org/selenium_screenshot/](https://pythonbasics.org/selenium_screenshot/) 4 | 5 | 网页截图可以使用 Python Selenium 自动获取。 首先加载 Selenium 模块和时间模块。 您需要时间模块来等待页面加载完成。 6 | 7 | 然后,一旦页面加载完毕,请截屏。 这可以是 png 文件或其他图像格式。 然后关闭网络浏览器,否则它将保持打开状态。 8 | 9 | 10 | 11 | 12 | 13 | ## Selenium 截图 14 | 15 | ### 示例 16 | 17 | 您可以使用`get_screenshot_as_file()`方法拍摄网页的屏幕快照,并以文件名作为参数。 18 | 19 | 下面的程序使用 firefox 加载网页并截图,但是任何 Web 浏览器都可以。 20 | 21 | ```py 22 | from selenium import webdriver 23 | from time import sleep 24 | 25 | driver = webdriver.Firefox() 26 | driver.get('https://www.python.org') 27 | sleep(1) 28 | 29 | driver.get_screenshot_as_file("screenshot.png") 30 | driver.quit() 31 | print("end...") 32 | 33 | ``` 34 | 35 | 屏幕快照图像将与 Python 脚本存储在同一目录中。 除非您明确定义必须存储屏幕快照的路径。 36 | 37 | ![selenium screenshot](img/1285ee716e5081490276503fda01f306.jpg) 38 | 39 | [下载示例](https://gum.co/GjuJxo) -------------------------------------------------------------------------------- /docs/148.md: -------------------------------------------------------------------------------- 1 | # Selenium 向下滚动 2 | 3 | > 原文: [https://pythonbasics.org/selenium_scroll_down/](https://pythonbasics.org/selenium_scroll_down/) 4 | 5 | 您是否希望 Selenium 浏览器滚动到页面末尾? 您可以使用代码,确切地说是 javascript 代码。 6 | 7 | 加载网页后,您可能需要向下滚动。您可以向下滚动特定数量或一直向下滚动到底部。 8 | 9 | 10 | 11 | 12 | 13 | ## Selenium 向下滚动 14 | 15 | ### 示例 16 | 17 | Selenium 向下滚动代码如下所示。 它使用 javascript 校准方法`execute_script()`,以滚动到网页的末尾。 18 | 19 | ```py 20 | #_*_coding: utf-8_*_ 21 | from selenium import webdriver 22 | import time 23 | 24 | browser=webdriver.Firefox() 25 | browser.get("https://en.wikipedia.org") 26 | browser.execute_script("window.scrollTo(0,document.body.scrollHeight)") 27 | time.sleep(3) 28 | browser.close() 29 | 30 | ``` 31 | 32 | ![selenium scroll down](img/cc85ee1c6b20cf7ff6a49745c13a142d.jpg) 33 | 34 | [下载示例](https://gum.co/GjuJxo) -------------------------------------------------------------------------------- /docs/149.md: -------------------------------------------------------------------------------- 1 | # Selenium 切换到窗口 2 | 3 | > 原文: [https://pythonbasics.org/selenium_switch_to_window/](https://pythonbasics.org/selenium_switch_to_window/) 4 | 5 | 也可以从 Python 代码切换窗口或选项卡。 下面的示例使用 selenium 模块和 Web 驱动程序。 6 | 7 | 这应该适用于所有受支持的 Web 浏览器,包括 Chrome,Firefox,IE 和所有其他浏览器。 8 | 9 | ## 切换到窗口 10 | 11 | ### Selenium 切换到窗口 12 | 13 | Selenium 切换到如下所示的窗口代码。 它会启动 Firefox,打开一个网页,然后打开一个包含不同网站的新标签页和窗口。 14 | 15 | ```py 16 | # -*- coding: utf-8 -*- 17 | from selenium import webdriver 18 | import time 19 | 20 | browser=webdriver.Firefox() 21 | browser.get("https://www.reddit.com") 22 | browser.execute_script("window.open()") 23 | print(browser.window_handles) 24 | browser.switch_to_window(browser.window_handles[1]) 25 | browser.get("https://www.youtube.com") 26 | time.sleep(1) 27 | browser.switch_to_window(browser.window_handles[0]) 28 | browser.get("https://python.org") 29 | #browser.close() 30 | 31 | ``` 32 | 33 | ![selenium switch to window](img/8ea20cca971f6e3ac9aa58f3758e579b.jpg) 34 | 35 | [下载示例](https://gum.co/GjuJxo) -------------------------------------------------------------------------------- /docs/15.md: -------------------------------------------------------------------------------- 1 | # 键盘输入 2 | 3 | > 原文: [https://pythonbasics.org/keyboard-input/](https://pythonbasics.org/keyboard-input/) 4 | 5 | 在 Python 和许多其他编程语言中,您可以获取用户输入。 不用担心,您不需要编写键盘驱动程序。 6 | 7 | `input()`函数将要求用户输入键盘。 如果您仍在使用 Python 2,则可以使用`raw_input()`函数。 8 | 9 | 10 | 11 | ## 示例 12 | 13 | 如果指定了参数,则输入函数会提示文本。 该函数从键盘读取输入,将其转换为字符串并删除换行符(`Enter`)。 14 | 15 | 输入以下脚本并进行尝试(另存为`key.py`) 16 | 17 | ```py 18 | #!/usr/bin/env python3 19 | 20 | name = input('What is your name? ') 21 | print('Hello ' + name) 22 | 23 | job = input('What is your job? ') 24 | print('Your job is ' + job) 25 | 26 | num = input('Give me a number? ') 27 | print('You said: ' + str(num)) 28 | 29 | ``` 30 | 31 | 输出应该是这样的,具体取决于您的终端: 32 | 33 | ![keyboard input](img/7b5684cef5f31682794e97f444fc887c.jpg) 34 | 35 | 在阅读本文时,也许您已经习惯了语音输入或其他类型的人机交互。 无论哪种键盘输入对于编码仍然非常有用。 36 | 37 | ## 练习 38 | 39 | 试试这些练习: 40 | 41 | 1. 编写一个询问电话号码的程序。 42 | 2. 编写一个程序,询问用户首选的编程语言。 43 | 44 | 完成这些步骤后,继续下一个练习。 45 | 46 | [下载示例](https://gum.co/dcsp) -------------------------------------------------------------------------------- /docs/150.md: -------------------------------------------------------------------------------- 1 | # Selenium 等待页面加载 2 | 3 | > 原文: [https://pythonbasics.org/selenium_wait_for_page_to_load/](https://pythonbasics.org/selenium_wait_for_page_to_load/) 4 | 5 | 等待页面加载 Python Selenium。 在本文中,您将学习如何做到这一点。 这有点违反直觉。 6 | 7 | Selenium 可让您自动执行浏览器,但不需要`time.sleep`即可等待页面加载完成。 实际上,它的工作方式与您预期的不同。 8 | 9 | 10 | ## 示例 11 | 12 | ### Selenium 等待页面加载 13 | 14 | 下面的代码块向您展示了如何等待页面加载完成。 它使用超时。 它等待元素显示在页面上(您需要一个元素 ID)。 15 | 16 | 然后,如果页面已加载,则显示页面已加载。 如果超过了超时时间(以秒为单位),它将显示超时错误。 17 | 18 | ```py 19 | from selenium import webdriver 20 | from selenium.common.exceptions import TimeoutException 21 | from selenium.webdriver.support.ui import WebDriverWait 22 | from selenium.webdriver.support import expected_conditions as EC 23 | from selenium.webdriver.common.by import By 24 | 25 | driver = webdriver.Firefox() 26 | driver.get('https://pythonbasics.org') 27 | timeout = 3 28 | try: 29 | element_present = EC.presence_of_element_located((By.ID, 'main')) 30 | WebDriverWait(driver, timeout).until(element_present) 31 | except TimeoutException: 32 | print("Timed out waiting for page to load") 33 | finally: 34 | print("Page loaded") 35 | 36 | ``` 37 | 38 | ![selenium wait for page to load](img/e14e2b651fb04237b78720db22bca94f.jpg) 39 | 40 | [下载示例](https://gum.co/GjuJxo) -------------------------------------------------------------------------------- /docs/151.md: -------------------------------------------------------------------------------- 1 | # Flask 教程 -------------------------------------------------------------------------------- /docs/16.md: -------------------------------------------------------------------------------- 1 | # 控制结构 -------------------------------------------------------------------------------- /docs/17.md: -------------------------------------------------------------------------------- 1 | # `if`语句 2 | 3 | > 原文: [https://pythonbasics.org/if-statements/](https://pythonbasics.org/if-statements/) 4 | 5 | 程序有时可能不得不做出选择。 这些选择可以根据特定条件执行不同的代码。 在 Python 中, `if`语句用于条件执行。 6 | 7 | `if`语句可以与某些运算符组合,例如等于(`==`),大于(`>=`),小于(`<=`)且不等于(`!=`)。 可以使用关键字`or`以及`and`组合条件。 8 | 9 | 10 | 11 | ## 示例 12 | 13 | 在下面的示例中,我们显示了`if`语句的用法。复制以下程序并运行。 14 | 15 | ```py 16 | #!/usr/bin/env python3 17 | 18 | gender = input("Gender? ") 19 | if gender == "male" or gender == "Male": 20 | print("Your cat is male") 21 | else: 22 | print("Your cat is female") 23 | 24 | age = int(input("Age of your cat? ")) 25 | if age < 5: 26 | print("Your cat is young.") 27 | else: 28 | print("Your cat is adult.") 29 | 30 | ``` 31 | 32 | `if`语句的直观示例(单击放大): 33 | 34 | ![if statement](img/db1c79c7582f54416959b6cc7e0acfaa.jpg) 35 | 36 | ## 练习 37 | 38 | 做这些练习: 39 | 40 | 1. 编写一个程序,请求 1 到 10 之间的数字。如果该数字超出范围,则程序应显示“无效数字”。 41 | 42 | 2. 制作一个请求密码的程序。 43 | 44 | 完成后,继续下一个练习。 45 | 46 | [下载示例](https://gum.co/dcsp) -------------------------------------------------------------------------------- /docs/18.md: -------------------------------------------------------------------------------- 1 | # `for`循环 2 | 3 | > 原文: [https://pythonbasics.org/for-loops/](https://pythonbasics.org/for-loops/) 4 | 5 | 程序有时需要重复操作。 为了重复动作,我们可以使用`for`循环。在代码内部编写了一个`for`循环。`for`循环可以具有 1 个或多个指令。 6 | 7 | `for`循环将重复一个代码块。 重复进行直到满足停止条件为止。 如果不满足停止条件,它将无限循环。 8 | 9 | 重复(循环)这些指令,直到满足条件为止。 10 | 11 | 12 | 13 | ## 示例 14 | 15 | 在下面的练习中,我们将对列表的每个项目重复执行操作。 16 | 17 | 第一个循环将为列表的每个项目重复打印函数。 18 | 第二个循环将对列表`num`的每个元素进行计算并打印结果。 19 | 20 | 在下面输入代码并运行程序。 21 | 22 | ```py 23 | #!/usr/bin/env python3 24 | 25 | city = ['Tokyo','New York','Toronto','Hong Kong'] 26 | print('Cities loop:') 27 | for x in city: 28 | print('City: ' + x) 29 | 30 | print('\n') # newline 31 | 32 | num = [1,2,3,4,5,6,7,8,9] 33 | print('x^2 loop:') 34 | for x in num: 35 | y = x * x 36 | print(str(x) + '*' + str(x) + '=' + str(y)) 37 | 38 | ``` 39 | 40 | 将文件另存为`loopexample.py`,然后使用以下命令运行代码: 41 | 42 | ```py 43 | python loopexample.py 44 | 45 | ``` 46 | 47 | 示意地,`for`循环可以做到这一点: 48 | 49 | ![for loop](img/a6e17ee8ef9f4da192a098df4379de55.jpg) 50 | 51 | ## 练习 52 | 53 | 请尝试以下练习: 54 | 55 | 1. 制作一个列出列表中的国家/地区的程序 56 | 57 | ```py 58 | clist = ['Canada','USA','Mexico','Australia'] 59 | 60 | ``` 61 | 62 | 2. 创建一个从 0 到 100 的循环 63 | 3. 使用一个循环制作一个乘法表。 64 | 4. 使用一个循环向后输出数字 1 至 10。 65 | 5. 创建一个`for`循环,对直到 10 的所有偶数进行计数 66 | 6. 创建一个循环,将 100 和 200 之间的数字相加 67 | 68 | [下载示例](https://gum.co/dcsp) -------------------------------------------------------------------------------- /docs/19.md: -------------------------------------------------------------------------------- 1 | # `while`循环 2 | 3 | > 原文: [https://pythonbasics.org/while-loop/](https://pythonbasics.org/while-loop/) 4 | 5 | `while`循环重复执行代码,直到不满足条件为止。 与`for`循环不同,其中的迭代次数可能是未知的。`while `循环始终由条件和代码块组成。 6 | 7 | 与总是具有有限可数步数的`for`循环相反,`while`循环仅在条件为`false`时才结束。 8 | 9 | 10 | 11 | ## 示例 12 | 13 | ### `While`循环示例 14 | 15 | 下面的`while`循环定义了条件(`x < 10`),并重复指令直到该条件不成立。 输入此代码: 16 | 17 | ```py 18 | #!/usr/bin/python 19 | 20 | x = 3 21 | while x < 10: 22 | print(x) 23 | x = x + 1 24 | 25 | ``` 26 | 27 | 执行以下代码,直到不满足`x < 10`。与`for`循环不同,迭代器i在循环中增加。 28 | 29 | 保存然后使用您的 Python IDE 或从终端运行。 30 | 31 | ![while loop output](img/18d081183db7fd09fc0f1f26e70217ce.jpg) 32 | 33 | 您也可以创建无限循环,这是条件永远不变的时候。 34 | 35 | ```py 36 | while True: 37 | print('Forever') 38 | 39 | ``` 40 | 41 | 在正常情况下,您希望程序在某个时候退出`while`循环。 如果条件发生变化,程序将自动退出`while`循环。 大多数情况下,这是通过迭代器完成的,但也可以通过布尔值(开关)来完成。 42 | 43 | ### 控制流程图 44 | 45 | 示意性地,`while`循环如下图所示。 这称为控制流程图(`cfg`)。 进入`while`循环时发生情况的直观方式。 46 | 47 | 应该注意的是,`while`循环中可以有多个语句。 如果代码变得很长,您还可以从循环内部调用函数。 48 | 49 | ![while loop](img/81a0de4a1d5d8968f59be757e89c6d21.jpg) 50 | 51 | ## 练习 52 | 53 | 请尝试以下练习: 54 | 55 | 1. 编写一个程序,使用`while`循环列出下面的国家/地区。 56 | 57 | ```py 58 | clist = ["Canada","USA","Mexico"] 59 | 60 | ``` 61 | 62 | 2. `while`循环和`for`循环有什么区别? 63 | 3. 您可以在`while`循环中对数字求和吗? 64 | 4. 可以在`while`循环内使用`for`循环吗? 65 | 66 | [下载示例](https://gum.co/dcsp) -------------------------------------------------------------------------------- /docs/2.md: -------------------------------------------------------------------------------- 1 | # 介绍 -------------------------------------------------------------------------------- /docs/20.md: -------------------------------------------------------------------------------- 1 | # 数据与操作 -------------------------------------------------------------------------------- /docs/21.md: -------------------------------------------------------------------------------- 1 | # 函数 2 | 3 | > 原文: [https://pythonbasics.org/functions/](https://pythonbasics.org/functions/) 4 | 5 | 要对代码集进行分组,可以使用函数。 函数是可重复代码的一小部分。一个函数接受参数。 6 | 7 | 没有函数,我们只有一长串指令。 函数可以帮助您组织代码。 函数也可以重用,通常它们包含在模块中。 8 | 9 | 10 | 11 | ## 示例 12 | 13 | ### 函数 14 | 15 | 函数可以看作是可执行代码块。 一个函数可以使用一次或多次。 16 | 17 | 一个简单的函数示例是: 18 | 19 | ```py 20 | def currentYear(): 21 | print('2018') 22 | 23 | currentYear() 24 | 25 | ``` 26 | 27 | 在此示例中,将立即调用该函数。 函数定义始终以`def`关键字开头。 28 | 29 | 函数可以重用,一旦创建一个函数就可以在多个程序中使用。 打印函数就是一个例子。 30 | 31 | ### 具有参数的函数 32 | 33 | 在下面的示例中,我们有参数`x`和`y`。 输入此程序并将其另存为`summation.py` 34 | 35 | ```py 36 | #!/usr/bin/env python3 37 | 38 | def f(x,y): 39 | return x*y 40 | 41 | print(f(3,4)) 42 | 43 | ``` 44 | 45 | 在此示例中,我们有两个函数:`f(x, y)`和`print()`。 函数`f(x, y)`使用`return`关键字将其输出传递给`print`函数。 46 | 47 | ![function example](img/98fc53d81bdc36257d084ee3357e2890.jpg) 48 | 49 | ### 返回变量 50 | 51 | 函数可以返回变量。 有时一个函数进行计算或有一些输出,可以将其提供给带有返回变量的程序。 52 | 53 | 在许多情况下,输出存储在变量中: 54 | 55 | ```py 56 | result = f(3,4) 57 | print(result) 58 | 59 | ``` 60 | 61 | 在这种情况下,程序将使用参数 3 和 4 调用函数`f`,然后将输出保存到变量`result`中。 62 | 63 | ## 练习 64 | 65 | 试试下面的练习 66 | 67 | 1.创建一个将列表`mylist = [1,2,3,4,5]`求和的函数 68 | 2.是否可以在函数内部调用函数? 69 | 3.函数可以调用自身吗? (提示:递归) 70 | 4.在一个函数中定义的变量可以在另一个函数中使用吗? (提示:作用域) 71 | 72 | 完成这些步骤后,继续下一个练习。 73 | 74 | [下载示例](https://gum.co/dcsp) -------------------------------------------------------------------------------- /docs/23.md: -------------------------------------------------------------------------------- 1 | # 列表操作 2 | 3 | > 原文: [https://pythonbasics.org/list-operations/](https://pythonbasics.org/list-operations/) 4 | 5 | 列表可以用几种方法更改。 这些方法是什么? 6 | 7 | 要将项目添加到列表中,可以使用`append()`方法。 调用列表中的方法,该参数包含要添加的项目。 调用`append(3)`会将 3 加到列表中。 要从列表末尾删除项目,可以使用`pop()`方法。 8 | 9 | 列表可以像传统数组一样进行访问,可以使用方括号和索引来获取项目。 10 | 11 | 12 | 13 | ## 示例 14 | 15 | 列表可以使用其方法进行修改。在下面的示例中,我们创建一个列表,并使用方法更改列表内容。 16 | 17 | ### 追加并弹出 18 | 19 | 输入如下所示的程序并运行: 20 | 21 | ```py 22 | x = [3,4,5] 23 | x.append(6) 24 | print(x) 25 | x.append(7) 26 | print(x) 27 | x.pop() 28 | print(x) 29 | 30 | ``` 31 | 32 | ### 访问项目 33 | 34 | 要访问项目,只需使用方括号: 35 | 36 | ```py 37 | x = [3,4,5] 38 | 39 | print(x[0]) 40 | print(x[1]) 41 | 42 | print(x[-1]) 43 | 44 | ``` 45 | 46 | ## 练习 47 | 48 | 试试下面的练习 49 | 50 | 1. 给定列表`y = [6,4,2]`,添加项目 12,8 和 4。 51 | 2. 将列表的第二项更改为 3。 52 | 53 | 完成这些步骤后,继续下一个练习。 54 | 55 | [下载示例](https://gum.co/dcsp) -------------------------------------------------------------------------------- /docs/24.md: -------------------------------------------------------------------------------- 1 | # 排序列表 2 | 3 | > 原文: [https://pythonbasics.org/sort-list/](https://pythonbasics.org/sort-list/) 4 | 5 | 对列表进行排序非常简单:Python 内置了对列表进行排序的支持。 6 | 7 | 从一些数据开始:创建一个数字列表,然后调用`sort()`方法。 直接在列表对象上调用此方法。 这将适用于任何列表,包括成对列表。 8 | 9 | 10 | 11 | ## 排序示例 12 | 13 | ### 排序列表 14 | 15 | 我们用一串数字定义一个列表(`x`)。 然后在列表对象上调用`sort`方法。 我们不需要保存返回变量,只需调用该方法就足够了。 16 | 17 | ```py 18 | x = [3,6,21,1,5,98,4,23,1,6] 19 | x.sort() 20 | print(x) 21 | 22 | ``` 23 | 24 | 保存程序(`sort1.py`)并运行。 这将以从低到高的顺序输出所有数字。 25 | 26 | 您有字符串列表吗? 字符串也可以排序。 27 | 28 | ```py 29 | words = ["Be","Car","Always","Door","Eat" ] 30 | words.sort() 31 | print(words) 32 | 33 | ``` 34 | 35 | 通过简单地调用`.sort()`方法,可以对包含多个项目的列表进行排序。 36 | 37 | 在执行此操作时,您不需要使用返回变量,因为列表是对象(有关 OOP 的更多信息,请参见 OOP 部分)。 现在,请记住您可以在列表上调用`.sort()`。 38 | 39 | ### 倒序 40 | 41 | 要以相反的顺序排序,请将其与方法`reverse()`组合 42 | 43 | ```py 44 | x = [3,6,21,1,5,98,4,23,1,6] 45 | x.sort() 46 | x = list(reversed(x)) 47 | print(x) 48 | 49 | ``` 50 | 51 | 所有数字将以相反的顺序显示。 52 | 53 | 那这是怎么回事? 54 | 55 | 首先,列表使用`x.sort()`排序。 56 | 57 | 然后将其提供给函数`reversed()`,该函数以列表作为参数。 但是,该函数不会返回列表对象,而是返回迭代器。 方法`list()`转换`reversed()`的输出,并将其转换为列表对象。 58 | 59 | ![sort list](img/f33baba9840d1f4a7c43d5bb70282c8e.jpg) 60 | 61 | ### 最佳反向排序方式 62 | 63 | 您可以使用更优雅的方式对列表进行排序: 64 | 65 | ```py 66 | words = words[::-1] 67 | 68 | ``` 69 | 70 | 这是什么骗术? 71 | 72 | 切片技术已在列表中使用。 这意味着切片列表,从第一个字符开始,最后一个字符结束,步长为 -1(反向)。 73 | 74 | ## 练习 75 | 76 | 1. 给定一个成对的列表,对第一个元素进行排序 77 | 78 | ```py 79 | x = [ (3,6),(4,7),(5,9),(8,4),(3,1)] 80 | 81 | ``` 82 | 83 | 2. 现在排序第二个元素 84 | 85 | [下载示例](https://gum.co/dcsp) -------------------------------------------------------------------------------- /docs/25.md: -------------------------------------------------------------------------------- 1 | # `range`函数 2 | 3 | > 原文: [https://pythonbasics.org/range-function/](https://pythonbasics.org/range-function/) 4 | 5 | `range()`构造函数生成数字。 这在创建新列表或使用`for`循环时非常有用:它可以同时用于两者。 6 | 7 | 实际上,您很少自己定义列表,您可以从数据库,Web 或使用`range()`生成列表。 8 | 9 | 10 | 11 | ## 示例 12 | 13 | 假设您要创建一个包含 100 个数字的列表。 手工写出来非常耗时,而要使用`range`函数: 14 | 15 | ```py 16 | x = list(range(100)) 17 | print(x) 18 | 19 | ``` 20 | 21 | Python 从零开始计数。 现在,如果您想从 1 数到 100,该怎么办? 22 | 23 | ```py 24 | x = list(range(1,101)) 25 | print(x) 26 | 27 | ``` 28 | 29 | ![range function](img/87db5229ba75516510d6d77cf0ac187c.jpg) 30 | 31 | 第三个参数定义步长,默认情况下为步长。 范围可以在`for`循环中使用: 32 | 33 | ```py 34 | for i in range(1,11): 35 | print(i) 36 | 37 | ``` 38 | 39 | ## 练习 40 | 41 | 试试下面的练习 42 | 43 | 1. 创建一千个数字的列表 44 | 2. 从该列表中获取最大和最小的数字 45 | 3. 创建两个列表,一个偶数和奇数。 46 | 47 | [下载示例](https://gum.co/dcsp) -------------------------------------------------------------------------------- /docs/26.md: -------------------------------------------------------------------------------- 1 | # 字典 2 | 3 | > 原文: [https://pythonbasics.org/dictionary/](https://pythonbasics.org/dictionary/) 4 | 5 | Python 字典是另一个集合。 实词词典是理解它们的一个很好的类比:它们包含一个项目列表,每个项目都有一个键和一个值。 6 | 7 | 在传统字典中,关键是单词,值是其解释或描述。 在 Python 中,您可以执行类似的操作。 8 | 9 | 10 | 11 | ## 示例 12 | 13 | ### 简介 14 | 15 | 用更严格的说法(数学上),字典是一对一的映射。 字典中的每个键都有一个值。 此值已分配给密钥。 16 | 17 | **字典**:一组包含(键,值)对的集合 18 | 19 | ![dictionary](img/31796db0ca619bca6133e335b49b7867.jpg) 20 | 21 | 对于字典中的每个键,都有一个值。 与列表不同,字典没有特定的顺序。 22 | 23 | 这意味着如果您要定义一个字典并在其上循环,则每次输出都可能不同,因为 Python 忽略了顺序。 24 | 25 | ### 定义 26 | 27 | 让我们输入一些代码! 您可以使用一个衬纸创建字典。 使用这些括号`{}`定义字典。 28 | 29 | ```py 30 | words = {} 31 | 32 | ``` 33 | 34 | 当心:这只是一个与列表不同的两个字符。 在此处输入错误,会将其与列表混在一起。 35 | 36 | 然后,您可以创建一个映射。 映射定义为键值对。 首先定义键,然后定义值: 37 | 38 | ```py 39 | words[key] = value 40 | 41 | ``` 42 | 43 | 您可以将字符串用作键。 一个关键的定义可以是:`words["PRONTO"]` 44 | 45 | ### 字典示例 46 | 47 | 在下面的示例中,我们定义了一些键,值对,然后使用其唯一键打印它们。键入以下代码,保存并运行: 48 | 49 | ```py 50 | #!/usr/bin/python 51 | 52 | words = {} 53 | words["BMP"] = "Bitmap" 54 | words["BTW"] = "By The Way" 55 | words["BRB"] = "Be Right Back" 56 | 57 | print words["BMP"] 58 | print words["BRB"] 59 | 60 | ``` 61 | 62 | ## 练习 63 | 64 | 1. 绘制国家到国家的短代码 65 | 2. 打印每个项目(键和值) 66 | 67 | [下载示例](https://gum.co/dcsp) -------------------------------------------------------------------------------- /docs/27.md: -------------------------------------------------------------------------------- 1 | # 读取文件 2 | 3 | > 原文: [https://pythonbasics.org/read-file/](https://pythonbasics.org/read-file/) 4 | 5 | 读取文件是 Python 标准库的一部分。 这意味着您不必包括任何模块。 6 | 7 | 有两种读取文件的方式: 8 | 9 | * 逐行 10 | * 读取一块 11 | 12 | 在本文中,我们将向您展示这两种方法。 13 | 14 | 15 | 16 | 您使用的解决方案取决于您要解决的问题。 17 | 18 | ## 示例 19 | 20 | ### 逐行 21 | 22 | 要读取文件,可以使用`readlines()`函数。 这将逐行读取文件并将其存储到列表中: 23 | 24 | 输入以下代码,将其另存为`file.py`并运行。 25 | 26 | ```py 27 | #!/usr/bin/env python 28 | 29 | filename = "file.py" 30 | 31 | with open(filename) as f: 32 | content = f.readlines() 33 | 34 | print(content) 35 | 36 | ``` 37 | 38 | ### 读取块 39 | 40 | 您可能并不总是希望逐行读取文件。 例如,如果您的文件没有换行符或为二进制文件。 要读取文件并存储为字符串,请改用`read()`函数: 41 | 42 | ```py 43 | #!/usr/bin/env python 44 | 45 | filename = "file.py" 46 | 47 | infile = open(filename, 'r') 48 | data = infile.read() 49 | infile.close() 50 | 51 | print(data) 52 | 53 | ``` 54 | 55 | ## 练习 56 | 57 | 1. 读取文件并每行编号 58 | 2. 找出文件不存在时程序的功能。 59 | 3. 如果与其他用户创建文件并尝试打开它会发生什么? 60 | 61 | [下载示例](https://gum.co/dcsp) -------------------------------------------------------------------------------- /docs/28.md: -------------------------------------------------------------------------------- 1 | # 写入文件 2 | 3 | > 原文: [https://pythonbasics.org/write-file/](https://pythonbasics.org/write-file/) 4 | 5 | 写入文件功能是标准模块的一部分,您无需包含任何模块。 6 | 7 | 写入和附加到文件在 Python 语言中是不同的。您可以使用这行打开要写入的文件: 8 | 9 | ```py 10 | f = open("test.txt","w") 11 | 12 | ``` 13 | 14 | 附加到文件中使用: 15 | 16 | ```py 17 | f = open("test.txt","a") 18 | 19 | ``` 20 | 21 | 如果指定了错误的参数,则文件可能被清空! 22 | 23 | 24 | 25 | ## 示例 26 | 27 | ### 创建新文件 28 | 29 | 要创建新文件,可以使用以下代码: 30 | 31 | ```py 32 | #!/usr/bin/env python 33 | 34 | # create and open file 35 | f = open("test.txt","w") 36 | 37 | # write data to file 38 | f.write("Hello World, \n") 39 | f.write("This data will be written to the file.") 40 | 41 | # close file 42 | f.close() 43 | 44 | ``` 45 | 46 | `"\n"`字符添加新行。 如果文件已经存在,则将其替换。 如果使用`"w"`参数,则文件的现有内容将被删除。 47 | 48 | ### 附加到文件 49 | 50 | 要将文本添加到文件末尾,请使用`"a"`参数。 51 | 52 | ```py 53 | #!/usr/bin/env python 54 | 55 | # create and open file 56 | f = open("test.txt","a") 57 | 58 | # write data to file 59 | f.write("Don't delete existing data \n") 60 | f.write("Add this to the existing file.") 61 | 62 | # close file 63 | f.close() 64 | 65 | ``` 66 | 67 | ## 练习 68 | 69 | 1. 将文本“轻松”写到文件中 70 | 2. 将`open("text.txt")`行写入文件 71 | 72 | [下载示例](https://gum.co/dcsp) -------------------------------------------------------------------------------- /docs/29.md: -------------------------------------------------------------------------------- 1 | # 嵌套循环 2 | 3 | > 原文: [https://pythonbasics.org/nested-loops/](https://pythonbasics.org/nested-loops/) 4 | 5 | 一个循环可以包含一个或多个其他循环:您可以在一个循环内创建一个循环。此原理称为嵌套循环。 嵌套循环遍历两个或多个循环。 6 | 7 | 程序员通常嵌套 2 或 3 层深度。 高于此的数字只会造成混乱。 8 | 9 | 10 | 11 | ## 示例 12 | 13 | 让我们做一个简单的例子。 我们创建两个列表: 14 | 15 | ```py 16 | persons = [ "John", "Marissa", "Pete", "Dayton" ] 17 | restaurants = [ "Japanese", "American", "Mexican", "French" ] 18 | 19 | ``` 20 | 21 | 如果我们有一个喜欢在餐厅吃饭的人的列表,我们可以让他们每个人都在某个餐厅吃饭吗? 22 | 23 | ```py 24 | #!/usr/bin/python 25 | 26 | persons = [ "John", "Marissa", "Pete", "Dayton" ] 27 | restaurants = [ "Japanese", "American", "Mexican", "French" ] 28 | 29 | for person in persons: 30 | for restaurant in restaurants: 31 | print(person + " eats " + restaurant) 32 | 33 | ``` 34 | 35 | 这遍历了两个循环: 36 | 37 | ![nested loop output](img/ced3590bd768580465b8f2fc7dcbf57d.jpg) 38 | 39 | ## 练习 40 | 41 | 试试下面的练习 42 | 43 | 1. 给定一个 3x3 的井字游戏板,请打印每个位置 44 | 45 | 2. 创建一个程序,让每个人都与其他人见面 46 | 47 | `persons = [ “John”, “Marissa”, “Pete”, “Dayton” ]` 48 | 49 | 3. 如果正常的`for`循环在 n 步`O(n)`中完成,则嵌套循环有多少步? 50 | 51 | 完成这些步骤后,继续下一个练习。 52 | 53 | [下载示例](https://gum.co/dcsp) -------------------------------------------------------------------------------- /docs/3.md: -------------------------------------------------------------------------------- 1 | # 学习 python 的 7 个理由 2 | 3 | > 原文: [https://pythonbasics.org/7-reasons-to-learn-python/](https://pythonbasics.org/7-reasons-to-learn-python/) 4 | 5 | 为了完成多项任务,计算机需要了解我们。 或者至少是了解我们需要他们做什么。 出现了编程语言。 6 | 7 | 人类在不同的地方使用不同的语言,计算机在不同的任务上使用不同的语言。 8 | 9 | 在这种情况下,我们将讨论 Python。 它是由名为 Guido Van Rossum 的开发人员于 1991 年创建的。 10 | 11 | 如果您是第一次编程,那么 Python 是一个不错的选择。 开始使用后,您会发现 Python 友好且易于学习,具有大量的应用程序并且是开源的。 12 | 13 | 它具有多种编程示例和面向对象编程。 14 | 15 | Python 被描述为一种解释型和动态编程语言,重点在于代码的可读性。 比 Java 或 C++ 具有更少的编码步骤。 16 | 17 | 知道这一点,这是学习 Python 的 7 个理由。 18 | 19 | 20 | 21 | ## 为什么学习 Python 22 | 23 | ### 数据科学 & 机器学习 24 | 25 | 数据是该主题的基础,无论您要进入哪个领域,它都将存在。 Python 是数据科学和机器学习的常用编程语言之一。 考虑到机器学习的发展,您应该尝试一下。 26 | 27 | ### 主要应用 & 更多 28 | 29 | 数据科学(包括机器学习,数据分析和数据可视化),Web 开发和脚本是 Python 的三个主要应用。 如果这还不够,那么软件开发公司中的应用程序已经多样化,例如游戏,框架和 Web 应用程序,语言开发,原型设计,图形设计应用程序等等。 30 | 31 | ### 扩展库 & 框架 32 | 33 | Python 提供的库包括字符串操作,Internet,Web 服务工具,操作系统接口和协议等领域。 Python Package Index 包含超过 85,000 个要使用的模块和脚本。 34 | 35 | ### 开源 36 | 37 | 20 多年来,Python 一直是跨平台和开源的。 您可以在 Linux,Windows 和 Mac OS 上进行编码。 38 | 39 | ![python programming](img/2f3c943a5c5e6309dc82d8e9cec78f8f.jpg) 40 | 41 | ### 可以结合其他编程语言 42 | 43 | CPython 与 C 编程语言一起使用,Jython 与 Java 集成,IronPython 与.NET 和 C# 兼容,PyObjc 是由 ObjectiveC 工具包编写的 Python,而 RubyPython 是与 Ruby 结合的版本。 44 | 45 | ### 提高产能 46 | 47 | Python 使您可以用更少的代码来构建更多的功能,例如,您可以在两天内构建一个基本的游戏。 48 | 49 | 广泛的支持库和干净的面向对象设计将程序员的生产率提高了两到十倍。 50 | 51 | 它强大的过程集成功能,单元测试框架和增强的控制功能为应用程序的速度提高做出了贡献。 52 | 53 | ### 工作 & 职业 54 | 55 | 您作为程序员的职业可以与 Python 一起成长。 56 | 57 | 首先,Python 正成为主要的编程语言,因此使用 Python 是一种好处。 58 | 59 | 其次,从事数据科学,机器学习和网络开发的开发人员是收入最高的人员之一。 60 | 61 | ![python career](img/4d5254ecc51f45a1300f4157eda157be.jpg) -------------------------------------------------------------------------------- /docs/30.md: -------------------------------------------------------------------------------- 1 | # 切片 2 | 3 | > 原文: [https://pythonbasics.org/slices/](https://pythonbasics.org/slices/) 4 | 5 | 可以从字符串或列表中获取切片,就像从比萨中获取切片一样。如果要包含一部分变量,可以是列表或字符串,则无需重新定义。 6 | 7 | 您可以获取变量的副本,该副本是原始变量的全部或子集。 此概念称为切片。 8 | 9 | 10 | 11 | ## 示例 12 | 13 | ### 切片 14 | 15 | 要拍摄前两个切片,请使用: 16 | 17 | ```py 18 | slice = pizza[0:2] 19 | 20 | ``` 21 | 22 | 可变切片现在将包含一份比萨饼,但仅一部分。 这用方括号表示,第一个数字是开始,而冒号之后的数字是结束。 23 | 24 | 为什么从零开始? 25 | 26 | Python 从零开始而不是从 1 开始对字符串和列表元素编号。 27 | 28 | 在这种情况下,我们从比萨饼列表中获取了一个切片,将输出存储到新变量中。如果需要,可以将其直接传递给打印函数。 29 | 30 | ### 列表切片 31 | 32 | 创建人员列表。 我们将使用切片技术来获取列表中的前两个人。 33 | 34 | ```py 35 | #!/usr/bin/python 36 | persons = [ "John", "Marissa", "Pete", "Dayton" ] 37 | 38 | slice = persons[0:2] 39 | print(slice) 40 | 41 | ``` 42 | 43 | 这将输出切片: 44 | 45 | ![python slice](img/3fad49c52b48a78b153387af8ec57421.jpg) 46 | 47 | ### 字符串切片 48 | 49 | 字符串也可以切片。 这样做的方式完全相同,但主要区别在于它不会返回很多项目,而只是返回一个新字符串。 50 | 51 | ```py 52 | destination = "summer holiday at beach" 53 | mySlice = destination[0:6] 54 | print(mySlice) 55 | 56 | ``` 57 | 58 | ## 练习 59 | 60 | 试试下面的练习 61 | 62 | 1. 请从下面的列表中获取切片: 63 | 64 | `pizzas = ["Hawai","Pepperoni","Fromaggi","Napolitana","Diavoli"]` 65 | 66 | 2. 给定文本`"Hello World"`,请截取`"World"` 67 | 68 | [下载示例](https://gum.co/dcsp) -------------------------------------------------------------------------------- /docs/31.md: -------------------------------------------------------------------------------- 1 | # 多个返回值 2 | 3 | > 原文: [https://pythonbasics.org/multiple-return/](https://pythonbasics.org/multiple-return/) 4 | 5 | Python 函数可以返回多个变量。 这些变量可以直接存储在变量中。 一个函数不需要返回一个变量,它可以返回零个,一个,两个或多个变量。 6 | 7 | 这是 Python 的唯一属性,默认情况下,其他编程语言(例如 C++ 或 Java)不支持此属性。 8 | 9 | 10 | 11 | ## 示例 12 | 13 | ### 简介 14 | 15 | 函数中定义的变量仅在函数中已知。 那是因为变量的范围。 通常,除非您要在程序中使用函数输出,否则这不是问题。 16 | 17 | 在这种情况下,您可以从函数中返回变量。 在最简单的情况下,您可以返回一个变量: 18 | 19 | ```py 20 | def complexfunction(a,b): 21 | sum = a +b 22 | return sum 23 | 24 | ``` 25 | 26 | 用`complexfunction(2, 3)`调用该函数,并且可以使用或保存其输出。 27 | 28 | 但是,如果要访问的函数中有多个变量怎么办? 29 | 30 | ### 多个返回值 31 | 32 | 创建一个函数`getPerson()`。 如您所知,一个函数可以返回一个变量,但也可以返回多个变量。 33 | 34 | 我们将直接从函数调用中存储所有这些变量。 35 | 36 | ```py 37 | #!/usr/bin/env python3 38 | 39 | def getPerson(): 40 | name = "Leona" 41 | age = 35 42 | country = "UK" 43 | return name,age,country 44 | 45 | name,age,country = getPerson() 46 | print(name) 47 | print(age) 48 | print(country) 49 | 50 | ``` 51 | 52 | 这将输出: 53 | 54 | ![multiple return](img/7018394c192b6f4bb6a7c00a84966a8d.jpg) 55 | 56 | ## 练习 57 | 58 | 请尝试以下练习: 59 | 60 | 1. 创建一个返回`a`,`b`和`a + b`的函数 61 | 2. 创建一个返回 5 个变量的函数 62 | 63 | 完成这些步骤后,继续下一个练习。 64 | 65 | [下载示例](https://gum.co/HhgpI) -------------------------------------------------------------------------------- /docs/32.md: -------------------------------------------------------------------------------- 1 | # 作用域 2 | 3 | > 原文: [https://pythonbasics.org/scope/](https://pythonbasics.org/scope/) 4 | 5 | 变量在程序中具有一定的作用。 全局变量可以在程序中的任何位置使用,但是局部变量仅在特定区域(函数,循环)中已知 6 | 7 | 有时在项目中使用“作用域”一词:“其不在项目作用域之内”,表示不包括在内。 同样,变量可以在函数作用域之外。 8 | 9 | 10 | 11 | ## 示例: 12 | 13 | ### 简介 14 | 15 | 作用域与可以使用变量的位置有关。 如果定义了变量,则不一定在代码中的任何地方都可用。 函数中定义的变量只有在函数中才知道,除非您将其返回。 16 | 17 | ```py 18 | def something(): 19 | localVar = 1 20 | 21 | # this will crash because localVar is a local variable 22 | print(localVar) 23 | 24 | ``` 25 | 26 | 这意味着除非您从函数返回变量,否则只能在其中使用它们。 这与全局变量形成了鲜明的对比:全局变量可以在任何地方使用,包括在多个函数和主代码中。 全局变量通常在程序顶部定义。 27 | 28 | ### 全局变量和局部变量 29 | 30 | 在下面的程序中,`balance`是一个全局变量。 它可以在代码中的任何地方使用。 但是变量`x`只能在`addAmount`内部使用。 31 | 32 | ```py 33 | #!/usr/bin/env python3 34 | 35 | balance = 0 36 | 37 | def addAmount(x): 38 | global balance 39 | balance = balance + x 40 | 41 | addAmount(5) 42 | print(balance) 43 | 44 | ``` 45 | 46 | 在视觉上是: 47 | 48 | ![scope](img/88e7ac055172b8f704169b613c7f4b7f.jpg) 49 | 50 | 我们有两个变量:`balance`,一个可以在任何地方使用的全局变量。`x`,只能在函数内部使用(在局部作用域之外未知)。 51 | 52 | ## 练习 53 | 54 | 请尝试以下练习: 55 | 56 | 1. 添加函数`subAmount`以更改变量余额 57 | 2. 创建带有局部变量的函数 58 | 59 | [下载示例](https://gum.co/dcsp) -------------------------------------------------------------------------------- /docs/34.md: -------------------------------------------------------------------------------- 1 | # `try except` 2 | 3 | > 原文: [https://pythonbasics.org/try-except/](https://pythonbasics.org/try-except/) 4 | 5 | `try except`语句可以处理异常。 当您运行程序时,可能会发生异常。 6 | 7 | 异常是在程序执行期间发生的错误。 Python 不会告诉您诸如语法错误(语法错误)之类的错误,而是会突然停止。 8 | 9 | 突然退出对最终用户和开发人员都是不利的。 10 | 11 | 除了紧急停止,您可以使用`try except`语句正确处理问题。 如果您没有正确处理异常,将会紧急停止。 12 | 13 | 14 | 15 | ## 示例 16 | 17 | 让我们采用这种情况:程序要求输入数字用户。 而是用户在输入框中键入字符。 该程序通常会崩溃。 18 | 19 | ### `try except` 20 | 21 | `try except`语句可防止程序崩溃并对其进行正确处理。 22 | 23 | ```py 24 | try: 25 | x = input("Enter number: ") 26 | x = x + 1 27 | print(x) 28 | except: 29 | print("Invalid input") 30 | 31 | ``` 32 | 33 | 输入无效的输入,使程序正常运行: 34 | 35 | ![try except](img/1a415ebe54db32e36ceace468b326629.jpg) 36 | 37 | ### `finally` 38 | 39 | 可以使用`finally`关键字扩展`try except`语句,如果不引发异常,则将执行此语句: 40 | 41 | ```py 42 | finally: 43 | print("Valid input.") 44 | 45 | ``` 46 | 47 | 如果没有引发异常,程序将继续执行。 48 | 49 | 有不同种类的异常:`ZeroDivisionError`,`NameError`,`TypeError`等。 有时,模块定义自己的异常。 50 | 51 | ### 练习 52 | 53 | 1. 可以使用`try-except`来捕获无效的键盘输入吗? 54 | 2. 如果无法打开文件,`try-except`能否捕获错误? 55 | 3. 什么时候不使用`try-except`? 56 | 57 | [下载示例](https://gum.co/dcsp) -------------------------------------------------------------------------------- /docs/35.md: -------------------------------------------------------------------------------- 1 | # 如何使用`pip`和 pypi 2 | 3 | > 原文: [https://pythonbasics.org/how-to-use-pip-and-pypi/](https://pythonbasics.org/how-to-use-pip-and-pypi/) 4 | 5 | `pip`是 Python 的软件包管理器。 您可以使用它来安装模块。 有时系统在商店中有两个版本的`pip`,您需要版本 3(最新版本)。 6 | 7 | 模块就是代码:以函数或对象的形式。 您可以将此包含在程序中并以此为基础。 您可以将其视为用于构建项目的预制部件。 8 | 9 | PyPI 是 Python 软件包的索引,用于存储 Python 的所有正式模块。 10 | 11 | 12 | 13 | ## `pip` 14 | 15 | ### 安装`pip` 16 | 17 | `pip`的安装很容易。 您可以使用系统软件包管理器进行安装。 如果您使用 Linux,则通常已经安装了。 18 | 19 | 在 Linux 上,您可以使用以下命令进行安装: 20 | 21 | ```py 22 | # debian and ubuntu linux 23 | sudo apt-get install python3-pip 24 | 25 | # fedora linux 26 | sudo yum install python3-pip 27 | 28 | ``` 29 | 30 | 在 Mac OS X 上,使用`easy_install`进行安装。 31 | 32 | ```py 33 | sudo easy install pip 34 | 35 | ``` 36 | 37 | ### 安装模块 38 | 39 | 是否安装了`pip`? 它可以从 PyPi 仓库安装软件包。 它是 python 模块的官方存储库。 40 | 41 | 从 PyPi 仓库下载并安装了通过`pip`安装的软件。 42 | 43 | 要安装模块,只需键入: 44 | 45 | ```py 46 | pip install modulename 47 | 48 | ``` 49 | 50 | 这可以是 PyPi 索引中的任何模块,让我们播放: 51 | 52 | ```py 53 | pip install playsound 54 | 55 | ``` 56 | 57 | #### `virtualenv` 58 | 59 | 您总是希望在虚拟环境中安装,而不是在系统上全局安装。 60 | 61 | `virtualenv`创建一个隔离的环境,因此您安装的软件包不会影响其他 python 项目。 您可以通过以下方式进行操作: 62 | 63 | ```py 64 | virtualenv name 65 | cd name 66 | source bin/activate 67 | 68 | ``` 69 | 70 | 然后,您的环境处于活动状态,并且可以使用`pip`安装模块 71 | 72 | ```py 73 | pip install package 74 | 75 | ``` 76 | 77 | 如果要结束使用项目,请禁用类型。 78 | 79 | ### 搜索 80 | 81 | 您可以在线或在命令行中在 PyPi 索引中找到软件包。 82 | 要在命令行中键入以下命令,其中`topic`是您要搜索的单词。 83 | 84 | ```py 85 | pip search topic 86 | 87 | ``` 88 | 89 | 这将显示可用软件模块的列表。 90 | 91 | [下载示例和练习](https://gum.co/dcsp) -------------------------------------------------------------------------------- /docs/36.md: -------------------------------------------------------------------------------- 1 | # 面向对象 -------------------------------------------------------------------------------- /docs/39.md: -------------------------------------------------------------------------------- 1 | # 获取器和设置器 2 | 3 | > 原文: [https://pythonbasics.org/getter-and-setter/](https://pythonbasics.org/getter-and-setter/) 4 | 5 | 一类可以再有一个变量(有时称为属性)。 创建对象时,这些对象中的每个对象对于这些变量都有唯一的值。 6 | 7 | 类变量不需要直接设置:可以使用类方法进行设置。 这是面向对象的方式,可帮助您避免错误。 8 | 9 | 10 | 11 | ## 示例 12 | 13 | 我们创建一个带有属性的类。 从该类中,我们创建几个对象。 14 | 15 | ```py 16 | class Friend: 17 | def __init__(self): 18 | self.job = "None" 19 | 20 | Alice = Friend() 21 | Bob = Friend() 22 | 23 | ``` 24 | 25 | 这些对象没有设置属性(作业)。 要进行设置,我们可以直接进行设置,但这是一个不好的做法。 相反,我们创建两个方法:`getJob()`和`setJob()`。 26 | 27 | ```py 28 | class Friend: 29 | def __init__(self): 30 | self.job = "None" 31 | 32 | def getJob(self): 33 | return self.job 34 | 35 | def setJob(self, job): 36 | self.job = job 37 | 38 | Alice = Friend() 39 | Bob = Friend() 40 | 41 | Alice.setJob("Carpenter") 42 | Bob.setJob("Builder") 43 | 44 | print(Bob.job) 45 | print(Alice.job) 46 | 47 | ``` 48 | 49 | 创建了两个对象,这两个对象对于属性作业均具有唯一的值: 50 | 51 | ![getter setter](img/73f6512e1f8ebce243695f723c837fe4.jpg) 52 | 53 | ## 练习 54 | 55 | 试试下面的练习 56 | 57 | 1. 添加变量年龄并创建获取器和设置器 58 | 2. 为什么要使用获取器和设置器方法? 59 | 60 | 完成这些步骤后,继续下一个练习。 61 | 62 | [下载答案](https://gum.co/HhgpI) -------------------------------------------------------------------------------- /docs/4.md: -------------------------------------------------------------------------------- 1 | # 为什么 Python 很棒 2 | 3 | > 原文: [https://pythonbasics.org/why-python-is-awesome/](https://pythonbasics.org/why-python-is-awesome/) 4 | 5 | Python 由 Guido van Rossum 创建并于 1991 年发布,现在是一种高级的通用编程语言。 6 | 7 | 它旨在通过利用大量的空白和简单性来强调代码的可读性,因为与 C++ 或 Java 之类的其他语言相比,它允许程序员使用更少的代码行来编写模型和概念。 8 | 9 | 这使 python 成为一种非常流行的编程语言,用于桌面独立应用程序或在线/ Web 应用程序以及小型或大型开发项目。 10 | 11 | 12 | 13 | ## 为什么使用 Python? 14 | 15 | ### Python 可以用来做什么? 16 | 17 | 在最近几年中,随着 Web 应用程序开发过程的急剧发展,这就是使 Python 成为软件开发人员中领先的竞争者或选择的原因。 它几乎可以构建任何东西。 18 | 19 | 作为一种通用语言,Python 是开发几乎任何东西都可能需要的单一语言。 20 | 21 | 它可用于与用户进行交互的前端(客户端)和网站的后端(服务器端)数据库的编程。 它可以用于科学研究和研究的数值和数据分析。 它可以用于开发人工智能。 它可用于通过生产力工具,游戏和您可以考虑的其他类型的应用程序开发在线和离线应用程序。 22 | 23 | 简而言之,Python 是编程语言的万事通。 掌握它可能会使软件开发人员成为所有类型编程的专家。 它既有趣又易于使用。 24 | 25 | ![python programming](img/2f3c943a5c5e6309dc82d8e9cec78f8f.jpg) 26 | 27 | ### 初学者友好 28 | 29 | Python 的主要设计宗旨是易于理解和愉快使用。 它的名字来自有趣的英国超现实喜剧团 Monty Python。 30 | 31 | 它具有许多可供参考的初学者教程,其令人愉悦的特性使其受到越来越多的人欢迎。 32 | 33 | Python 使新手程序员能够迅速构建原型和工具,从而使他们立即感到满意。 由于易于使用,该语言正迅速成为初学者的入门语言。 很容易理解。 34 | 35 | 36 | 尽管 Python 是一种高级语言,但由于它易于理解,因此它是一种初学者友好的语言。 它不会给难以理解的机器等语言的人带来压力。 取而代之的是,它通过处理详细而又繁琐的语法和命令来像英语一样读起来,这使编程不那么吸引人。 37 | 38 | 您可以更深入地掌握编程的概念,而不会陷入学习语言的困境。 您会得到社区的支持。 如果您开始编程,那么您将不可避免地成为程序员社区的一部分,您将在编程项目中遇到的任何问题或疑虑都可以咨询并获得帮助。 39 | 40 | ### 社区 41 | 42 | Python 社区是 stackoverflow,拥有大量聚会活动的最大社区之一,在那里,您不仅获得成功的支持,而且最重要的是,您还获得了终生可以拥有的朋友。 它提供了前景广阔的职业机会 Python 属于全球排名前五位的最受欢迎的编程语言,也是收入最高的编程语言。 43 | 44 | ### 职业 45 | 46 | 从事 python 的职业可以确保您在编程领域拥有巨大的就业机会和可赚钱的职业。 而且,由于该语言是灵活的,因此它还为您提供了要追求的编程领域的灵活性。 这些反映在越来越多的对学习 Python 感兴趣的人中。 -------------------------------------------------------------------------------- /docs/41.md: -------------------------------------------------------------------------------- 1 | # 继承 2 | 3 | > 原文: [https://pythonbasics.org/inheritance/](https://pythonbasics.org/inheritance/) 4 | 5 | 继承:一个类可以获取另一个类的属性和变量。 该类称为超类或父类。 6 | 7 | 继承使您不必重复自己(在编码中:不要重复自己),您可以定义一次方法并将其用于一个或多个子类中。 8 | 9 | 10 | 11 | ## 示例 12 | 13 | ### 简介 14 | 15 | 您至少需要两个类才能使继承起作用。 就像现实生活一样,一个人会继承另一个。从超类继承的类将获得所有内容。 16 | 17 | 对于面向对象的编程,这意味着它将从超类获取方法和变量。 18 | 19 | 多个类可以从同一父类继承。 在这种情况下,所有子类都将获得超类的所有属性和方法。 20 | 21 | ![inheritance](img/0b1177c6ca9fa0869758c96e3c90b773.jpg) 22 | 23 | ### 工作原理 24 | 25 | 定义两个类,一个超类(`App`)和一个子类(`Android`)。 子类(`Android`)继承自`App`类。 26 | 27 | 首先,我们定义超类。 超类的编写方式与普通类一样,没有什么特别之处,只不过其他人可以继承。 您可以根据需要提供方法和变量。 28 | 29 | ```py 30 | class App: 31 | def start(self): 32 | print('starting') 33 | 34 | ``` 35 | 36 | 我们在超类(`App`)中定义了方法和变量,一旦继承,我们就可以在子类中使用它们。 让我们创建一个继承自超类的类(`Android`)。 37 | 38 | 在超类中,我们创建方法`start()`。 这只是出于演示目的,该方法在使用`Android`类创建对象时将可用。 39 | 40 | Python 如何知道类要继承? 类名后的花括号。 41 | 42 | ```py 43 | class Android(App): 44 | 45 | ``` 46 | 47 | 首先定义普通的类名,然后定义超类。 48 | 49 | ### 代码示例 50 | 51 | 下面的示例演示了 Python 中的继承。 Python 支持多种继承,但是在此示例中,我们仅从一个超类继承。 52 | 53 | 以下是完整的示例: 54 | 55 | ```py 56 | #!/usr/bin/python 57 | 58 | class App: 59 | def start(self): 60 | print('starting') 61 | 62 | class Android(App): 63 | def getVersion(self): 64 | print('Android version') 65 | 66 | app = Android() 67 | app.start() 68 | app.getVersion() 69 | 70 | ``` 71 | 72 | ## 练习 73 | 74 | 请尝试以下练习: 75 | 76 | 1. 创建一个继承自`App`类的新类 77 | 2. 尝试创建一个从两个超类继承的类(多重继承) 78 | 79 | [下载示例](https://gum.co/HhgpI) -------------------------------------------------------------------------------- /docs/42.md: -------------------------------------------------------------------------------- 1 | # 静态方法 2 | 3 | > 原文: [https://pythonbasics.org/static-method/](https://pythonbasics.org/static-method/) 4 | 5 | 可以在不创建对象或实例的情况下调用静态方法。 只需创建方法并直接调用即可。 从某种意义上说,这与面向对象的编程正交:我们在不创建对象的情况下调用方法。 6 | 7 | 这直接与面向对象编程的概念背道而驰,可能会被反对,但是有时使用静态方法可能会很有用。 8 | 9 | 10 | 11 | ## 示例 12 | 13 | ### 静态方法 14 | 15 | 通常,您可能想进行函数调用,或者创建一个对象来调用其方法。 但是,您可以执行其他操作:在类中调用方法而不创建对象。 16 | 17 | 下面演示静态方法。 用方法定义一个类。 在其上方添加关键字`@staticmethod`以使其变为静态。 18 | 19 | ```py 20 | class Music: 21 | @staticmethod 22 | def play(): 23 | print("*playing music*") 24 | 25 | Music.play() 26 | 27 | ``` 28 | 29 | ### 类中的静态方法 30 | 31 | 一个类可以同时包含静态和非静态方法。 如果要调用非静态方法,则必须创建一个对象。 下面的代码不起作用,因为未创建对象: 32 | 33 | ```py 34 | class Music: 35 | @staticmethod 36 | def play(): 37 | print("*playing music*") 38 | 39 | def stop(self): 40 | print("stop playing") 41 | 42 | Music.play() 43 | Music.stop() 44 | 45 | ``` 46 | 47 | ### 调用静态方法 48 | 49 | 普通类方法和静态方法可以混合使用(因为为什么不这样?)。 50 | 这可能会非常令人困惑:我们将面向对象的概念和函数式编程都混合在一个类中。 51 | 52 | 如果创建对象,则可以调用非静态方法。 但是您也可以在不创建对象的情况下调用静态方法。 53 | 54 | ```py 55 | class Music: 56 | @staticmethod 57 | def play(): 58 | print("*playing music*") 59 | 60 | def stop(self): 61 | print("stop playing") 62 | 63 | Music.play() 64 | 65 | obj = Music() 66 | obj.stop() 67 | 68 | ``` 69 | 70 | 总体而言,静态方法是一个有趣的概念,但实际上,您很少使用它们。 有时使用静态方法可能表明设计不好。 71 | 72 | ## 练习 73 | 74 | 试试下面的练习 75 | 76 | * 是否可以在类中调用方法而无需创建对象? 77 | * 为什么每个人都不喜欢静态方法? 78 | 79 | 完成这些步骤后,继续下一个练习。 80 | 81 | [下载示例](https://gum.co/HhgpI) -------------------------------------------------------------------------------- /docs/43.md: -------------------------------------------------------------------------------- 1 | # 可迭代对象 2 | 3 | > 原文: [https://pythonbasics.org/iterable/](https://pythonbasics.org/iterable/) 4 | 5 | 可迭代对象是可以用作序列的 Python 对象。 您可以使用`next()`方法转到序列的下一项。 6 | 7 | 您可以遍历可迭代对象,但不能直接访问单个元素。这是一个容器对象:当时只能返回其元素之一。 8 | 9 | 10 | 11 | ## 示例 12 | 13 | ### 创建可迭代对象 14 | 15 | 定义一个字典和一个可迭代对象的代码,如下面的代码: 16 | 17 | ```py 18 | #!/usr/bin/python 19 | d = { "one": 1, "two": 2, "three": 3, "four": 4, "five": 5 } 20 | iterable = d.keys() 21 | print(iterable) 22 | 23 | ``` 24 | 25 | 您可以像这样遍历项目: 26 | 27 | ```py 28 | for item in iterable: 29 | print(item) 30 | 31 | ``` 32 | 33 | ### `next`方法 34 | 35 | 创建一个迭代器以使用下一个方法: 36 | 37 | ```py 38 | #!/usr/bin/python 39 | d = { "one": 1, "two": 2, "three": 3, "four": 4, "five": 5 } 40 | iterable = d.keys() 41 | iterator = iter(iterable) 42 | print( next(iterator) ) 43 | print( next(iterator) ) 44 | 45 | ``` 46 | 47 | ### 可迭代类型 48 | 49 | 您不能使用索引访问元素,这将引发异常。可迭代对象类型包括列表,字符串,字典和集合。 50 | 51 | 下面的演示将迭代器应用于列表: 52 | 53 | ```py 54 | items = [ "one","two","three","four" ] 55 | iterator = iter(items) 56 | x = next(iterator) 57 | print(x) 58 | 59 | ``` 60 | 61 | ## 练习 62 | 63 | 试试下面的练习 64 | 65 | * 什么是可迭代对象? 66 | * 可迭代对象使用哪些类型的数据? 67 | 68 | 您可以下载以下答案: 69 | 70 | [下载示例](https://gum.co/HhgpI) -------------------------------------------------------------------------------- /docs/44.md: -------------------------------------------------------------------------------- 1 | # Python 类方法 2 | 3 | > 原文: [https://pythonbasics.org/classmethod/](https://pythonbasics.org/classmethod/) 4 | 5 | 类方法是一种在所有对象之间共享的方法。 要调用类方法,请将类作为第一个参数。 6 | 7 | 可以从实例和类本身中调用类方法。 所有这些都使用相同的方法。 该方法可以使用类变量和方法。 8 | 9 | 10 | 11 | ## 示例 12 | 13 | ### 类方法示例 14 | 15 | 要将方法转换为类方法,请在方法定义之前添加`@classmethod`。 该方法始终将类作为参数。 16 | 17 | 下面的示例定义了一个类方法。 然后,类本身可以使用该类方法。 在此示例中,类方法使用类属性名称。 18 | 19 | ```py 20 | class Fruit: 21 | name = 'Fruitas' 22 | 23 | @classmethod 24 | def printName(cls): 25 | print('The name is:', cls.name) 26 | 27 | Fruit.printName() 28 | 29 | ``` 30 | 31 | 您可以同时使用对象和类的类方法: 32 | 33 | ```py 34 | apple = Fruit() 35 | berry = Fruit() 36 | 37 | Fruit.printName() 38 | apple.printName() 39 | berry.printName() 40 | 41 | ``` 42 | 43 | 现在,参数名称属于该类,如果您要通过使用对象来更改名称,它将忽略该参数。 但是,如果您要按班级进行操作,则它会更改,例如以下示例: 44 | 45 | ```py 46 | apple.name="Apple" 47 | Fruit.printName() 48 | apple.printName() 49 | berry.printName() 50 | 51 | Fruit.name="Apple" 52 | Fruit.printName() 53 | apple.printName() 54 | berry.printName() 55 | 56 | ``` 57 | 58 | ### 替代表示法 59 | 60 | 通常使用 pythonic 表示法,但这并不是严格要求的。 61 | 您也可以使用这样的类方法: 62 | 63 | ```py 64 | class Fruit: 65 | name = 'Fruitas' 66 | 67 | def printName(cls): 68 | print('The name is:', cls.name) 69 | 70 | Fruit.printAge = classmethod(Fruit.printName) 71 | Fruit.printAge() 72 | 73 | ``` 74 | 75 | ### 类方法与静态方法 76 | 77 | 类似于静态方法,类方法不需要实例化对象。 78 | 79 | 类方法与静态方法的不同之处在于,静态方法不了解类本身。 在类方法中,参数始终是类本身。 80 | 81 | 静态方法对类或实例一无所知。 您也可以使用函数调用。 82 | 83 | 类方法在调用该方法时获取该类。 它了解类的属性和方法。 84 | 85 | ### 练习 86 | 87 | 类方法文章的练习: 88 | 89 | * 什么是类方法? 90 | * 类方法与静态方法有何不同? 91 | 92 | [下载示例](https://gum.co/HhgpI) -------------------------------------------------------------------------------- /docs/45.md: -------------------------------------------------------------------------------- 1 | # 多重继承 2 | 3 | > 原文: [https://pythonbasics.org/multiple-inheritance/](https://pythonbasics.org/multiple-inheritance/) 4 | 5 | 一个类可以从多个超类继承。 多重继承是标准或单一继承的扩展。 原理保持不变:一个类从另一个类继承。 6 | 7 | 多重继承是从更多父类继承的想法。 一个类可以继承 2,3 或多个类。 8 | 9 | 10 | 11 | ## 示例 12 | 13 | ### 简介 14 | 15 | 一个类可以从 Python 中的多个类继承(其他编程语言并非总是如此)。如果创建一个类,则可以让它从父类(有时称为超类)继承。 16 | 17 | 该类本身可以命名为子类,因为它有多个父类。 18 | 19 | 如果一个类继承自超类,它将获得其所有属性和方法。 如果您有 4 个超类,它将仅继承所有它们。 20 | 21 | 通用格式为: 22 | 23 | ```py 24 | class Subclass(SuperClass1, SuperClass2, SuperClass3, ..): 25 | 26 | ``` 27 | 28 | 您可以直观地看到: 29 | 30 | ![multiple inheritance](img/fb6573533db2359eab44f7549e6d6157.jpg) 31 | 32 | ### 多重继承 33 | 34 | 在下面的程序中,定义了两个超类:`Human`和`Coder`。 通过使用以下代码行,`Pythonista`类从这两个类继承: 35 | 36 | ```py 37 | class Pythonista(Human, Coder): 38 | 39 | ``` 40 | 41 | 该程序通过创建一个对象继续进行。 该对象具有来自所有 3 个类的属性:超类及其本身。 如果在超类或类中定义方法,则对象将具有所有方法。 42 | 43 | ```py 44 | class Human: 45 | name = "" 46 | 47 | class Coder: 48 | skills = 3 49 | 50 | class Pythonista(Human, Coder): 51 | version = 3 52 | 53 | obj = Pythonista() 54 | obj.name = "Alice" 55 | 56 | print(obj.name) 57 | print(obj.version) 58 | print(obj.skills) 59 | 60 | ``` 61 | 62 | ### 批评 63 | 64 | 多重继承的批评者指出,它增加了复杂性,并使代码难以重用。 在这一点上,如果要将一个类复制到新程序,则也必须复制所有超类。 65 | 66 | 对于一个类来说,这可能很好,但是如果您的代码到处都有多重继承,则很难将部件用作其他程序的可重用组件。 67 | 68 | 实际上,向程序添加多个继承会在类之间创建强大的内聚力。 但这并不意味着它不是有用的工具。 69 | 70 | ## 练习 71 | 72 | 试试这些练习: 73 | 74 | * 所有编程语言都支持多重继承吗? 75 | * 为什么不使用多重继承? 76 | * 可以继承的类的数量是否有限制? 77 | 78 | 在上面的练习部分中下载答案。 79 | 80 | [下载示例](https://gum.co/HhgpI) -------------------------------------------------------------------------------- /docs/46.md: -------------------------------------------------------------------------------- 1 | # 高级 -------------------------------------------------------------------------------- /docs/47.md: -------------------------------------------------------------------------------- 1 | # 虚拟环境 2 | 3 | > 原文: [https://pythonbasics.org/virtualenv/](https://pythonbasics.org/virtualenv/) 4 | 5 | `virtualenv`可以创建隔离的 Python 环境。 6 | 7 | Python 默认情况下在系统范围内安装模块。 如果程序需要同一模块的不同版本,则可能会成为问题。 8 | 9 | 这与其他未在系统范围内安装模块的编程语言不同。想象两个 Python 应用程序,其中一个需要 libBar 1.0,另一个需要 libBar 2.0。 10 | 11 | `virtualenv`通过创建隔离的环境巧妙地解决了这个问题。 模块将仅安装在虚拟环境中。 在您的环境内部,您可以安装任何模块而不会影响系统范围的配置。 12 | 13 | 14 | 15 | ## 设置 16 | 17 | 程序`virtualenv`可以解决。 它使您可以创建虚拟环境。要创建虚拟环境,请使用以下命令: 18 | 19 | ```py 20 | virtualenv -p python3 envname 21 | 22 | ``` 23 | 24 | 其中`envname`是您的项目名称。 如果将项目命名为`testproject`,则会得到以下一行: 25 | 26 | ```py 27 | virtualenv -p python3 testproject 28 | 29 | ``` 30 | 31 | 这将使用以下子目录创建文件夹`virtualenv`:`bin`,`include`,`lib`和`share`。 32 | 33 | 加载虚拟环境类型 34 | 35 | ```py 36 | cd testproject 37 | bin/activate 38 | 39 | ``` 40 | 41 | 现在,您的虚拟环境已激活。Shell 将显示当前已加载的虚拟环境。 42 | 43 | ![virtualenv python](img/7398f5673c673324cae1e8cc3386c337.jpg) 44 | 45 | 要返回正常环境,请键入 46 | 47 | ```py 48 | deactivate 49 | 50 | ``` 51 | 52 | 您可以根据需要创建任意数量的虚拟环境。 每个项目都应该有自己的`virtualenv`,因为它需要不需要在系统范围内安装的特定模块。 53 | 54 | ![virtualenv showing modules ](img/340d45a74478864f1574d91d2c2895c2.jpg) 55 | 56 | ## 练习 57 | 58 | 请尝试以下练习: 59 | 60 | 1. 为项目设置一个新的虚拟环境并激活它。 使用`pip`安装模块。 61 | 62 | [下载示例](https://gum.co/HhgpI) -------------------------------------------------------------------------------- /docs/48.md: -------------------------------------------------------------------------------- 1 | # 枚举 2 | 3 | > 原文: [https://pythonbasics.org/enumerate/](https://pythonbasics.org/enumerate/) 4 | 5 | 枚举是一个内置函数,它返回一个枚举对象。 6 | 7 | 调用是`enumerate(sequence, start=0)` 8 | 9 | 输出对象包括一个计数器,如下所示:`(0, thing [0]), (1, thing [1]), (2, thing [2])`,依此类推。 10 | 11 | 作为输入,它需要一个类似于列表,元组或迭代器的序列。`start`参数是可选的。 12 | 如果起始参数设置为 1,则计数将从 1 开始而不是从 0 开始 13 | 14 | 15 | 16 | ## 枚举对象 17 | 18 | 创建一个序列并将其提供给枚举函数。 这可以是任何类型的序列,在此示例中,我们使用列表。 然后我们输出对象。 19 | 20 | 请尝试以下程序: 21 | 22 | ```py 23 | # create a sequence 24 | browsers = ['Chrome','Firefox','Opera','Vivaldi'] 25 | 26 | # create an enumeratable and convert to list 27 | x = list(enumerate(browsers)) 28 | print(x) 29 | 30 | ``` 31 | 32 | 您应该看到以下输出: 33 | 34 | ![enumerate](img/b2e386f1018d9d5074bfd4b2300c8d01.jpg) 35 | 36 | 返回的对象可以像迭代器一样对待:下一个方法调用将起作用: 37 | 38 | ```py 39 | browsers = ['Chrome','Firefox','Opera','Vivaldi'] 40 | eObj = enumerate(browsers) 41 | 42 | x = next(eObj) 43 | print(x) 44 | x = next(eObj) 45 | print(x) 46 | 47 | ``` 48 | 49 | ## 练习 50 | 51 | 试试下面的练习 52 | 53 | 1. 将`for`循环与`enumerate`相结合。 54 | 55 | [下载示例](https://gum.co/HhgpI) -------------------------------------------------------------------------------- /docs/49.md: -------------------------------------------------------------------------------- 1 | # Pickle 2 | 3 | > 原文: [https://pythonbasics.org/pickle/](https://pythonbasics.org/pickle/) 4 | 5 | Pickle 可用于序列化和反序列化对象。 可以将已序列化的对象保存并从磁盘加载。 Pickle 是一种将对象(列表,字典等)转换为文件,反之亦然的方法。 6 | 7 | 这个想法是在一个脚本中保存一个或多个对象,然后在另一个脚本中加载它们。 您也可以使用它来保存程序或游戏状态。 8 | 9 | 我们将使用二进制文件进行保存和加载,因为这样可以节省磁盘空间。 10 | 11 | 12 | 13 | ## 序列化对象 14 | 15 | 要使用 Pickle,请导入`pickle`模块。创建一个对象并将其序列化。 然后使用文件对象将其写入文件。 16 | 17 | ```py 18 | import pickle 19 | 20 | exampleObj = {'Python':3,'KDE':5,'Windows':10} 21 | 22 | fileObj = open('data.obj', 'wb') 23 | pickle.dump(exampleObj,fileObj) 24 | fileObj.close() 25 | 26 | ``` 27 | 28 | ## 反序列化对象 29 | 30 | 现在,该对象已保存到文件中,您可以加载它(解开它)。 在下面的示例中,我们从文件中加载对象。 31 | 32 | 加载`pickle`模块,打开然后读取文件,然后使用`pickle.load()`加载数据。 您可以将其加载到所需的任何变量中,但是为了方便起见,我使用了相同的名称(`exampleObj`)。 33 | 34 | ```py 35 | import pickle 36 | 37 | fileObj = open('data.obj', 'rb') 38 | exampleObj = pickle.load(fileObj) 39 | fileObj.close() 40 | print(exampleObj) 41 | 42 | ``` 43 | 44 | 这将向您显示以前保存的对象: 45 | 46 | ![python pickle](img/ef9dff0e7bf0efcd3230a04478370867.jpg) 47 | 48 | ## 练习 49 | 50 | 请尝试以下练习: 51 | 52 | 1. 从文件保存和加载对象 53 | 2. 尝试从文件加载多个对象 54 | 55 | [下载示例](https://gum.co/HhgpI) -------------------------------------------------------------------------------- /docs/5.md: -------------------------------------------------------------------------------- 1 | # 学习 Python -------------------------------------------------------------------------------- /docs/50.md: -------------------------------------------------------------------------------- 1 | # 正则表达式 2 | 3 | > 原文: [https://pythonbasics.org/regular-expressions/](https://pythonbasics.org/regular-expressions/) 4 | 5 | `re`模块处理 Python 中的正则表达式 6 | 7 | 正则表达式可用于查找字符串中的所有匹配项,或仅测试匹配项是否存在。 8 | 9 | 正则表达式可以帮助您快速地从大量数据中收集一些项目,只需定义一些语法规则即可。 10 | 11 | 12 | 13 | ## 示例 14 | 15 | 创建一个字符串以运行正则表达式。 作为示例短语,我们将使用美国著名的绕口令`"wouldchuck"`。 16 | 17 | 使用正则表达式查找字符串的所有匹配项。 使用正则表达式和搜索空间作为参数调用方法`findall()`。 18 | 19 | 请尝试以下程序: 20 | 21 | ```py 22 | import re 23 | 24 | string = "How much wood would a woodchuck chuck if a woodchuck could chuck wood?" 25 | 26 | matches = re.findall(r'woo\w*', string) 27 | print(matches) 28 | 29 | ``` 30 | 31 | 它返回正则表达式的匹配项。我们定义起始字母`"woo"`,后跟匹配零次或多次(`*`)的单词字符`\w`。 32 | 33 | ![regular expression](img/063d4109d021245e06c9a9d6e68c98d1.jpg) 34 | 35 | 要测试数据是否匹配正则表达式,请使用搜索方法。 返回`true`或`false`,可以与`if`语句匹配: 36 | 37 | ```py 38 | if re.search(r'woo\w*', string): 39 | print('woo\w* foud!') 40 | else: 41 | print('not found') 42 | 43 | ``` 44 | 45 | 如果要编写自己的正则表达式,请检查此[备忘单](https://i.pinimg.com/originals/07/62/db/0762dbbeef53ee102ee9ca2e4df6bda0.jpg)。 46 | 47 | ## 练习 48 | 49 | 1. 找出正则表达式是否区分大小写 50 | 2. 为电话号码创建正则表达式 51 | 52 | [下载示例](https://gum.co/HhgpI) -------------------------------------------------------------------------------- /docs/51.md: -------------------------------------------------------------------------------- 1 | # JSON 和 python 2 | 3 | > 原文: [https://pythonbasics.org/json/](https://pythonbasics.org/json/) 4 | 5 | 了解如何使用 python 解析 JSON 对象。 6 | 7 | JavaScript Object Notation(JSON)是一种数据交换格式。 虽然最初是为 JavaScript 设计的,但如今,许多计算机程序都与 Web 交互并使用 JSON。 8 | 9 | 与网络的交互通常是通过 JSON 格式的 API(应用程序可编程接口)完成的。 10 | 11 | 12 | 13 | ## python JSON 示例 14 | 15 | ### 解析 JSON 16 | 17 | 您可以使用 python 解析 JSON 对象。 然后,该对象将转换为 python 对象。 18 | 19 | 首先创建一个 json 对象 20 | 21 | ```py 22 | { 23 | "gold": 1271, 24 | "silver": 1284, 25 | "platinum": 1270 26 | } 27 | 28 | ``` 29 | 30 | 之后像这样解析 JSON 对象: 31 | 32 | ```py 33 | import json 34 | obj = json.loads('{"gold": 1271,"silver": 1284,"platinum": 1270}') 35 | print(obj['gold']) 36 | 37 | ``` 38 | 39 | ### 从 URL 解析 JSON 40 | 41 | 您可以直接从网络上获取 JSON 对象,并将其转换为 python 对象。 这是通过 API 端点完成的 42 | 43 | ```py 44 | import json 45 | import urllib.request 46 | 47 | # download raw json object 48 | url = "https://api.gdax.com/products/BTC-EUR/ticker" 49 | data = urllib.request.urlopen(url).read().decode() 50 | 51 | # parse json object 52 | obj = json.loads(data) 53 | 54 | # output some object attributes 55 | print('$ ' + obj['price']) 56 | print('$ ' + obj['volume']) 57 | 58 | ``` -------------------------------------------------------------------------------- /docs/52.md: -------------------------------------------------------------------------------- 1 | # python 读取 json 文件 2 | 3 | > 原文: [https://pythonbasics.org/read-json-file/](https://pythonbasics.org/read-json-file/) 4 | 5 | 在 python 中读取 json 文件非常容易。 在本文中,我们将说明如何从磁盘读取 JSON 文件并在 python 中使用它。 6 | 7 | 什么是 JSON?JSON 是一种在整个 Internet 上使用的数据交换格式。 **JSON** (JavaScript 对象表示法)可用于所有高级编程语言。 8 | 9 | 如何在 python 中使用 JSON?这种工作方式是首先在磁盘上放置一个 json 文件。然后,程序将加载文件进行解析,解析,然后即可使用它。 10 | 11 | 12 | 13 | ## python 读取 json 14 | 15 | ### JSON 文件 16 | 17 | 在磁盘上创建一个文件(命名为:`example.json`)。 下面的 python 程序读取 json 文件并直接使用值。 18 | 19 | 该文件可以包含一个衬纸。`example.json`的文件内容为: 20 | 21 | ```py 22 | {"usd":1,"eur":1.2,"gbp": 1.2} 23 | 24 | ``` 25 | 26 | 将文件保存为`example.json`。 27 | 28 | ### python 示例 29 | 30 | 然后在下面创建程序并运行: 31 | 32 | ```py 33 | import json 34 | 35 | # read file 36 | with open('example.json', 'r') as myfile: 37 | data=myfile.read() 38 | 39 | # parse file 40 | obj = json.loads(data) 41 | 42 | # show values 43 | print("usd: " + str(obj['usd'])) 44 | print("eur: " + str(obj['eur'])) 45 | print("gbp: " + str(obj['gbp'])) 46 | 47 | ``` 48 | 49 | 上面的程序将打开文件`example.json`并进行解析。 您可以像访问任何变量一样访问 JSON 数据。 -------------------------------------------------------------------------------- /docs/55.md: -------------------------------------------------------------------------------- 1 | # 音频 -------------------------------------------------------------------------------- /docs/56.md: -------------------------------------------------------------------------------- 1 | # 用 Python 播放声音 2 | 3 | > 原文: [https://pythonbasics.org/python-play-sound/](https://pythonbasics.org/python-play-sound/) 4 | 5 | 在 Python 上播放声音很容易。 有几个模块可以播放声音文件(`.wav`)。 6 | 这些解决方案是跨平台的(Windows,Mac,Linux)。 7 | 8 | 主要区别在于易用性和受支持的文件格式。 所有这些都应与 Python 3 一起使用。除非您指定路径,否则音频文件应与 python 程序位于同一目录中。 9 | 10 | 让我们探讨一下选项! 11 | 12 | 13 | 14 | ## 用 Python 播放声音 15 | 16 | ### `playsound`模块 17 | 18 | `playsound`模块是可以播放音频文件的跨平台模块。 它没有任何依赖性,只需在您的`virtualenv`中使用`pip`安装并运行即可! 19 | 20 | ```py 21 | from playsound import playsound 22 | playsound('audio.mp3') 23 | 24 | ``` 25 | 26 | 在平台上的实现是不同的。 它在 Windows 上使用`windll.winm`,在 Apple OS X 上使用`AppKit.NSSound`,在 Linux 上使用`GStreamer`。 27 | 28 | 我已经使用 Python 3.5.3。进行了测试。 这对 WAV 和 MP3 文件均适用。 29 | 30 | ### `pydub` 31 | 32 | 您可以使用`pydub`模块播放声音文件。 可以在 PyPI 储存库中(随`pip`一起安装)。此模块可以在下面使用 PyAudio 和`ffmpeg`。 33 | 34 | ```py 35 | from pydub import AudioSegment 36 | from pydub.playback import play 37 | 38 | song = AudioSegment.from_wav("sound.wav") 39 | play(song) 40 | 41 | ``` 42 | 43 | ### `tksnack` 44 | 45 | `tksnack`模块声音套件可以播放多个音频文件:WAV,AU,AIFF,MP3,CSL,SD,SMP 和 NIST/Sphere。 46 | 47 | 您可以使用包管理器进行安装:`apt install python3-tksnack`。 对于旧版本,有`python-tksnack`。 48 | 49 | 该模块取决于 Tkinter。 这意味着要使用此模块播放声音,您还必须导入 gui 模块 Tkinter。 该模块似乎暂时没有更新。 50 | 51 | ```py 52 | from Tkinter import * 53 | import tkSnack 54 | 55 | root = Tk() 56 | tkSnack.initializeSnack(root) 57 | 58 | snd = tkSnack.Sound() 59 | snd.read('sound.wav') 60 | snd.play(blocking=1) 61 | 62 | ``` 63 | 64 | ### 本机播放器 65 | 66 | 您还可以在系统上本地播放声音。 这要求您在终端上安装某种音频播放器。 在 Linux 上,您可以使用`mpg123`。 67 | 68 | 这只是通过外部播放器播放 mp3 文件。 69 | 70 | ```py 71 | # apt install mpg123 72 | 73 | import os 74 | 75 | file = "file.mp3" 76 | os.system("mpg123 " + file) 77 | 78 | ``` 79 | 80 | [下载音频示例](https://social.pythonbasics.org/download-audio-examples/) -------------------------------------------------------------------------------- /docs/57.md: -------------------------------------------------------------------------------- 1 | # python 文字转语音 2 | 3 | > 原文: [https://pythonbasics.org/text-to-speech/](https://pythonbasics.org/text-to-speech/) 4 | 5 | 文字转语音(TTS)是将书面文字转换为语音的方式。您可以使用 python 创建 TTS 程序。 语音的质量取决于您的语音引擎。 6 | 7 | 在本文中,您将学习如何创建自己的 TTS 程序。 8 | 9 | 10 | 11 | ## python 中的文字转语音 12 | 13 | ### espeak 示例 14 | 15 | 程序“espeak”是一个简单的语音合成器,可以将书面文本转换为语音。 espeak 程序听起来确实有点机器人化,但是它足够简单,可以构建一个基本程序。 16 | 17 | ```py 18 | import subprocess 19 | 20 | def execute_unix(inputcommand): 21 | p = subprocess.Popen(inputcommand, stdout=subprocess.PIPE, shell=True) 22 | (output, err) = p.communicate() 23 | return output 24 | 25 | a = "Say something in natural language." 26 | 27 | # create wav file 28 | # w = 'espeak -w temp.wav "%s" 2>>/dev/null' % a 29 | # execute_unix(w) 30 | 31 | # tts using espeak 32 | c = 'espeak -ven+f3 -k5 -s150 --punct="" "%s" 2>>/dev/null' % a 33 | execute_unix(c) 34 | 35 | ``` 36 | 37 | ### TTS 与 Google 38 | 39 | Google 听起来很自然。 您可以将其 TTS 引擎与以下代码一起使用。 40 | 对于此程序,您需要安装模块 gTTS 以及程序 mpg123。 41 | 42 | ```py 43 | # need gTTS and mpg123 44 | # pip install gTTS 45 | # apt install mpg123 46 | 47 | from gtts import gTTS 48 | import os 49 | 50 | # define variables 51 | s = "escape with plane" 52 | file = "file.mp3" 53 | 54 | # initialize tts, create mp3 and play 55 | tts = gTTS(s, 'en') 56 | tts.save(file) 57 | os.system("mpg123 " + file) 58 | 59 | ``` 60 | 61 | 这将输出语音/ mp3 文件。 62 | 63 | [下载音频示例](https://social.pythonbasics.org/download-audio-examples/) -------------------------------------------------------------------------------- /docs/58.md: -------------------------------------------------------------------------------- 1 | # 将 MP3 转换为 WAV 2 | 3 | > 原文: [https://pythonbasics.org/convert-mp3-to-wav/](https://pythonbasics.org/convert-mp3-to-wav/) 4 | 5 | 您可以在 Python 中将 MP3 直接转换为 WAV。 在本文中,我们将使用 Python 3 进行转换。 对于本教程,任何文件都可以使用。 6 | 7 | 首先,请先安装`ffmpeg`。 `ffmpeg`是用于音频,视频和多媒体处理的免费程序。 该程序具有控制台界面,但是除了安装它外,没有什么必要。 8 | 9 | 10 | 11 | ## 示例 12 | 13 | ### `pydub` 14 | 15 | 安装模块`pydub`。 这是 Python 的音频处理模块。 该模块可以打开许多多媒体音频和视频格式。 您可以使用`pip`安装此模块。 16 | 17 | ```py 18 | pip install pydub 19 | 20 | ``` 21 | 22 | 如果尚未安装`ffmpeg`,请安装它。 您可以使用包管理器来执行此操作。 23 | 24 | 对于 Ubuntu/Debian Linux: 25 | 26 | ```py 27 | apt-get install ffmpeg 28 | 29 | ``` 30 | 31 | ### MP3 到 WAV 的转换 32 | 33 | 您可以通过更改变量名称将 mp3 文件(源)转换为 wav 文件(目标)。 34 | 35 | mp3 文件必须与程序(`.py`)位于同一目录中。 如果要使用自定义目录,请在文件名中添加路径。 36 | 37 | ```py 38 | from os import path 39 | from pydub import AudioSegment 40 | 41 | # files 42 | src = "transcript.mp3" 43 | dst = "test.wav" 44 | 45 | # convert wav to mp3 46 | sound = AudioSegment.from_mp3(src) 47 | sound.export(dst, format="wav") 48 | 49 | ``` 50 | 51 | 上面的程序使用`pydub`模块进行转换。 该模块本身使用`ffmpeg`,这意味着必须安装`ffmpeg`才能成功。 52 | 53 | 运行: 54 | 55 | ```py 56 | python3 convert.py 57 | 58 | ``` 59 | 60 | 等待程序完成。 61 | 62 | 您的目录中应该有另一个文件: 63 | 64 | ![convert mp3 to wav](img/65fc960355b27bb4127f86b0eb80b24e.jpg) 65 | 66 | [下载音频示例](https://social.pythonbasics.org/download-audio-examples/) -------------------------------------------------------------------------------- /docs/59.md: -------------------------------------------------------------------------------- 1 | # 转录音频 2 | 3 | > 原文: [https://pythonbasics.org/transcribe-audio/](https://pythonbasics.org/transcribe-audio/) 4 | 5 | 您可以使用 Python 自动转录音频文件。 6 | 7 | 如果您有一个带有口语单词的音频文件,则程序将完全自动输出该音频文件的转录本。 8 | 9 | 本示例使用英语作为音频文件的输入语言,但是从技术上讲,只要语音识别引擎支持,就可以使用任何语言。 10 | 11 | 12 | 13 | ## 示例 14 | 15 | 首先创建带有语音的音频文件。 这可以是任何带有英语单词的音频文件。 将文件另存为`transcript.mp3` 16 | 17 | 如果不确定从哪里获得语音音频文件,则可以使用 [Bluemix](https://text-to-speech-demo.ng.bluemix.net/) 生成一个语音文件。 18 | 19 | ### 安装必备组件 20 | 21 | 要运行该应用程序,您需要安装以下几项: 22 | 23 | * Python 3 24 | * pydub 模块 25 | * 程序 ffmpeg 26 | * 模块语音识别 27 | 28 | 您可以使用 pip 安装 Python 模块。`ffmpeg`可以与您的软件包管理器一起安装(`apt-get`,`emerge`,`yum`,`pacman`) 29 | 30 | ### 转录 31 | 32 | 音频转录可以通过几个步骤进行: 33 | 34 | 1. mp3 到 WAV 转换, 35 | 2. 加载音频文件, 36 | 3. 将音频文件提供给特定的识别系统。 37 | 38 | 复制下面的程序,并将其另存为`transcribe.py` 39 | 40 | ```py 41 | import speech_recognition as sr 42 | from os import path 43 | from pydub import AudioSegment 44 | 45 | # convert mp3 file to wav 46 | sound = AudioSegment.from_mp3("transcript.mp3") 47 | sound.export("transcript.wav", format="wav") 48 | 49 | # transcribe audio file 50 | AUDIO_FILE = "transcript.wav" 51 | 52 | # use the audio file as the audio source 53 | r = sr.Recognizer() 54 | with sr.AudioFile(AUDIO_FILE) as source: 55 | audio = r.record(source) # read the entire audio file 56 | 57 | print("Transcription: " + r.recognize_google(audio)) 58 | 59 | ``` 60 | 61 | 使用以下程序运行程序: 62 | 63 | ```py 64 | python3 transcribe.py 65 | 66 | ``` 67 | 68 | 它将输出原始音频文件的转录。 69 | 70 | [下载音频示例](https://social.pythonbasics.org/download-audio-examples/) -------------------------------------------------------------------------------- /docs/6.md: -------------------------------------------------------------------------------- 1 | # 入门 2 | 3 | > 原文: [https://pythonbasics.org/getting-started/](https://pythonbasics.org/getting-started/) 4 | 5 | Python 是一种编程语言,语法简单易学。 Python 程序可以在所有台式计算机上运行。 6 | 7 | 它用于许多应用程序领域,包括:Web 和 Internet 开发,科学应用程序,桌面应用程序,教育和通用软件应用程序。 8 | 9 | 10 | 11 | ## Python 解释器 12 | 13 | 要运行 Python 程序,您将需要 Python 解释器和可能的图形编辑器。Python 解释器执行 Python 代码(有时称为程序)。 14 | 15 | ![run python](img/4eeaf7dcf76d5211d707f2d19f877634.jpg) 16 | 17 | 一个程序可以是一个或多个 Python 文件。 代码文件可以包括其他文件或模块。 要运行程序,需要在执行 Python 时指定一个参数。 18 | 19 | ## 运行 Python 代码 20 | 21 | 您可以在此处下载 Python 解释器: [https://www.python.org/downloads/](https://www.python.org/downloads/) 一旦安装了 Python 解释器,[请继续本教程](/execute-python-scripts/)。 22 | 23 | 要运行代码,请打开一个终端并启动: 24 | 25 | ```py 26 | 27 | python file.py 28 | 29 | ``` 30 | 31 | 该站点包含有关 Python 编程语言的练习。 如果您不熟悉编程,请先运行 Python 代码。 32 | 33 | ## Python IDE 34 | 35 | IDE 是开发环境。 如果您不想在终端上工作,则可以使用 IDE。 这是一个图形编辑器,您可以在其中键入代码,使用多个文件,运行代码等。 36 | 37 | ![pycharm python ide](img/e9903b3a1ee470475881379bcfee22ac.jpg) 38 | 39 | 在上面的 PyCharm IDE 中,您可以看到 1)文件菜单,2)代码,3)主菜单,4)行号,5)滚动条,6)文件和程序输出以及 7)其他信息。 大多数 IDE 具有这样的结构。 40 | 41 | 除非您是终端专家,否则 IDE 可以节省大量开发时间。 您可以快速处理多个文件,在项目之间切换以及在一个项目中与多个人一起工作。 42 | 43 | 一些流行的 Python IDE 是 [PyCharm](https://www.jetbrains.com/pycharm/) , [PyDev](http://www.pydev.org/) 和 [Wing IDE](https://wingware.com/) 。 -------------------------------------------------------------------------------- /docs/60.md: -------------------------------------------------------------------------------- 1 | # Tkinter -------------------------------------------------------------------------------- /docs/61.md: -------------------------------------------------------------------------------- 1 | # Tkinter 2 | 3 | > 原文: [https://pythonbasics.org/tkinter/](https://pythonbasics.org/tkinter/) 4 | 5 | Tkinter 是 Python 的图形用户界面(GUI)模块,您可以使用 Python 制作桌面应用程序。 您可以制作窗口,按钮,显示文字和图像等。 6 | 7 | Tk 和 Tkinter 应用程序可以在大多数 Unix 平台上运行。 这也适用于 Windows 和 Mac OSX。 8 | 模块 Tkinter 是 Tk GUI 工具包的接口。 9 | 10 | 11 | 12 | ## 示例 13 | 14 | ### Tkinter 模块 15 | 16 | 本示例打开一个空白的桌面窗口。 Tkinter 模块是标准库的一部分。 17 | 要使用 Tkinter,请导入 Tkinter 模块。 18 | 19 | ```py 20 | from tkinter import * 21 | 22 | ``` 23 | 24 | 这是带有下划线`t`的 Tkinter,在 Python 3 中已重命名。 25 | 26 | ### 设置窗口 27 | 28 | 启动 TK 并创建一个窗口。 29 | 30 | ```py 31 | root = Tk() 32 | app = Window(root) 33 | 34 | ``` 35 | 36 | `Window`类不是标准的,我们创建一个`Window`。 此类本身非常基础。 37 | 38 | ```py 39 | class Window(Frame): 40 | def __init__(self, master=None): 41 | Frame.__init__(self, master) 42 | self.master = master 43 | 44 | ``` 45 | 46 | 然后设置窗口标题并显示该窗口: 47 | 48 | ```py 49 | # set window title 50 | root.wm_title("Tkinter window") 51 | 52 | # show window 53 | root.mainloop() 54 | 55 | ``` 56 | 57 | ![tkinter window](img/35aeff297d310511e6b1868510a103de.jpg) 58 | 59 | ### Tkinter 窗口示例 60 | 61 | 下面的程序显示了一个空的 Tkinter 窗口。 62 | 使用以下程序运行: 63 | 64 | ```py 65 | from tkinter import * 66 | 67 | class Window(Frame): 68 | def __init__(self, master=None): 69 | Frame.__init__(self, master) 70 | self.master = master 71 | 72 | # initialize tkinter 73 | root = Tk() 74 | app = Window(root) 75 | 76 | # set window title 77 | root.wm_title("Tkinter window") 78 | 79 | # show window 80 | root.mainloop() 81 | 82 | ``` 83 | 84 | [下载 Tkinter 示例](https://gum.co/ErLc) -------------------------------------------------------------------------------- /docs/62.md: -------------------------------------------------------------------------------- 1 | # Tkinter 按钮 2 | 3 | > 原文: [https://pythonbasics.org/tkinter-button/](https://pythonbasics.org/tkinter-button/) 4 | 5 | 按钮是 GUI 中的标准小部件。 它们带有默认的 Tkinter 模块,您可以将它们放在窗口中。 6 | 7 | Python 函数或方法可以与按钮关联。 该函数或方法称为回调函数。 如果单击该按钮,则会调用回调函数。 8 | 9 | 关于按钮的注释:tkinter 按钮只能显示单一字体的文本。 按钮文字可以是多行。 这意味着此小部件不会在文本旁边显示图标,因为您需要另一个小部件。 10 | 11 | 12 | 13 | ## 示例 14 | 15 | ### 简介 16 | 17 | 您可以使用以下几行创建并放置按钮: 18 | 19 | ```py 20 | exitButton = Button(self, text="Exit", command=self.clickExitButton) 21 | exitButton.place(x=0, y=0) 22 | 23 | ``` 24 | 25 | 回调方法是`clickExitButton`,该方法在上一行(`command =`)中分配。这是一种简单的方法: 26 | 27 | ```py 28 | def clickExitButton(self): 29 | exit() 30 | 31 | ``` 32 | 33 | 如果没有回调方法,则会显示一个按钮,但是单击该按钮不会执行任何操作。 34 | 35 | 该窗口应显示: 36 | 37 | ![tkinter button](img/69dd4267c143832448cb1e6ba46ad062.jpg) 38 | 39 | ### 按钮示例 40 | 41 | 要运行该示例,请将其另存为`button.py`并使用 python 解释器运行它。 42 | 此示例打开一个窗口,显示一个按钮,您可以单击该按钮。 43 | 44 | ```py 45 | from tkinter import * 46 | 47 | class Window(Frame): 48 | 49 | def __init__(self, master=None): 50 | Frame.__init__(self, master) 51 | self.master = master 52 | 53 | # widget can take all window 54 | self.pack(fill=BOTH, expand=1) 55 | 56 | # create button, link it to clickExitButton() 57 | exitButton = Button(self, text="Exit", command=self.clickExitButton) 58 | 59 | # place button at (0,0) 60 | exitButton.place(x=0, y=0) 61 | 62 | def clickExitButton(self): 63 | exit() 64 | 65 | root = Tk() 66 | app = Window(root) 67 | root.wm_title("Tkinter button") 68 | root.geometry("320x200") 69 | root.mainloop() 70 | 71 | ``` 72 | 73 | [下载 Tkinter 示例](https://gum.co/ErLc) -------------------------------------------------------------------------------- /docs/65.md: -------------------------------------------------------------------------------- 1 | # Tkinter 图片 2 | 3 | > 原文: [https://pythonbasics.org/tkinter-image/](https://pythonbasics.org/tkinter-image/) 4 | 5 | 图像可以用 Tkinter 显示。 图像可以采用多种格式,包括 jpeg 图像。 有点违反直觉,但是您可以使用标签显示图像。 6 | 7 | 要打开图像,请使用`Image.open(filename)`方法。 这将在程序目录中查找图像,对于其他目录,将路径添加到文件名。 8 | 9 | 10 | 11 | ## 示例 12 | 13 | ### 简介 14 | 15 | 本示例加载并在标签上显示图像。 就像在 Tkinter 窗口上显示文本一样简单,但是我们显示的是图像而不是文本。 16 | 17 | 您应该安装 Python 图像库(PIL)来加载图像。 这是必需的,并且该模块在 PyPi 中可用。 使用 pip 软件包管理器安装该模块。 18 | 19 | 它可以打开各种图像格式,包括 PPM,PNG,JPEG,GIF,TIFF 和 BMP。 20 | 21 | 加载图像: 22 | 23 | ```py 24 | load = Image.open("parrot.jpg") 25 | render = ImageTk.PhotoImage(load) 26 | 27 | ``` 28 | 29 | 然后将其与标签关联: 30 | 31 | ```py 32 | img = Label(self, image=render) 33 | img.image = render 34 | img.place(x=0, y=0) 35 | 36 | ``` 37 | 38 | ![tkinter image](img/b541c855ea24b82e547dfb8a696a4523.jpg) 39 | 40 | ### Tkinter 图像示例 41 | 42 | 您可以打开一个窗口,添加标签并将图像与之关联。 在此示例中,我们加载 jpeg 图像,但是您可以加载任何图像。 43 | 44 | 下面是一个完整的示例: 45 | 46 | ```py 47 | from tkinter import * 48 | 49 | # pip install pillow 50 | from PIL import Image, ImageTk 51 | 52 | class Window(Frame): 53 | def __init__(self, master=None): 54 | Frame.__init__(self, master) 55 | self.master = master 56 | self.pack(fill=BOTH, expand=1) 57 | 58 | load = Image.open("parrot.jpg") 59 | render = ImageTk.PhotoImage(load) 60 | img = Label(self, image=render) 61 | img.image = render 62 | img.place(x=0, y=0) 63 | 64 | root = Tk() 65 | app = Window(root) 66 | root.wm_title("Tkinter window") 67 | root.geometry("200x120") 68 | root.mainloop() 69 | 70 | ``` 71 | 72 | [下载 Tkinter 示例](https://gum.co/ErLc) -------------------------------------------------------------------------------- /docs/66.md: -------------------------------------------------------------------------------- 1 | # Tkinter 画布 2 | 3 | > 原文: [https://pythonbasics.org/tkinter-canvas/](https://pythonbasics.org/tkinter-canvas/) 4 | 5 | Tkinter 画布可用于在窗口中绘制。 使用此小部件可以绘制图形或绘图。 您甚至可以使用它来创建图形编辑器。 6 | 7 | 您可以在画布上绘制几个小部件:弧形,图像,直线,矩形,文本,切片,椭圆形,多边形,椭圆形,多边形和矩形。 矩形可以是轮廓,也可以是内部。 8 | 9 | 画布具有两个坐标系:窗口系统(左上角`x = 0`,`y = 0`)和定义项目绘制位置的画布坐标系。 10 | 11 | 12 | 13 | ## 示例 14 | 15 | ### 简介 16 | 17 | 画布是一个通用的小部件:您可以使用它来制作任何类型的图形,包括绘图,绘图,图表,显示图像等等。 18 | 19 | 画布添加了一行代码: 20 | 21 | ```py 22 | myCanvas = tkinter.Canvas(root, bg="white", height=300, width=300) 23 | 24 | ``` 25 | 26 | 这定义了添加位置,背景和大小。 创建后,您可以在其顶部进行绘制。 27 | 28 | 如果要绘制弧,只需调用其方法`create_arc()`: 29 | 30 | ```py 31 | arc = myCanvas.create_arc(coord, start=0, extent=150, fill="red") 32 | 33 | ``` 34 | 35 | ![tkinter canvas](img/be2842c0ef133ea766f753872ae8c324.jpg) 36 | 37 | ### Tkinter 画布 38 | 39 | 将画布添加到 TK 窗口并在其中进行绘制非常容易。此示例打开一个窗口,添加一个画布并在其中绘制两个弧线。 该程序将绘制两个弧,一个绿色的弧和一个红色的弧,它们共同构成一个圆。 40 | 41 | ```py 42 | import tkinter 43 | 44 | # init tk 45 | root = tkinter.Tk() 46 | 47 | # create canvas 48 | myCanvas = tkinter.Canvas(root, bg="white", height=300, width=300) 49 | 50 | # draw arcs 51 | coord = 10, 10, 300, 300 52 | arc = myCanvas.create_arc(coord, start=0, extent=150, fill="red") 53 | arv2 = myCanvas.create_arc(coord, start=150, extent=215, fill="green") 54 | 55 | # add to window and show 56 | myCanvas.pack() 57 | root.mainloop() 58 | 59 | ``` 60 | 61 | [下载 Tkinter 示例](https://gum.co/ErLc) -------------------------------------------------------------------------------- /docs/67.md: -------------------------------------------------------------------------------- 1 | # Tkinter 复选框 2 | 3 | > 原文: [https://pythonbasics.org/tkinter_checkbox/](https://pythonbasics.org/tkinter_checkbox/) 4 | 5 | 复选框小部件非常明显,您根本无需考虑它们。 它们就像开/关开关,您可以有多个开关。 它是 Tkinter 中包含的小部件之一。 6 | 7 | 如果您希望单击零个或多个选项,则可以使用一个复选框。 否则,您将使用单选按钮或其他类型的按钮。 8 | 9 | 10 | 11 | ## 复选框 12 | 13 | ### Tkinter 复选框 14 | 15 | Tkinter 复选框小部件是一个非常基本的开关。 Tkinter 中的复选框称为`CheckButton`。 您可以添加两个复选框,如下所示: 16 | 17 | ```py 18 | c1 = tk.Checkbutton(window, text='Python',variable=var1, onvalue=1, offvalue=0, command=print_selection) 19 | c1.pack() 20 | c2 = tk.Checkbutton(window, text='C++',variable=var2, onvalue=1, offvalue=0, command=print_selection) 21 | c2.pack() 22 | 23 | ``` 24 | 25 | ### 示例 26 | 27 | 下面的程序在窗口中添加了几个检查按钮。 如果单击复选框,则上面的文本会更改。 28 | 29 | ```py 30 | #!/usr/bin/env python 31 | # -*- coding: utf-8 -*- 32 | 33 | import tkinter as tk 34 | 35 | window = tk.Tk() 36 | window.title('My Window') 37 | window.geometry('100x100') 38 | 39 | l = tk.Label(window, bg='white', width=20, text='empty') 40 | l.pack() 41 | 42 | def print_selection(): 43 | if (var1.get() == 1) & (var2.get() == 0): 44 | l.config(text='I love Python ') 45 | elif (var1.get() == 0) & (var2.get() == 1): 46 | l.config(text='I love C++') 47 | elif (var1.get() == 0) & (var2.get() == 0): 48 | l.config(text='I do not anything') 49 | else: 50 | l.config(text='I love both') 51 | 52 | var1 = tk.IntVar() 53 | var2 = tk.IntVar() 54 | c1 = tk.Checkbutton(window, text='Python',variable=var1, onvalue=1, offvalue=0, command=print_selection) 55 | c1.pack() 56 | c2 = tk.Checkbutton(window, text='C++',variable=var2, onvalue=1, offvalue=0, command=print_selection) 57 | c2.pack() 58 | 59 | window.mainloop() 60 | 61 | ``` 62 | 63 | ![tkinter checkbox](img/313eafe86a326c40ae5a767c1d4d8a9d.jpg) 64 | 65 | [下载 Tkinter 示例](https://gum.co/ErLc) -------------------------------------------------------------------------------- /docs/68.md: -------------------------------------------------------------------------------- 1 | # Tkinter 输入框 2 | 3 | > 原文: [https://pythonbasics.org/tkinter_entry/](https://pythonbasics.org/tkinter_entry/) 4 | 5 | 使用 Tkinter 输入框,您可以在桌面软件中输入文本。 通常,输入框(输入字段)会带有标签,这是因为如果没有标签,则不清楚用户应该在此处键入什么内容。 6 | 7 | 您可以添加多个输入字段。 输入字段可以显示拉丁字符,但也可以显示其他类型的输入(例如密码) 8 | 9 | 10 | 11 | ## 输入框 12 | 13 | ### Tkinter 输入框 14 | 15 | 使用 Tkinter 输入框可以输入 GUI。 下面的代码将一个输入框添加到 GUI。 第一个参数是要添加的内容,文本参数定义了要放置在其旁边的内容。 16 | 17 | ```py 18 | #!/usr/bin/python 19 | # -*- coding: UTF-8 -*- 20 | 21 | from tkinter import * 22 | 23 | top = Tk() 24 | L1 = Label(top, text="Label") 25 | L1.pack(side=LEFT) 26 | E1 = Entry(top, bd=5) 27 | E1.pack(side=RIGHT) 28 | 29 | top.mainloop() 30 | 31 | ``` 32 | 33 | ![tkinter entry](img/76f680ba194c061f9b7578d7e228e08f.jpg) 34 | 35 | ### Tkinter 密码输入 36 | 37 | Tkinter 条目可以是纯文本,但也支持密码输入。 通过更改参数`show`,可以使其看起来像您想要的任何东西。 38 | 39 | ```py 40 | #!/usr/bin/env python 41 | # -*- coding: utf-8 -*- 42 | 43 | import tkinter as tk 44 | 45 | window = tk.Tk() 46 | window.title('My Window') 47 | window.geometry('500x300') 48 | 49 | e1 = tk.Entry(window, show=None, font=('Arial', 14)) 50 | e2 = tk.Entry(window, show='*', font=('Arial', 14)) 51 | e1.pack() 52 | e2.pack() 53 | 54 | window.mainloop() 55 | 56 | ``` 57 | 58 | ![tkinter entry password](img/b7cd8da3d83b8b7986aa097956f6472c.jpg) 59 | 60 | [下载 Tkinter 示例](https://gum.co/ErLc) -------------------------------------------------------------------------------- /docs/69.md: -------------------------------------------------------------------------------- 1 | # Tkinter 文件对话框 2 | 3 | > 原文: [https://pythonbasics.org/tkinter_filedialog/](https://pythonbasics.org/tkinter_filedialog/) 4 | 5 | 文件对话框可帮助您打开,保存文件或目录。 这是单击文件后打开的对话框的类型。 该对话框来自模块,无需手动编写所有代码。 6 | 7 | Tkinter 没有本机外观的文件对话框,而是具有客户 TK 样式。 您可以在下面看到这些。 8 | 9 | 文件对话框将在所有桌面平台上运行。 10 | 11 | 12 | 13 | ## 文件对话框 14 | 15 | ### Tkinter 文件对话框 16 | 17 | Tkinter 文件对话框有几种类型。 您真正需要哪种类型取决于您的应用程序需求。 它们都是方法调用。 18 | 19 | 您可以打开一个文件,一个目录,另存为文件等等。 20 | 21 | ```py 22 | import tkinter.filedialog 23 | 24 | tkinter.filedialog.asksaveasfilename() 25 | tkinter.filedialog.asksaveasfile() 26 | tkinter.filedialog.askopenfilename() 27 | tkinter.filedialog.askopenfile() 28 | tkinter.filedialog.askdirectory() 29 | tkinter.filedialog.askopenfilenames() 30 | tkinter.filedialog.askopenfiles() 31 | 32 | ``` 33 | 34 | ![tkinter filedialog](img/e365b8334e16f08859c82d935b84f4ec.jpg) 35 | 36 | [下载 Tkinter 示例](https://gum.co/ErLc) -------------------------------------------------------------------------------- /docs/71.md: -------------------------------------------------------------------------------- 1 | # Tkinter 列表框 2 | 3 | > 原文: [https://pythonbasics.org/tkinter_listbox/](https://pythonbasics.org/tkinter_listbox/) 4 | 5 | 列表框显示选项列表。 然后,您可以单击任何这些选项。 默认情况下,它不会执行任何操作,但是您可以将其链接到回调函数或单击按钮。 6 | 7 | 要添加新项目,可以使用`insert()`方法。 这接受单个参数或项目列表。 8 | 9 | 10 | 11 | ### Tkinter 列表框 12 | 13 | 如果您有多个项目,则可以使用列表框。 下面的 Tkinter 列表框示例显示了不同的项目。 这是一个交互式程序,您可以单击并更改值。 14 | 15 | 这不是组合框,请参见下面的屏幕截图。 16 | 17 | ```py 18 | #!/usr/bin/env python 19 | # -*- coding: utf-8 -*- 20 | 21 | import tkinter as tk 22 | 23 | window = tk.Tk() 24 | window.title('My Window') 25 | 26 | window.geometry('500x300') 27 | 28 | var1 = tk.StringVar() 29 | l = tk.Label(window, bg='green', fg='yellow',font=('Arial', 12), width=10, textvariable=var1) 30 | l.pack() 31 | 32 | def print_selection(): 33 | value = lb.get(lb.curselection()) 34 | var1.set(value) 35 | 36 | b1 = tk.Button(window, text='print selection', width=15, height=2, command=print_selection) 37 | b1.pack() 38 | 39 | var2 = tk.StringVar() 40 | var2.set((1,2,3,4)) 41 | lb = tk.Listbox(window, listvariable=var2) 42 | 43 | list_items = [11,22,33,44] 44 | for item in list_items: 45 | lb.insert('end', item) 46 | lb.insert(1, 'first') 47 | lb.insert(2, 'second') 48 | lb.delete(2) 49 | lb.pack() 50 | 51 | window.mainloop() 52 | 53 | ``` 54 | 55 | ![tkinter listbox](img/a6a91551430cb92d00e95bb8dfef21ae.jpg) 56 | 57 | [下载 Tkinter 示例](https://gum.co/ErLc) -------------------------------------------------------------------------------- /docs/72.md: -------------------------------------------------------------------------------- 1 | # Tkinter 消息框 2 | 3 | > 原文: [https://pythonbasics.org/tkinter_messagebox/](https://pythonbasics.org/tkinter_messagebox/) 4 | 5 | 消息框是一个显示消息的小弹出窗口。 有时它伴随着一个图标。 几乎所有时间,它都会中断用户的操作。 6 | 7 | 下面的示例向您展示如何使用 Tkinter 创建和使用消息框。 此处显示的代码适用于 Python 3.x 和更高版本。 较旧的 Python 导入和使用 Tkinter 的方式有所不同。 8 | 9 | 10 | 11 | ## 消息框 12 | 13 | ### 消息框 14 | 15 | 消息框有很多变体。 您可以有一条信息消息,警告消息或错误消息。 所有这些消息框都有标题和消息。 16 | 17 | ```py 18 | #!/usr/bin/python3 19 | import tkinter 20 | import tkinter.messagebox 21 | 22 | tkinter.messagebox.showinfo('title','message') 23 | tkinter.messagebox.showwarning('title','message') 24 | tkinter.messagebox.showerror('title','message') 25 | 26 | ``` 27 | 28 | ![messagebox](img/cf6567c5aadb0ee27d841844145e64bb.jpg) 29 | 30 | ### 点击和消息框 31 | 32 | 下面的示例仅在单击按钮时显示一个消息框。 这类似于现实世界中出现问题时显示消息框的情况。 33 | 34 | ```py 35 | import tkinter 36 | import tkinter.messagebox 37 | 38 | def buttonClick(): 39 | tkinter.messagebox.showinfo('title', 'message') 40 | #tkinter.messagebox.showwarning('title', 'message') 41 | #tkinter.messagebox.showerror('title', 'message') 42 | 43 | root=tkinter.Tk() 44 | root.title('GUI') 45 | root.geometry('100x100') 46 | root.resizable(False, False) 47 | tkinter.Button(root, text='hello button',command=buttonClick).pack() 48 | root.mainloop() 49 | 50 | ``` 51 | 52 | ![messagebox on click](img/12e58f0da6cfbdea5c3fbcbb63c08b6e.jpg) 53 | 54 | [下载 Tkinter 示例](https://gum.co/ErLc) -------------------------------------------------------------------------------- /docs/73.md: -------------------------------------------------------------------------------- 1 | # Tkinter 单选按钮 2 | 3 | > 原文: [https://pythonbasics.org/tkinter_radiobutton/](https://pythonbasics.org/tkinter_radiobutton/) 4 | 5 | 单选按钮使您可以从各种项目中进行选择。 它们是默认 TK 模块的一部分。 与复选框不同,Tkinter 仅允许您选择一个选项。 6 | 7 | 您可以通过为单选按钮添加与参数相同的变量来实现。 如果单击单选按钮,则可以调用回调函数。 8 | 9 | 10 | 11 | ## 单选按钮 12 | 13 | ### Tkinter 单选按钮 14 | 15 | 下面的程序使用方法`Radiobutton`创建 3 个单选按钮。 它添加了一个窗口作为参数,文本,与之连接的变量以及回调函数。 16 | 17 | 为了使它起作用,所有单选按钮都需要链接到相同的变量,在此示例中为`var`。 18 | 19 | ```py 20 | #!/usr/bin/env python 21 | # -*- coding: utf-8 -*- 22 | 23 | import tkinter as tk 24 | 25 | window = tk.Tk() 26 | window.title('My Window') 27 | window.geometry('500x300') 28 | 29 | var = tk.StringVar() 30 | l = tk.Label(window, bg='white', width=20, text='empty') 31 | l.pack() 32 | 33 | def print_selection(): 34 | l.config(text='you have selected ' + var.get()) 35 | 36 | r1 = tk.Radiobutton(window, text='Option A', variable=var, value='A', command=print_selection) 37 | r1.pack() 38 | r2 = tk.Radiobutton(window, text='Option B', variable=var, value='B', command=print_selection) 39 | r2.pack() 40 | r3 = tk.Radiobutton(window, text='Option C', variable=var, value='C', command=print_selection) 41 | r3.pack() 42 | 43 | window.mainloop() 44 | 45 | ``` 46 | 47 | ![tkinter radiobutton](img/8e4982f565ed3c7812443b8670d2fb83.jpg) 48 | 49 | [下载 Tkinter 示例](https://gum.co/ErLc) -------------------------------------------------------------------------------- /docs/74.md: -------------------------------------------------------------------------------- 1 | # Tkinter 刻度 2 | 3 | > 原文: [https://pythonbasics.org/tkinter_scale/](https://pythonbasics.org/tkinter_scale/) 4 | 5 | 您可以在窗口中添加刻度或滑块。 您可能通过音量控制对此很熟悉。 它可以是水平滑块或垂直滑块。 6 | 7 | 刻度具有您可以定义的最小值和最大值。 您可以设置移动滑块时调用的回调函数。 8 | 9 | 10 | 11 | ## 刻度 12 | 13 | ### Tkinter 刻度 14 | 15 | 下面的 Tkinter 程序将创建一个刻度。 您可以定义最小值(`from_`)和最大值(`to`)。 要更改其方向,请更改`orient`参数。 16 | 17 | `tickinterval`是您要设置的(如果不同于)。 您还可以设置其长度。 18 | 19 | ```py 20 | #!/usr/bin/env python 21 | # -*- coding: utf-8 -*- 22 | 23 | import tkinter as tk 24 | 25 | window = tk.Tk() 26 | window.title('My Window') 27 | window.geometry('500x300') 28 | 29 | l = tk.Label(window, bg='white', fg='black', width=20, text='empty') 30 | l.pack() 31 | 32 | def print_selection(v): 33 | l.config(text='you have selected ' + v) 34 | 35 | s = tk.Scale(window, label='try me', from_=0, to=10, orient=tk.HORIZONTAL, length=200, showvalue=0,tickinterval=2, resolution=0.01, command=print_selection) 36 | s.pack() 37 | 38 | window.mainloop() 39 | 40 | ``` 41 | 42 | ![tkinter scale](img/8bce2d3e9f36f46f1b059d586dccdaa8.jpg) 43 | 44 | [下载 Tkinter 示例](https://gum.co/ErLc) -------------------------------------------------------------------------------- /docs/75.md: -------------------------------------------------------------------------------- 1 | # 绘图 -------------------------------------------------------------------------------- /docs/81.md: -------------------------------------------------------------------------------- 1 | # Seaborn 热力图 2 | 3 | > 原文: [https://pythonbasics.org/seaborn_heatmap/](https://pythonbasics.org/seaborn_heatmap/) 4 | 5 | 热力图是矩形数据作为颜色编码矩阵的曲线图。 作为参数,它采用 2D 数据集。 该数据集可以被强制为一个`ndarray`。 6 | 7 | 这是可视化数据的好方法,因为它可以显示包括时间在内的各种变量之间的关系。 例如,历年来的频率。 8 | 9 | 10 | 11 | ## 热力图示例 12 | 13 | ### 热力图 14 | 15 | 下面的热力图图基于 numpy 生成的随机值。 许多参数都是可能的,这只是显示了最基本的图。 16 | 17 | ```py 18 | import pandas as pd 19 | import numpy as np 20 | import seaborn as sns 21 | import matplotlib.pyplot as plt 22 | 23 | np.random.seed(0) 24 | sns.set() 25 | uniform_data = np.random.rand(10, 12) 26 | ax = sns.heatmap(uniform_data, vmin=0, vmax=1) 27 | plt.show() 28 | 29 | ``` 30 | 31 | ![heatmap](img/7c1fd991881176a5622039e83abd17c8.jpg) 32 | 33 | ### 热力图颜色 34 | 35 | 下面的热力图颜色图再次使用了随机数据。 这次,它使用了不同的颜色图(`cmap`),带有“蓝色”调板,但仅是蓝色。 它还使用正方形块。 36 | 37 | ```py 38 | import pandas as pd 39 | import numpy as np 40 | import seaborn as sns 41 | import matplotlib.pyplot as plt 42 | 43 | df = pd.DataFrame(np.random.randn(50).reshape(10,5)) 44 | corr = df.corr() 45 | 46 | ax1 = sns.heatmap(corr, cbar=0, linewidths=2,vmax=1, vmin=0, square=True, cmap='Blues') 47 | plt.show() 48 | 49 | ``` 50 | 51 | ![heatmap colors](img/fa730ce5ba742c146bfa8b3dac4a6a46.jpg) 52 | 53 | ### 热力图数据 54 | 55 | 热力图数据图类似,但是使用不同的调色板。 它使用 Seaborn 中包含的航空公司或航班数据集。 56 | 57 | ```py 58 | import pandas as pd 59 | import numpy as np 60 | import seaborn as sns 61 | import matplotlib.pyplot as plt 62 | 63 | sns.set() 64 | flights = sns.load_dataset("flights") 65 | flights = flights.pivot("month", "year", "passengers") 66 | ax = sns.heatmap(flights) 67 | plt.title("Heatmap Flight Data") 68 | plt.show() 69 | 70 | ``` 71 | 72 | ![heatmap data](img/7506d8c32012e87ad7690628ef32dde1.jpg) -------------------------------------------------------------------------------- /docs/82.md: -------------------------------------------------------------------------------- 1 | # Seaborn 直线图 2 | 3 | > 原文: [https://pythonbasics.org/seaborn_line_plot/](https://pythonbasics.org/seaborn_line_plot/) 4 | 5 | 直线图(`lmplot`)是最基本的图之一。 它在二维平面上显示一条线。 您可以根据自己的喜好使用 Seaborn 或 Matlotlib 进行绘制。 6 | 7 | 下面的示例使用 Seaborn 创建图,但使用 Matplotlib 进行显示。 默认情况下,Seaborn 包括各种数据集,我们使用它们来绘制数据。 8 | 9 | 10 | 11 | ## 直线图 12 | 13 | ### `lmplot` 14 | 15 | `lmplot`图显示了该线以及 2d 空间上的数据点。 通过指定`x`和`y`,可以分别设置水平和垂直标签。 16 | 17 | ```py 18 | import seaborn as sns 19 | import matplotlib.pyplot as plt 20 | 21 | data=sns.load_dataset("tips") 22 | data.head(5) 23 | 24 | sns.set(font_scale=1.5,style="white") 25 | sns.lmplot(x="total_bill",y="tip",data=data) 26 | plt.show() 27 | 28 | ``` 29 | 30 | ![lmplot](img/7e2ac8bd813e9ce9e0e48564f2eda6a7.jpg) 31 | 32 | ### 直线图 33 | 34 | 下图显示了不同类型的直线图。 它们可以是您想要的任何颜色。 我们使用了 Seaborn 中包含的数据集,但这可以用于任何类型的数据。 35 | 36 | ```py 37 | import seaborn as sns 38 | import matplotlib.pyplot as plt 39 | 40 | sns.set(style="ticks") 41 | 42 | # Load the example dataset for Anscombe's quartet 43 | df = sns.load_dataset("anscombe") 44 | 45 | # Show the results of a linear regression within each dataset 46 | sns.lmplot(x="x", y="y", col="dataset", hue="dataset", data=df, 47 | col_wrap=2, ci=None, palette="muted", height=4, 48 | scatter_kws={"s": 50, "alpha": 1}) 49 | 50 | plt.show() 51 | 52 | ``` 53 | 54 | ![line](img/3ebb41b5da1a1a96b2e5787f6b7b8094.jpg) -------------------------------------------------------------------------------- /docs/83.md: -------------------------------------------------------------------------------- 1 | # Seaborn 成对图 2 | 3 | > 原文: [https://pythonbasics.org/seaborn_pairplot/](https://pythonbasics.org/seaborn_pairplot/) 4 | 5 | `pairplot`函数创建一个`Axes`网格,以便数据中的每个变量在单行的`y`轴和单列的`x`轴上共享。 如下所示创建图。 6 | 7 | 8 | 9 | ## 成对图 10 | 11 | ### 成对图 12 | 13 | 成对图显示在下方。 它使用鸢尾花数据集。 数据集有 4 个测量值:萼片宽度,萼片长度,花瓣长度和花瓣宽度。 数据映射在下面的网格中。 由于有 4 个测量值,因此会创建一个 4x4 的图。 14 | 15 | ```py 16 | #!/usr/bin/python3 17 | 18 | import seaborn as sns 19 | 20 | sns.set(style="ticks", color_codes=True) 21 | iris = sns.load_dataset("iris") 22 | g = sns.pairplot(iris) 23 | 24 | import matplotlib.pyplot as plt 25 | plt.show() 26 | 27 | ``` 28 | 29 | ![pairplot](img/9275062544a60324146ef695f479e63c.jpg) 30 | 31 | 如果您希望使用较小的绘图,请使用较少的变量。 例如,如果只需要`sepal_width`和`sepal_length`,则它将创建 2x2 的图。 32 | 33 | ```py 34 | g = sns.pairplot(iris, vars=["sepal_width", "sepal_length"]) 35 | 36 | ``` 37 | 38 | 您可以更改分布的形状。 39 | 40 | ```py 41 | g = sns.pairplot(iris, diag_kind="kde") 42 | 43 | ``` -------------------------------------------------------------------------------- /docs/84.md: -------------------------------------------------------------------------------- 1 | # Seaborn 调色板 2 | 3 | > 原文: [https://pythonbasics.org/seaborn_palette/](https://pythonbasics.org/seaborn_palette/) 4 | 5 | Seaborn 绘图可以使用不同的调色板。 这些调色板决定要在图中使用的颜色。 不论使用哪个数据集,对于任何数据集,您都可以更改调色板。 6 | 7 | 调色板具有不同的名称,例如`"hls"`,`"Blues"`等等。 这些是您拥有的某些调色板选择。 其他调色板包括`"deep"`,`"vlag"`和`"rocket"`。 8 | 9 | 10 | 11 | ## 调色板 12 | 13 | ### 调色板示例 14 | 15 | 下面的示例显示了调色板图。 函数`palplot()`为调色板的颜色创建图形。 它针对不同的调色板执行此操作。 为了简单起见,我们仅显示所有创建的调色板中的一个。 16 | 17 | ```py 18 | import numpy as np 19 | import pandas as pd 20 | import matplotlib.pyplot as plt 21 | import seaborn as sns 22 | 23 | sns.set_context('paper') 24 | 25 | # create plot 26 | sns.palplot(sns.color_palette("hls", 8)) 27 | sns.palplot(sns.color_palette("Paired",10)) 28 | sns.palplot(sns.color_palette("Blues")) 29 | sns.palplot(sns.color_palette("Blues_r")) 30 | sns.palplot(sns.color_palette("BrBG", 7)) 31 | sns.palplot(sns.diverging_palette(10, 220, sep=90, n=7)) 32 | sns.palplot(sns.diverging_palette(255, 133, l=60, n=7, center="dark")) 33 | 34 | plt.show() 35 | 36 | ``` 37 | 38 | ![palette](img/e5ee18911b65ea9d00f3340672ad956c.jpg) -------------------------------------------------------------------------------- /docs/85.md: -------------------------------------------------------------------------------- 1 | # Seaborn Pandas 2 | 3 | > 原文: [https://pythonbasics.org/seaborn_pandas/](https://pythonbasics.org/seaborn_pandas/) 4 | 5 | Pandas 是一个数据分析和处理模块,可帮助您加载和解析数据。 这是您在创建绘图时可能会使用的模块。 6 | 7 | 在 Pandas 中,数据存储在数据帧中。 例如,如果您从 Excel 加载数据。 当然,在处理数据时,您不必使用 Pandas,就像在旅行时不必使用汽车一样。 但这使处理数据变得更加容易。 8 | 9 | 10 | 11 | ## 示例 12 | 13 | ### Pandas 14 | 15 | 从 Pandas 数据帧创建 Seaborn Pandas 图。 数据帧使用随机数据,但实际上,这些数据通常来自数据库,Excel 或其他来源。 16 | 17 | 该程序会创建不同的图,但为简单起见,仅显示一个结果。 18 | 19 | ```py 20 | import numpy as np 21 | import pandas as pd 22 | from scipy import stats 23 | import matplotlib.pyplot as plt 24 | import seaborn as sns 25 | 26 | df_obj1 = pd.DataFrame({"x": np.random.randn(500), 27 | "y": np.random.randn(500)}) 28 | 29 | df_obj2 = pd.DataFrame({"x": np.random.randn(500), 30 | "y": np.random.randint(0, 100, 500)}) 31 | 32 | sns.jointplot(x="x", y="y", data=df_obj2) 33 | sns.jointplot(x="x", y="y", data=df_obj2, kind="hex"); 34 | sns.jointplot(x="x", y="y", data=df_obj1, kind="kde"); 35 | dataset = sns.load_dataset("tips") 36 | sns.pairplot(dataset); 37 | 38 | #titanic = sns.load_dataset('titanic') 39 | #planets = sns.load_dataset('planets') 40 | #flights = sns.load_dataset('flights') 41 | #iris = sns.load_dataset('iris') 42 | exercise = sns.load_dataset('exercise') 43 | sns.stripplot(x="diet", y="pulse", data=exercise) 44 | sns.swarmplot(x="diet", y="pulse", data=exercise, hue='kind') 45 | sns.boxplot(x="diet", y="pulse", data=exercise) 46 | sns.boxplot(x="diet", y="pulse", data=exercise, hue='kind') 47 | sns.violinplot(x="diet", y="pulse", data=exercise, hue='kind') 48 | sns.barplot(x="diet", y="pulse", data=exercise, hue='kind') 49 | sns.pointplot(x="diet", y="pulse", data=exercise, hue='kind'); 50 | 51 | plt.show() 52 | 53 | ``` 54 | 55 | ![seaborn pandas](img/3886f93e64cf4bb372935fcec9653556.jpg) -------------------------------------------------------------------------------- /docs/86.md: -------------------------------------------------------------------------------- 1 | # Seaborn 散点图 2 | 3 | > 原文: [https://pythonbasics.org/seaborn_scatterplot/](https://pythonbasics.org/seaborn_scatterplot/) 4 | 5 | 散点图是具有许多数据点的图。 这是 Seaborn 可以创造的众多土地之一。 Seaborn 是用于统计数据可视化的 Python 模块。 6 | 7 | Seaborn 可以使用`scatterplot()`方法创建该图。 数据点与参数数据一起传递。 参数`x`和`y`是图的标签。 8 | 9 | 10 | 11 | ## 散点图 12 | 13 | ### 基本散点图 14 | 15 | 散点图基本图使用提示数据集。 这是有关基于总账单收到的提示的数据集。 您可以将所需的任何数据集用于散点图,这仅作为基本示例。 16 | 17 | ```py 18 | import numpy as np 19 | import pandas as pd 20 | import matplotlib as mpl 21 | import matplotlib.pyplot as plt 22 | import seaborn as sns 23 | 24 | tips = sns.load_dataset("tips") 25 | sns.set(color_codes=True) 26 | ax = sns.scatterplot(x="total_bill", y="tip", data=tips) 27 | plt.show() 28 | 29 | ``` 30 | 31 | ![scatterplot basic](img/17f3a0c162e06ed8bb6a16a34a0eff4e.jpg) 32 | 33 | ### 散点图 34 | 35 | 散点图也可以包含一条线。 为此,请改用`lmplot`。 这很好地显示了数据点之间的关系。 36 | 37 | ```py 38 | import numpy as np 39 | import pandas as pd 40 | import matplotlib as mpl 41 | import matplotlib.pyplot as plt 42 | import seaborn as sns 43 | sns.set(color_codes=True) 44 | np.random.seed(sum(map(ord, "regression"))) 45 | tips = sns.load_dataset("tips") 46 | tips.head() 47 | sns.lmplot(x="total_bill", y="tip", data=tips) 48 | plt.show() 49 | 50 | ``` 51 | 52 | ![scatterplot](img/fa1216543bb20389c59adc1ddb210fc0.jpg) -------------------------------------------------------------------------------- /docs/88.md: -------------------------------------------------------------------------------- 1 | # PyQt -------------------------------------------------------------------------------- /docs/89.md: -------------------------------------------------------------------------------- 1 | # PyQt 2 | 3 | > 原文: [https://pythonbasics.org/pyqt/](https://pythonbasics.org/pyqt/) 4 | 5 | PyQt 是使用 Python 制作桌面软件的模块。 这适用于所有台式机系统,包括 Mac OS X,Windows 和 Linux。 6 | 7 | 如果要使用 Python 制作桌面应用程序,PyQt 是制作它们的模块。 创建应用程序后,您可以使用 fbs 创建安装程序。 8 | 9 | ![pyqt window with buttons](img/0dae36cbf5a5e7f0b1d59b7d66936b89.jpg) 10 | 11 | 12 | 13 | 14 | ## 教程 15 | 16 | ### 什么是 PyQt? 17 | 18 | PyQt 是 Qt 库(C++)的端口。 Qt 是一个非常强大的 GUI 库。 PyQt 不是单个模块,而是模块的集合。 19 | 20 | 这些模块包括:`QtCore`,`QtGui`,`QtWidgets`,`QtMultimedia`,`QtBluetooth`,`QtNetwork`,`QtPositioning`,`Enginio`,`QtWebSockets`,`QtWebKit`,`QtWebKitWidgets`,`QtXml`,`QtSvg`,`QtSql` 和 `QtTest`。 21 | 22 | 那么这些模块中有什么? 23 | 24 | * `QtCore`:包含核心非 GUI 代码。 25 | 26 | * `QtGui`:具有用于窗口管理的所有内容,例如事件处理和图形。 27 | 28 | * `QtWidgets`:具有许多 UI 窗口小部件,例如按钮,标签,文本输入以及您在桌面窗口中看到的其他内容。 29 | 30 | * `QtMultimedia`:用于多媒体内容和摄像机。 31 | 32 | * `QtBluetooth`:扫描蓝牙设备并连接。 33 | 34 | * `QtNetwork`:一种用于网络编程的跨平台解决方案。 设置可在所有桌面系统上运行的套接字服务器或客户端。 同时支持 TCP/IP 栈和 UDP。 35 | 36 | * `QtPositioning`:通过使用位置(WiFi,卫星)确定位置 37 | 38 | * `QtWebSockets`:Websocket 协议的实现。 39 | 40 | * `QtWebKit`:Web 浏览器实现。 您可以使用它来呈现网页。 这是基于 WebKit2 的。 在 Safari 浏览器中,KDE 和其他人使用 WebKit。 41 | 42 | * `QtWebKitWidgets`:已弃用。 WebKit1 版本的 Web 浏览器实现 43 | 44 | * `QtXml`:使用 XML 文件,读/写等。 45 | 46 | * `QtSvg`:可缩放矢量图形(SVG)。一种图像格式。 47 | 48 | * `QtSql`:与数据库一起使用。 49 | 50 | * `QtTest`:单元测试 51 | 52 | ### 安装 PyQt 53 | 54 | 您可以使用 PyQt 轻松制作桌面软件。 有两种安装 PyQt 的方法:使用安装程序和来自代码。 55 | 56 | 从源代码编译 PyQt 可能是一个繁琐的过程,建议您使用安装程序或软件包管理器进行安装。 (最终用户只需运行安装程序即可安装软件) 57 | 58 | 您可以查看[有关 PyQt 安装](/install-pyqt/)的教程。 59 | 60 | ### 创建应用 61 | 62 | 安装 PyQt 之后,您可以创建各种桌面软件。 PyQt 有许多小部件,包括按钮,输入字段,组合框,Web 视图和其他许多小部件。 63 | 64 | 这很简单,您将在接下来的教程中学习如何做到这一点。 65 | 66 | -------------------------------------------------------------------------------- /docs/9.md: -------------------------------------------------------------------------------- 1 | # 字符串 2 | 3 | > 原文: [https://pythonbasics.org/strings/](https://pythonbasics.org/strings/) 4 | 5 | 每当您想在 Python 中使用文本时,都在使用字符串。 如果您使用双引号,Python 会理解您要使用字符串。 6 | 7 | 创建字符串后,您可以直接直接打印字符串变量。 您可以使用方括号访问字符。 8 | 9 | 10 | 11 | ## 字符串 12 | 13 | ### 定义字符串 14 | 15 | 变量可以是字符串数据类型。 它们可以容纳字符或文本。如果创建字符串变量`x`。 您可以使用`print()`函数在屏幕上显示它。 16 | 17 | ```py 18 | x = "Hello" 19 | print(x) 20 | 21 | ``` 22 | 23 | ### 字符串索引 24 | 25 | 可以使用方括号访问各个字符,计数从零开始。 26 | 27 | ```py 28 | print(x[0]) 29 | print(x[1]) 30 | 31 | ``` 32 | 33 | 第一个字符从零开始。 这可能有点反常,但有历史原因。 34 | 35 | ### 子字符串 36 | 37 | 通过使用冒号,您可以创建一个子字符串。 如果没有写开始或结束编号,Python 会假定您是第一个字符或最后一个字符。 38 | 39 | 请尝试以下示例: 40 | 41 | ```py 42 | x = "hello world" 43 | s = x[0:3] 44 | print(s) 45 | s = x[:3] 46 | print(s) 47 | 48 | ``` 49 | 50 | ### 完整的示例 51 | 52 | 这个例子做了很多字符串操作,例如打印文本,数字,组合字符串,切片和访问元素。 53 | 54 | 请尝试以下程序: 55 | 56 | ```py 57 | x = "Nancy" 58 | print(x) 59 | 60 | # Combine numbers and text 61 | s = "My lucky number is %d, what is yours?" % 7 62 | print(s) 63 | 64 | # alternative method of combining numbers and text 65 | s = "My lucky number is " + str(7) + ", what is yours?" 66 | print(s) 67 | 68 | # print character by index 69 | print(x[0]) 70 | 71 | # print piece of string 72 | print(x[0:3]) 73 | 74 | ``` 75 | 76 | 您应该看到以下输出: 77 | 78 | ![python strings](img/7976965bb93b05a72855c2fcdd899e32.jpg) 79 | 80 | ## 练习 81 | 82 | 试试下面的练习 83 | 84 | 1. 制作一个显示您喜欢的演员的程序。 85 | 2. 尝试在`s`中打印`"lucky"`一词。 86 | 3. 尝试以“今天是 2/2/2016”的格式打印日,月,年。 87 | 88 | [下载示例](https://gum.co/dcsp) -------------------------------------------------------------------------------- /docs/90.md: -------------------------------------------------------------------------------- 1 | # 安装 PyQt 2 | 3 | > 原文: [https://pythonbasics.org/Install-pyqt/](https://pythonbasics.org/Install-pyqt/) 4 | 5 | 默认情况下,通常不安装 PyQt。 在本文中,您将学习如何安装 PyQt 模块。 6 | 7 | 您可以使用 PyQt 制作桌面应用程序。 它是跨平台的,可以在 Windows,Mac OS X 和 Linux 上运行。 8 | 9 | 10 | 11 | 12 | ## 如何在 Windows 上安装 PyQt5? 13 | 14 | 使用 QT 中的安装程序[安装 PyQt](http://qt-project.org/downloads) 。 15 | 16 | 安装 python 3.3,然后检查添加所有 PyQt5 附加功能。 无需编译所有内容,您可以使用安装程序安装软件包。 17 | 18 | 在 Python >= 3.6 上,您也可以尝试安装 PyQt5 19 | 20 | 它应该可以正常工作。 21 | 22 | ## 如何在 Mac OS X 上安装 PyQt5? 23 | 24 | 安装 [Mac OS X 二进制文件](http://qt-project.org/wiki/PySide_Binaries_MacOSX)。 25 | 26 | 然后,您可以使用`brew`安装`pyqt`(在终端中):`brew install pyqt`。 27 | 28 | ## 如何在 Linux 上安装 PyQt5? 29 | 30 | 通常在 Linux 上默认安装 Python。 确保使用 Python3。您可以使用 31 | 32 | `python --version` 33 | 34 | 然后,您可以安装 PyQt 软件包管理器。 35 | 36 | 在 Ubuntu Linux/Debian Linux 上,您可以使用以下命令: 37 | 38 | `sudo apt-get install python3-pyqt5` 39 | 40 | 对于 CentOS 7,使用以下命令: 41 | 42 | `yum install qt5-qtbase-devel` 43 | 44 | 对于基于 RPM 的系统 45 | 46 | `yum install PyQt5` -------------------------------------------------------------------------------- /docs/91.md: -------------------------------------------------------------------------------- 1 | # PyQt Hello World 2 | 3 | > 原文: [https://pythonbasics.org/PyQt-Hello-World/](https://pythonbasics.org/PyQt-Hello-World/) 4 | 5 | 带有 PyQT 的“Hello World”程序是一个用于创建桌面应用程序的模块。 在本文中,您将学习如何在 PyQt 中创建“hello world”应用。 6 | 7 | 如果您想制作桌面应用程序或图形用户界面,PyQT 就是一个很好的模块。 8 | 在开始本教程之前,请确保已安装 PyQt5。 9 | 10 | 11 | 12 | 13 | ## PyQt Hello World 14 | 15 | ### 示例 16 | 17 | 下面的程序创建“hello world”窗口。 18 | 19 | ```py 20 | import sys 21 | from PyQt5.QtWidgets import QApplication, QWidget, QLabel 22 | from PyQt5.QtGui import QIcon 23 | from PyQt5.QtCore import pyqtSlot 24 | 25 | def window(): 26 | app = QApplication(sys.argv) 27 | widget = QWidget() 28 | 29 | textLabel = QLabel(widget) 30 | textLabel.setText("Hello World!") 31 | textLabel.move(110,85) 32 | 33 | widget.setGeometry(50,50,320,200) 34 | widget.setWindowTitle("PyQt5 Example") 35 | widget.show() 36 | sys.exit(app.exec_()) 37 | 38 | if __name__ == '__main__': 39 | window() 40 | 41 | ``` 42 | 43 | ![PyQt hello world](img/b3fa1d153d4b7e9a55395cddbe9c8c0a.jpg) 44 | 45 | ### 工作原理 46 | 47 | PyQT 使用以下代码初始化: 48 | 49 | ```py 50 | app = QApplication(sys.argv) 51 | widget = QWidget() 52 | 53 | ``` 54 | 55 | 文本不能立即添加到窗口中。 必须将其添加到标签。 56 | 57 | 标签是可以显示文本或图像的小部件。 这些行创建一个`QLabel`,设置标签的文本和位置(水平,垂直)。 58 | 59 | ```py 60 | textLabel = QLabel(widget) 61 | textLabel.setText("Hello World!") 62 | textLabel.move(110,85) 63 | 64 | ``` 65 | 66 | 现在您应该显示该窗口。 67 | 68 | 使用`setGeometry()`方法设置起始位置(`50, 50`)和窗口大小(`320, 200`)。 69 | 70 | ```py 71 | widget.setGeometry(50,50,320,200) 72 | 73 | ``` 74 | 75 | 然后您要显示窗口! 用`setWindowTitle()`给它一个标题,并用`show()`显示它。 76 | 77 | ```py 78 | widget.setWindowTitle("PyQt5 Example") 79 | widget.show() 80 | 81 | ``` 82 | 83 | [下载示例](https://gum.co/pysqtsamples) -------------------------------------------------------------------------------- /docs/92.md: -------------------------------------------------------------------------------- 1 | # PyQt 按钮 2 | 3 | > 原文: [https://pythonbasics.org/PyQt-buttons/](https://pythonbasics.org/PyQt-buttons/) 4 | 5 | 按钮(`QPushButton`)可以添加到任何窗口。`QPushButton`类具有用于标签的`setText()`方法和用于位置的`move(x, y)`方法。 6 | 7 | 在本文中,您可以看到如何将按钮添加到窗口以及如何将方法连接到窗口。 8 | 9 | 10 | 11 | 12 | ## PyQt 按钮示例 13 | 14 | ### 信号和槽 15 | 16 | 您可以使用几行代码创建一个按钮: 17 | 18 | ```py 19 | button1 = QPushButton(widget) 20 | button1.setText("Button1") 21 | button1.move(64,32) 22 | 23 | ``` 24 | 25 | 然后将其连接到以下方法: 26 | 27 | ```py 28 | button1.clicked.connect(button1_clicked) 29 | 30 | ``` 31 | 32 | 接收方法称为槽,`clicked.connect`(如果单击了按钮)称为信号。 33 | 34 | ```py 35 | def button1_clicked(): 36 | print("Button 1 clicked") 37 | 38 | ``` 39 | 40 | ![pyqt button QPushButton](img/e9dacd777aeed05cbd5671e083d951a3.jpg) 41 | 42 | ### 按钮示例 43 | 44 | 运行下面的代码以查看一个窗口中的 2 个按钮。 您可以单击任意一个按钮,它们的连接方法将被调用。 45 | 46 | ```py 47 | import sys 48 | from PyQt5.QtWidgets import QApplication, QWidget, QPushButton 49 | from PyQt5.QtGui import QIcon 50 | from PyQt5.QtCore import pyqtSlot 51 | 52 | def window(): 53 | app = QApplication(sys.argv) 54 | widget = QWidget() 55 | 56 | button1 = QPushButton(widget) 57 | button1.setText("Button1") 58 | button1.move(64,32) 59 | button1.clicked.connect(button1_clicked) 60 | 61 | button2 = QPushButton(widget) 62 | button2.setText("Button2") 63 | button2.move(64,64) 64 | button2.clicked.connect(button2_clicked) 65 | 66 | widget.setGeometry(50,50,320,200) 67 | widget.setWindowTitle("PyQt5 Button Click Example") 68 | widget.show() 69 | sys.exit(app.exec_()) 70 | 71 | def button1_clicked(): 72 | print("Button 1 clicked") 73 | 74 | def button2_clicked(): 75 | print("Button 2 clicked") 76 | 77 | if __name__ == '__main__': 78 | window() 79 | 80 | ``` 81 | 82 | [下载示例](https://gum.co/pysqtsamples) -------------------------------------------------------------------------------- /docs/94.md: -------------------------------------------------------------------------------- 1 | # PyQt 网格 2 | 3 | > 原文: [https://pythonbasics.org/PyQt-grid/](https://pythonbasics.org/PyQt-grid/) 4 | 5 | PyQt `QGridLayout`是另一种布局。通常,您可以使用`.move(x, y)`来定位小部件(按钮,标签等)。 网格不是这样。 6 | 7 | 它以 AxB 形式放置小部件。 其中,A 是列数,B 是行数。 与您在 Excel 中看到的类似。 8 | 9 | `QGridLayout`是`PyQt5.QtWidgets`的一部分。 10 | 11 | 12 | 13 | 14 | ## 示例 15 | 16 | ### `QGridLayout` 17 | 18 | 您可以使用单行代码创建`QGridLayout`或网格: 19 | 20 | ```py 21 | grid = QGridLayout() 22 | 23 | ``` 24 | 25 | 告诉窗口使用网格: 26 | 27 | ```py 28 | win.setLayout(grid) 29 | 30 | ``` 31 | 32 | 可以使用以下工具将小部件添加到网格: 33 | 34 | ```py 35 | grid.addWidget(widget,col,row) 36 | 37 | ``` 38 | 39 | ![pyqt grid](img/4e34e239c7da4206afc487ff4b79b533.jpg) 40 | 41 | ### 网格示例 42 | 43 | 下面的代码创建一个包含一组按钮的布局。 它通过使用嵌套的 for 循环添加一组按钮。 44 | 45 | 创建网格的关键部分是: 46 | 47 | ```py 48 | grid = QGridLayout() 49 | 50 | for i in range(0,5): 51 | for j in range(0,5): 52 | grid.addWidget(QPushButton(str(i)+str(j)),i,j) 53 | 54 | win.setLayout(grid) 55 | 56 | ``` 57 | 58 | 其余代码仅创建窗口。 但是复制和粘贴很容易。 59 | 60 | ```py 61 | import sys 62 | from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QGridLayout, QPushButton 63 | from PyQt5.QtGui import QIcon 64 | from PyQt5.QtCore import pyqtSlot 65 | 66 | def window(): 67 | app = QApplication(sys.argv) 68 | win = QWidget() 69 | grid = QGridLayout() 70 | 71 | for i in range(0,5): 72 | for j in range(0,5): 73 | grid.addWidget(QPushButton(str(i)+str(j)),i,j) 74 | 75 | win.setLayout(grid) 76 | win.setWindowTitle("PyQt Grid Example") 77 | win.setGeometry(50,50,200,200) 78 | win.show() 79 | sys.exit(app.exec_()) 80 | 81 | if __name__ == '__main__': 82 | window() 83 | 84 | ``` 85 | 86 | [下载示例](https://gum.co/pysqtsamples) -------------------------------------------------------------------------------- /docs/96.md: -------------------------------------------------------------------------------- 1 | # PyQT `QPixmap` 2 | 3 | > 原文: [https://pythonbasics.org/PyQT-QPixmap/](https://pythonbasics.org/PyQT-QPixmap/) 4 | 5 | `QPixmap`可用于在 PyQT 窗口中显示图像。`QPixmap()`可以加载图像,因为它具有文件名作为参数。 要显示图像,请将`QPixmap`添加到`QLabel`。 6 | 7 | `QPixmap`支持所有主要的图像格式:BMP,GIF,JPG,JPEG,PNG,PBM,PGM,PPM,XBM 和 XPM。 8 | 9 | 10 | 11 | 12 | ## PyQT 图片 13 | 14 | ### `QPixmap` 15 | 16 | 首先创建一个`QPixmap`和一个`Q​​Label`。 然后,您可以像这样组合它们: 17 | 18 | ```py 19 | self.im = QPixmap("./image.jpg") 20 | self.label = QLabel() 21 | self.label.setPixmap(self.im) 22 | 23 | ``` 24 | 25 | 然后将整个内容添加到布局中,例如`QGridLayout` 26 | 27 | ```py 28 | self.grid = QGridLayout() 29 | self.grid.addWidget(self.label,1,1) 30 | self.setLayout(self.grid) 31 | 32 | ``` 33 | 34 | ![image](img/9195bd62158023928fe1a8e1a94ad4ed.jpg) 35 | 36 | ### 示例 37 | 38 | 复制并粘贴下面的代码,以从本地计算机加载图像。 该图像将以网格布局显示。 39 | 40 | ```py 41 | import sys 42 | from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QGridLayout, QWidget 43 | from PyQt5.QtGui import QPixmap 44 | 45 | class Example(QWidget): 46 | 47 | def __init__(self): 48 | super().__init__() 49 | 50 | self.im = QPixmap("./image.jpg") 51 | self.label = QLabel() 52 | self.label.setPixmap(self.im) 53 | 54 | self.grid = QGridLayout() 55 | self.grid.addWidget(self.label,1,1) 56 | self.setLayout(self.grid) 57 | 58 | self.setGeometry(50,50,320,200) 59 | self.setWindowTitle("PyQT show image") 60 | self.show() 61 | 62 | if __name__ == '__main__': 63 | app = QApplication(sys.argv) 64 | ex = Example() 65 | sys.exit(app.exec_()) 66 | 67 | ``` 68 | 69 | [下载示例](https://gum.co/pysqtsamples) -------------------------------------------------------------------------------- /docs/97.md: -------------------------------------------------------------------------------- 1 | # PyQt 组合框 2 | 3 | > 原文: [https://pythonbasics.org/PyQt-combobox/](https://pythonbasics.org/PyQt-combobox/) 4 | 5 | 您可以具有`QComboBox`的组合框,选择框或组合框。 要使用此小部件,请从`PyQt5.QtWidgets`导入`QComboBox`。 6 | 7 | 通常,当用户需要从选定数量的项目(例如国家/地区或合同)中进行选择时,您会看到此小部件。 8 | 9 | 10 | 11 | 12 | ## `QComboBox` 13 | 14 | ### 创建一个组合框 15 | 16 | 您可以使用以下几行创建一个组合框: 17 | 18 | ```py 19 | combo = QComboBox(self) 20 | combo.addItem("Apple") 21 | 22 | ``` 23 | 24 | 方法`addItem`将一个选项添加到组合框中。 您可以根据需要使用不同的选项多次呼叫。 25 | 26 | 要将组合框更改与方法联系起来,可以使用以下方法: 27 | 28 | ```py 29 | combo.activated[str].connect(self.onChanged) 30 | 31 | ``` 32 | 33 | ![pyqt combobox](img/9f48d29be5f240c66f4b4c975d71ebf8.jpg) 34 | 35 | ### 示例 36 | 37 | 下面的代码将组合框添加到窗口。 选择组合框中显示的选项之一后,标签值将更改。 38 | 39 | ```py 40 | import sys 41 | from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QComboBox, QPushButton 42 | 43 | class Example(QMainWindow): 44 | 45 | def __init__(self): 46 | super().__init__() 47 | 48 | combo = QComboBox(self) 49 | combo.addItem("Apple") 50 | combo.addItem("Pear") 51 | combo.addItem("Lemon") 52 | 53 | combo.move(50, 50) 54 | 55 | self.qlabel = QLabel(self) 56 | self.qlabel.move(50,16) 57 | 58 | combo.activated[str].connect(self.onChanged) 59 | 60 | self.setGeometry(50,50,320,200) 61 | self.setWindowTitle("QLineEdit Example") 62 | self.show() 63 | 64 | def onChanged(self, text): 65 | self.qlabel.setText(text) 66 | self.qlabel.adjustSize() 67 | 68 | if __name__ == '__main__': 69 | app = QApplication(sys.argv) 70 | ex = Example() 71 | sys.exit(app.exec_()) 72 | 73 | ``` 74 | 75 | [下载示例](https://gum.co/pysqtsamples) -------------------------------------------------------------------------------- /docs/98.md: -------------------------------------------------------------------------------- 1 | # `QCheckBox` 2 | 3 | > 原文: [https://pythonbasics.org/qcheckbox/](https://pythonbasics.org/qcheckbox/) 4 | 5 | 复选框(`QCheckbox`)是默认的 QT 小部件,可以使用方法`setChecked(true)`进行检查。 它是`PyQt5.QtWidgets`的一部分。 6 | 7 | 您可以使用`.toggled.connect()`添加点击回调/信号。 然后,接收槽可以处理事件。 8 | 9 | ![pyqt checkox](img/c05561472bf0335f0774e08359499538.jpg) 10 | 11 | 12 | 13 | 14 | ## `QCheckBox` 15 | 16 | ### PyQt 复选框示例 17 | 18 | 下面的示例在 PyQt 窗口中创建一个复选框。 如果单击复选框,它将调用方法`onClicked()`。 方法`.isChecked()`可用于获取复选框状态。 19 | 20 | ```py 21 | from PyQt5.QtWidgets import * 22 | import sys 23 | 24 | class Window(QWidget): 25 | def __init__(self): 26 | QWidget.__init__(self) 27 | layout = QGridLayout() 28 | self.setLayout(layout) 29 | 30 | radiobutton = QCheckBox("I have a Cat") 31 | radiobutton.setChecked(True) 32 | radiobutton.animal = "Cat" 33 | radiobutton.toggled.connect(self.onClicked) 34 | layout.addWidget(radiobutton, 0, 0) 35 | 36 | def onClicked(self): 37 | radioButton = self.sender() 38 | print("Animal " + (radioButton.animal) + " is " + str(radioButton.isChecked())) 39 | 40 | app = QApplication(sys.argv) 41 | screen = Window() 42 | screen.show() 43 | sys.exit(app.exec_()) 44 | 45 | ``` 46 | 47 | [下载示例](https://gum.co/pysqtsamples) -------------------------------------------------------------------------------- /docs/99.md: -------------------------------------------------------------------------------- 1 | # `QSlider` 2 | 3 | > 原文: [https://pythonbasics.org/QSlider/](https://pythonbasics.org/QSlider/) 4 | 5 | PyQt 带有滑块`QSlider`。 您可以使用此滑块选择一个值。 滑块可以作为音量的绝佳输入控件。 6 | 7 | 与数字计数器相比,它允许用户快速更改小部件范围上的值。`QSlider`的范围是 0 到 100,其中 100 是 100% 。 8 | 9 | 10 | 11 | 12 | ## `QSlider` 13 | 14 | ### 创建滑块 15 | 16 | 滑块可以是水平或垂直的。 创建滑块时,可以选择一种类型。`Qt.Horizo​​ntal`或`Qt.Vertical`。 17 | 18 | 首先导入`QSlider`和`Qt`。 19 | 20 | ```py 21 | from PyQt5.QtCore import Qt 22 | from PyQt5.QtWidgets import QSlider 23 | 24 | ``` 25 | 26 | 然后创建一个滑块: 27 | 28 | ```py 29 | mySlider = QSlider(Qt.Horizontal, self) 30 | 31 | ``` 32 | 33 | 然后设置其几何形状(位置和大小): 34 | 35 | ```py 36 | mySlider.setGeometry(30, 40, 200, 30) 37 | 38 | ``` 39 | 40 | 并连接一个在更改其值时调用的方法: 41 | 42 | ```py 43 | mySlider.valueChanged[int].connect(self.changeValue) 44 | 45 | ``` 46 | 47 | ![slider pyqt](img/c3325f30c3056719db14ba53a4c357d2.jpg) 48 | 49 | ### 示例 50 | 51 | 下面的程序创建一个带有水平滑块的空窗口。 如果您想使用垂直滑块,请不要忘记更改几何形状。 52 | 53 | 复制并粘贴以下代码以尝试使用滑块: 54 | 55 | ```py 56 | import sys 57 | from PyQt5.QtWidgets import QApplication, QMainWindow, QSlider 58 | from PyQt5.QtCore import Qt 59 | 60 | class Example(QMainWindow): 61 | 62 | def __init__(self): 63 | super().__init__() 64 | 65 | mySlider = QSlider(Qt.Horizontal, self) 66 | mySlider.setGeometry(30, 40, 200, 30) 67 | mySlider.valueChanged[int].connect(self.changeValue) 68 | 69 | self.setGeometry(50,50,320,200) 70 | self.setWindowTitle("Checkbox Example") 71 | self.show() 72 | 73 | def changeValue(self, value): 74 | print(value) 75 | 76 | if __name__ == '__main__': 77 | app = QApplication(sys.argv) 78 | ex = Example() 79 | sys.exit(app.exec_()) 80 | 81 | ``` 82 | 83 | [下载示例](https://gum.co/pysqtsamples) -------------------------------------------------------------------------------- /docs/img/01a0e7f6aa9d823b4e916f08148b4607.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/01a0e7f6aa9d823b4e916f08148b4607.jpg -------------------------------------------------------------------------------- /docs/img/032fd8512b1b4b91c77d473d11e46b59.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/032fd8512b1b4b91c77d473d11e46b59.jpg -------------------------------------------------------------------------------- /docs/img/03ca13c6fd49797b53b5cd1975077dd2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/03ca13c6fd49797b53b5cd1975077dd2.jpg -------------------------------------------------------------------------------- /docs/img/04c365caac017ef3c4bd231cb9b16d4b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/04c365caac017ef3c4bd231cb9b16d4b.jpg -------------------------------------------------------------------------------- /docs/img/05fb777975099dc498022833965a3f72.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/05fb777975099dc498022833965a3f72.jpg -------------------------------------------------------------------------------- /docs/img/063d4109d021245e06c9a9d6e68c98d1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/063d4109d021245e06c9a9d6e68c98d1.jpg -------------------------------------------------------------------------------- /docs/img/0b1177c6ca9fa0869758c96e3c90b773.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/0b1177c6ca9fa0869758c96e3c90b773.jpg -------------------------------------------------------------------------------- /docs/img/0dae36cbf5a5e7f0b1d59b7d66936b89.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/0dae36cbf5a5e7f0b1d59b7d66936b89.jpg -------------------------------------------------------------------------------- /docs/img/10a99b4bfa14d1c38de3cb5b3210decf.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/10a99b4bfa14d1c38de3cb5b3210decf.jpg -------------------------------------------------------------------------------- /docs/img/1285ee716e5081490276503fda01f306.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/1285ee716e5081490276503fda01f306.jpg -------------------------------------------------------------------------------- /docs/img/12e58f0da6cfbdea5c3fbcbb63c08b6e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/12e58f0da6cfbdea5c3fbcbb63c08b6e.jpg -------------------------------------------------------------------------------- /docs/img/1423f5646dd3a4d92eccfc7263fe178c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/1423f5646dd3a4d92eccfc7263fe178c.jpg -------------------------------------------------------------------------------- /docs/img/171a0c2b0e80d17d966bba9840bef893.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/171a0c2b0e80d17d966bba9840bef893.jpg -------------------------------------------------------------------------------- /docs/img/17435cec8c3aac6a772b29cab2051871.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/17435cec8c3aac6a772b29cab2051871.jpg -------------------------------------------------------------------------------- /docs/img/17f3a0c162e06ed8bb6a16a34a0eff4e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/17f3a0c162e06ed8bb6a16a34a0eff4e.jpg -------------------------------------------------------------------------------- /docs/img/18d081183db7fd09fc0f1f26e70217ce.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/18d081183db7fd09fc0f1f26e70217ce.jpg -------------------------------------------------------------------------------- /docs/img/19c8b8b00bad93b9152130737a32fd14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/19c8b8b00bad93b9152130737a32fd14.jpg -------------------------------------------------------------------------------- /docs/img/1a415ebe54db32e36ceace468b326629.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/1a415ebe54db32e36ceace468b326629.jpg -------------------------------------------------------------------------------- /docs/img/1bc5e8d0c41245289be5ff46fc769e1f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/1bc5e8d0c41245289be5ff46fc769e1f.jpg -------------------------------------------------------------------------------- /docs/img/1c6e625ed7262e6bac5f6e12d1ed7531.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/1c6e625ed7262e6bac5f6e12d1ed7531.jpg -------------------------------------------------------------------------------- /docs/img/266da6b6042831619c7fc89594eb03fc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/266da6b6042831619c7fc89594eb03fc.jpg -------------------------------------------------------------------------------- /docs/img/286f2e902c088e653e8b3c290ba073d3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/286f2e902c088e653e8b3c290ba073d3.jpg -------------------------------------------------------------------------------- /docs/img/2e75548e489bfe9df1de42082b85a0af.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/2e75548e489bfe9df1de42082b85a0af.jpg -------------------------------------------------------------------------------- /docs/img/2f3c943a5c5e6309dc82d8e9cec78f8f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/2f3c943a5c5e6309dc82d8e9cec78f8f.jpg -------------------------------------------------------------------------------- /docs/img/313eafe86a326c40ae5a767c1d4d8a9d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/313eafe86a326c40ae5a767c1d4d8a9d.jpg -------------------------------------------------------------------------------- /docs/img/31796db0ca619bca6133e335b49b7867.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/31796db0ca619bca6133e335b49b7867.jpg -------------------------------------------------------------------------------- /docs/img/340d45a74478864f1574d91d2c2895c2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/340d45a74478864f1574d91d2c2895c2.jpg -------------------------------------------------------------------------------- /docs/img/348dbde3c3b4908341a7193f7d2b679c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/348dbde3c3b4908341a7193f7d2b679c.jpg -------------------------------------------------------------------------------- /docs/img/35aeff297d310511e6b1868510a103de.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/35aeff297d310511e6b1868510a103de.jpg -------------------------------------------------------------------------------- /docs/img/3886f93e64cf4bb372935fcec9653556.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/3886f93e64cf4bb372935fcec9653556.jpg -------------------------------------------------------------------------------- /docs/img/3ebb41b5da1a1a96b2e5787f6b7b8094.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/3ebb41b5da1a1a96b2e5787f6b7b8094.jpg -------------------------------------------------------------------------------- /docs/img/3f9262623f4186097a65064977cc613a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/3f9262623f4186097a65064977cc613a.jpg -------------------------------------------------------------------------------- /docs/img/3fad49c52b48a78b153387af8ec57421.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/3fad49c52b48a78b153387af8ec57421.jpg -------------------------------------------------------------------------------- /docs/img/40381d87dcf1cdf4992a4130e8a00a9c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/40381d87dcf1cdf4992a4130e8a00a9c.jpg -------------------------------------------------------------------------------- /docs/img/4060d9fd58b873f1de971a59295495b1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/4060d9fd58b873f1de971a59295495b1.jpg -------------------------------------------------------------------------------- /docs/img/4869e893634e8cbc70809a8a73699b79.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/4869e893634e8cbc70809a8a73699b79.jpg -------------------------------------------------------------------------------- /docs/img/4a49cf10d85187e98482d7b5e5afa647.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/4a49cf10d85187e98482d7b5e5afa647.jpg -------------------------------------------------------------------------------- /docs/img/4d488a4b8ad3429ee4f4844eaee6eea9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/4d488a4b8ad3429ee4f4844eaee6eea9.jpg -------------------------------------------------------------------------------- /docs/img/4d5254ecc51f45a1300f4157eda157be.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/4d5254ecc51f45a1300f4157eda157be.jpg -------------------------------------------------------------------------------- /docs/img/4e34e239c7da4206afc487ff4b79b533.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/4e34e239c7da4206afc487ff4b79b533.jpg -------------------------------------------------------------------------------- /docs/img/4eeaf7dcf76d5211d707f2d19f877634.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/4eeaf7dcf76d5211d707f2d19f877634.jpg -------------------------------------------------------------------------------- /docs/img/517deda3749905c02bf0cde152465323.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/517deda3749905c02bf0cde152465323.jpg -------------------------------------------------------------------------------- /docs/img/52e206bcc9cfbd565d1bfefbf8f6f304.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/52e206bcc9cfbd565d1bfefbf8f6f304.jpg -------------------------------------------------------------------------------- /docs/img/534c12b1e266e1f454ebb80b282f2c3f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/534c12b1e266e1f454ebb80b282f2c3f.jpg -------------------------------------------------------------------------------- /docs/img/53c0a3ad6e436f624fdb6710b8f2560a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/53c0a3ad6e436f624fdb6710b8f2560a.jpg -------------------------------------------------------------------------------- /docs/img/5758a5a50b43467cc585b3970915c696.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/5758a5a50b43467cc585b3970915c696.jpg -------------------------------------------------------------------------------- /docs/img/579fbc8c8b4281a080cc8fabc03918e0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/579fbc8c8b4281a080cc8fabc03918e0.jpg -------------------------------------------------------------------------------- /docs/img/57fb7912dc28c38162a13f0cba302365.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/57fb7912dc28c38162a13f0cba302365.jpg -------------------------------------------------------------------------------- /docs/img/5c749f6c8613fd4c994678694ca1e07b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/5c749f6c8613fd4c994678694ca1e07b.jpg -------------------------------------------------------------------------------- /docs/img/5d99d2bfbe94d99072e9460d40821ee1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/5d99d2bfbe94d99072e9460d40821ee1.jpg -------------------------------------------------------------------------------- /docs/img/5db8ee11bbc4bf73c598c22f49d4ea4a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/5db8ee11bbc4bf73c598c22f49d4ea4a.jpg -------------------------------------------------------------------------------- /docs/img/5ec64e3c0ecbb2c70baadd00712318da.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/5ec64e3c0ecbb2c70baadd00712318da.jpg -------------------------------------------------------------------------------- /docs/img/5ed0b94ec1f4ed3fce1378f5f3bef853.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/5ed0b94ec1f4ed3fce1378f5f3bef853.jpg -------------------------------------------------------------------------------- /docs/img/61ed7d26f888c86bd50826965628f8e1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/61ed7d26f888c86bd50826965628f8e1.jpg -------------------------------------------------------------------------------- /docs/img/638ed41320bc173598f5573a82f94288.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/638ed41320bc173598f5573a82f94288.jpg -------------------------------------------------------------------------------- /docs/img/6532c8e5d0a1623681476abb176b35f6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/6532c8e5d0a1623681476abb176b35f6.jpg -------------------------------------------------------------------------------- /docs/img/65fc960355b27bb4127f86b0eb80b24e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/65fc960355b27bb4127f86b0eb80b24e.jpg -------------------------------------------------------------------------------- /docs/img/6698c6cc40057eb1f4c8f9fe8432c7d0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/6698c6cc40057eb1f4c8f9fe8432c7d0.jpg -------------------------------------------------------------------------------- /docs/img/67d51bd9c24ee03dca2a71cbe364c63e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/67d51bd9c24ee03dca2a71cbe364c63e.jpg -------------------------------------------------------------------------------- /docs/img/69dd4267c143832448cb1e6ba46ad062.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/69dd4267c143832448cb1e6ba46ad062.jpg -------------------------------------------------------------------------------- /docs/img/7018394c192b6f4bb6a7c00a84966a8d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/7018394c192b6f4bb6a7c00a84966a8d.jpg -------------------------------------------------------------------------------- /docs/img/7398f5673c673324cae1e8cc3386c337.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/7398f5673c673324cae1e8cc3386c337.jpg -------------------------------------------------------------------------------- /docs/img/73f6512e1f8ebce243695f723c837fe4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/73f6512e1f8ebce243695f723c837fe4.jpg -------------------------------------------------------------------------------- /docs/img/7506d8c32012e87ad7690628ef32dde1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/7506d8c32012e87ad7690628ef32dde1.jpg -------------------------------------------------------------------------------- /docs/img/76f680ba194c061f9b7578d7e228e08f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/76f680ba194c061f9b7578d7e228e08f.jpg -------------------------------------------------------------------------------- /docs/img/7976965bb93b05a72855c2fcdd899e32.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/7976965bb93b05a72855c2fcdd899e32.jpg -------------------------------------------------------------------------------- /docs/img/79a66fc75d419b006ca2189da2f75d08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/79a66fc75d419b006ca2189da2f75d08.jpg -------------------------------------------------------------------------------- /docs/img/7abfe71cbe8a2a2a5d896122b9f66de2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/7abfe71cbe8a2a2a5d896122b9f66de2.jpg -------------------------------------------------------------------------------- /docs/img/7b3d5c4209c210120366a607eb41d2ce.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/7b3d5c4209c210120366a607eb41d2ce.jpg -------------------------------------------------------------------------------- /docs/img/7b5684cef5f31682794e97f444fc887c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/7b5684cef5f31682794e97f444fc887c.jpg -------------------------------------------------------------------------------- /docs/img/7c1fd991881176a5622039e83abd17c8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/7c1fd991881176a5622039e83abd17c8.jpg -------------------------------------------------------------------------------- /docs/img/7d686acf4a7018708424fe7d588f16ad.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/7d686acf4a7018708424fe7d588f16ad.jpg -------------------------------------------------------------------------------- /docs/img/7d8c03d7c6fb8725971fb0949d46c5e9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/7d8c03d7c6fb8725971fb0949d46c5e9.jpg -------------------------------------------------------------------------------- /docs/img/7e2ac8bd813e9ce9e0e48564f2eda6a7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/7e2ac8bd813e9ce9e0e48564f2eda6a7.jpg -------------------------------------------------------------------------------- /docs/img/7ffa9164aadd674786993cfe95532e31.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/7ffa9164aadd674786993cfe95532e31.jpg -------------------------------------------------------------------------------- /docs/img/81a0de4a1d5d8968f59be757e89c6d21.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/81a0de4a1d5d8968f59be757e89c6d21.jpg -------------------------------------------------------------------------------- /docs/img/82096cc9222262b931bc39f3ae123fa0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/82096cc9222262b931bc39f3ae123fa0.jpg -------------------------------------------------------------------------------- /docs/img/825e92bb7921bc6d5dfa1e98f1a31d75.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/825e92bb7921bc6d5dfa1e98f1a31d75.jpg -------------------------------------------------------------------------------- /docs/img/8292ea0593c00b16347673105d653bcc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/8292ea0593c00b16347673105d653bcc.jpg -------------------------------------------------------------------------------- /docs/img/829fe2added3fe57b08d7386b01be26c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/829fe2added3fe57b08d7386b01be26c.jpg -------------------------------------------------------------------------------- /docs/img/8348ad25313746f0dfecbe3da29fec18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/8348ad25313746f0dfecbe3da29fec18.jpg -------------------------------------------------------------------------------- /docs/img/8633b18ca0aedbc0c2aa0841fa26afdf.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/8633b18ca0aedbc0c2aa0841fa26afdf.jpg -------------------------------------------------------------------------------- /docs/img/87db5229ba75516510d6d77cf0ac187c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/87db5229ba75516510d6d77cf0ac187c.jpg -------------------------------------------------------------------------------- /docs/img/88e7ac055172b8f704169b613c7f4b7f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/88e7ac055172b8f704169b613c7f4b7f.jpg -------------------------------------------------------------------------------- /docs/img/8bce2d3e9f36f46f1b059d586dccdaa8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/8bce2d3e9f36f46f1b059d586dccdaa8.jpg -------------------------------------------------------------------------------- /docs/img/8e4982f565ed3c7812443b8670d2fb83.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/8e4982f565ed3c7812443b8670d2fb83.jpg -------------------------------------------------------------------------------- /docs/img/8ea20cca971f6e3ac9aa58f3758e579b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/8ea20cca971f6e3ac9aa58f3758e579b.jpg -------------------------------------------------------------------------------- /docs/img/9195bd62158023928fe1a8e1a94ad4ed.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/9195bd62158023928fe1a8e1a94ad4ed.jpg -------------------------------------------------------------------------------- /docs/img/91a1febe058f4d82b43d642a7e9fa9bb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/91a1febe058f4d82b43d642a7e9fa9bb.jpg -------------------------------------------------------------------------------- /docs/img/9275062544a60324146ef695f479e63c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/9275062544a60324146ef695f479e63c.jpg -------------------------------------------------------------------------------- /docs/img/93ba1beccbdd7671d2f987f5d8ce0ffb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/93ba1beccbdd7671d2f987f5d8ce0ffb.jpg -------------------------------------------------------------------------------- /docs/img/9407ce3a47e209822978ef051a94a41c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/9407ce3a47e209822978ef051a94a41c.jpg -------------------------------------------------------------------------------- /docs/img/98fc53d81bdc36257d084ee3357e2890.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/98fc53d81bdc36257d084ee3357e2890.jpg -------------------------------------------------------------------------------- /docs/img/9afc0d0e17e26be6930a6d0bdba3f350.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/9afc0d0e17e26be6930a6d0bdba3f350.jpg -------------------------------------------------------------------------------- /docs/img/9d495f1865a9af371d19c932ee8f1176.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/9d495f1865a9af371d19c932ee8f1176.jpg -------------------------------------------------------------------------------- /docs/img/9f42c9b17efc8d19906b7716ba8f8db7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/9f42c9b17efc8d19906b7716ba8f8db7.jpg -------------------------------------------------------------------------------- /docs/img/9f469ed71397ffb5172d715df52db1fd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/9f469ed71397ffb5172d715df52db1fd.jpg -------------------------------------------------------------------------------- /docs/img/9f48d29be5f240c66f4b4c975d71ebf8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/9f48d29be5f240c66f4b4c975d71ebf8.jpg -------------------------------------------------------------------------------- /docs/img/a00bd824aae90021b95e57c905444e0f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/a00bd824aae90021b95e57c905444e0f.jpg -------------------------------------------------------------------------------- /docs/img/a4ad0ac569db24ffce3a2765c083ff3e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/a4ad0ac569db24ffce3a2765c083ff3e.jpg -------------------------------------------------------------------------------- /docs/img/a578844d3e2d5e4b4320841a5cc9c5be.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/a578844d3e2d5e4b4320841a5cc9c5be.jpg -------------------------------------------------------------------------------- /docs/img/a6a91551430cb92d00e95bb8dfef21ae.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/a6a91551430cb92d00e95bb8dfef21ae.jpg -------------------------------------------------------------------------------- /docs/img/a6e17ee8ef9f4da192a098df4379de55.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/a6e17ee8ef9f4da192a098df4379de55.jpg -------------------------------------------------------------------------------- /docs/img/a6f752b0bc9c986ac77db7b6c3a6b687.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/a6f752b0bc9c986ac77db7b6c3a6b687.jpg -------------------------------------------------------------------------------- /docs/img/a7ac1d44dbcb12e214dcd437f4f170f3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/a7ac1d44dbcb12e214dcd437f4f170f3.jpg -------------------------------------------------------------------------------- /docs/img/a81fc17818bea20c790af62f3a7a8872.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/a81fc17818bea20c790af62f3a7a8872.jpg -------------------------------------------------------------------------------- /docs/img/aa005db92c8848264576560e928e14f9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/aa005db92c8848264576560e928e14f9.jpg -------------------------------------------------------------------------------- /docs/img/abf794aefdaf1d442160917065dfd108.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/abf794aefdaf1d442160917065dfd108.jpg -------------------------------------------------------------------------------- /docs/img/ae8e6eb853cd61665d2bfd313a2d391e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/ae8e6eb853cd61665d2bfd313a2d391e.jpg -------------------------------------------------------------------------------- /docs/img/afce6850a2a06a40147e8718e12263cb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/afce6850a2a06a40147e8718e12263cb.jpg -------------------------------------------------------------------------------- /docs/img/b2c25ad5890802ea7ef9624d826e9b07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/b2c25ad5890802ea7ef9624d826e9b07.jpg -------------------------------------------------------------------------------- /docs/img/b2e386f1018d9d5074bfd4b2300c8d01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/b2e386f1018d9d5074bfd4b2300c8d01.jpg -------------------------------------------------------------------------------- /docs/img/b3fa1d153d4b7e9a55395cddbe9c8c0a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/b3fa1d153d4b7e9a55395cddbe9c8c0a.jpg -------------------------------------------------------------------------------- /docs/img/b541c855ea24b82e547dfb8a696a4523.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/b541c855ea24b82e547dfb8a696a4523.jpg -------------------------------------------------------------------------------- /docs/img/b64666a360b2e06bf576beb83706d6f0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/b64666a360b2e06bf576beb83706d6f0.jpg -------------------------------------------------------------------------------- /docs/img/b7cd8da3d83b8b7986aa097956f6472c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/b7cd8da3d83b8b7986aa097956f6472c.jpg -------------------------------------------------------------------------------- /docs/img/b7ce2d469aa8be5727237b53886713d3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/b7ce2d469aa8be5727237b53886713d3.jpg -------------------------------------------------------------------------------- /docs/img/b7d7436549630e570c53922ca7771eda.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/b7d7436549630e570c53922ca7771eda.jpg -------------------------------------------------------------------------------- /docs/img/b809845b2993e4deab4f30fe4c04c137.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/b809845b2993e4deab4f30fe4c04c137.jpg -------------------------------------------------------------------------------- /docs/img/b846c5f8fde20fcdeef56fff17542aef.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/b846c5f8fde20fcdeef56fff17542aef.jpg -------------------------------------------------------------------------------- /docs/img/b8fbe36ec9fbec5e52c7ce05781b4742.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/b8fbe36ec9fbec5e52c7ce05781b4742.jpg -------------------------------------------------------------------------------- /docs/img/b99515f7c4187ff3259d9105e70f3bd6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/b99515f7c4187ff3259d9105e70f3bd6.jpg -------------------------------------------------------------------------------- /docs/img/be2842c0ef133ea766f753872ae8c324.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/be2842c0ef133ea766f753872ae8c324.jpg -------------------------------------------------------------------------------- /docs/img/be45efc6bdd10368a1f750fa80e0a691.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/be45efc6bdd10368a1f750fa80e0a691.jpg -------------------------------------------------------------------------------- /docs/img/c05561472bf0335f0774e08359499538.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/c05561472bf0335f0774e08359499538.jpg -------------------------------------------------------------------------------- /docs/img/c0ebe078f580acf33bdbd871884e2a85.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/c0ebe078f580acf33bdbd871884e2a85.jpg -------------------------------------------------------------------------------- /docs/img/c14011f6cb8ac3d59afd69054b81ea28.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/c14011f6cb8ac3d59afd69054b81ea28.jpg -------------------------------------------------------------------------------- /docs/img/c3325f30c3056719db14ba53a4c357d2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/c3325f30c3056719db14ba53a4c357d2.jpg -------------------------------------------------------------------------------- /docs/img/c4bffea2394972c70ab2ccab9d79700e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/c4bffea2394972c70ab2ccab9d79700e.jpg -------------------------------------------------------------------------------- /docs/img/c538d52f29968b5dd86a6ee9c394a355.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/c538d52f29968b5dd86a6ee9c394a355.jpg -------------------------------------------------------------------------------- /docs/img/c9b1087694d000a610185c965cc39375.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/c9b1087694d000a610185c965cc39375.jpg -------------------------------------------------------------------------------- /docs/img/caadfaa42347babf3b1e1cbc49bc3476.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/caadfaa42347babf3b1e1cbc49bc3476.jpg -------------------------------------------------------------------------------- /docs/img/cc85ee1c6b20cf7ff6a49745c13a142d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/cc85ee1c6b20cf7ff6a49745c13a142d.jpg -------------------------------------------------------------------------------- /docs/img/cdf522a40765adb08e20bb6318215982.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/cdf522a40765adb08e20bb6318215982.jpg -------------------------------------------------------------------------------- /docs/img/ced3590bd768580465b8f2fc7dcbf57d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/ced3590bd768580465b8f2fc7dcbf57d.jpg -------------------------------------------------------------------------------- /docs/img/cf6567c5aadb0ee27d841844145e64bb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/cf6567c5aadb0ee27d841844145e64bb.jpg -------------------------------------------------------------------------------- /docs/img/d1daeade8423826325f8b569bf16acc5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/d1daeade8423826325f8b569bf16acc5.jpg -------------------------------------------------------------------------------- /docs/img/d545576b02a082b367909f9271020d5f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/d545576b02a082b367909f9271020d5f.jpg -------------------------------------------------------------------------------- /docs/img/d56fc5a3cd19ce218ca107d7d46d9dee.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/d56fc5a3cd19ce218ca107d7d46d9dee.jpg -------------------------------------------------------------------------------- /docs/img/d64bb0b04092fe87118d67e850135a32.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/d64bb0b04092fe87118d67e850135a32.jpg -------------------------------------------------------------------------------- /docs/img/d94bc3378d5cbdc5aa8d3a5c32b3dd69.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/d94bc3378d5cbdc5aa8d3a5c32b3dd69.jpg -------------------------------------------------------------------------------- /docs/img/da14970297111ba7950c50388c6f1db1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/da14970297111ba7950c50388c6f1db1.jpg -------------------------------------------------------------------------------- /docs/img/db1c79c7582f54416959b6cc7e0acfaa.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/db1c79c7582f54416959b6cc7e0acfaa.jpg -------------------------------------------------------------------------------- /docs/img/de39095660d68731ea5870a862a1f418.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/de39095660d68731ea5870a862a1f418.jpg -------------------------------------------------------------------------------- /docs/img/de50db4d8c83ca3e879b7e5b6684a3bd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/de50db4d8c83ca3e879b7e5b6684a3bd.jpg -------------------------------------------------------------------------------- /docs/img/e0899da7ba3f5b7de1e37e2be3467116.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/e0899da7ba3f5b7de1e37e2be3467116.jpg -------------------------------------------------------------------------------- /docs/img/e09bbb4accc7a5986de59b3f2e563d16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/e09bbb4accc7a5986de59b3f2e563d16.jpg -------------------------------------------------------------------------------- /docs/img/e14e2b651fb04237b78720db22bca94f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/e14e2b651fb04237b78720db22bca94f.jpg -------------------------------------------------------------------------------- /docs/img/e238a9edc229de15d7efe37f83b76b42.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/e238a9edc229de15d7efe37f83b76b42.jpg -------------------------------------------------------------------------------- /docs/img/e2e92407fdba1cf47871fe2861131c69.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/e2e92407fdba1cf47871fe2861131c69.jpg -------------------------------------------------------------------------------- /docs/img/e365b8334e16f08859c82d935b84f4ec.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/e365b8334e16f08859c82d935b84f4ec.jpg -------------------------------------------------------------------------------- /docs/img/e38358b1c99d35f57cc7ccb6f3c5f3f0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/e38358b1c99d35f57cc7ccb6f3c5f3f0.jpg -------------------------------------------------------------------------------- /docs/img/e5ee18911b65ea9d00f3340672ad956c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/e5ee18911b65ea9d00f3340672ad956c.jpg -------------------------------------------------------------------------------- /docs/img/e9903b3a1ee470475881379bcfee22ac.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/e9903b3a1ee470475881379bcfee22ac.jpg -------------------------------------------------------------------------------- /docs/img/e9d04a97c37222a7c48d0730bf3dcc10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/e9d04a97c37222a7c48d0730bf3dcc10.jpg -------------------------------------------------------------------------------- /docs/img/e9dacd777aeed05cbd5671e083d951a3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/e9dacd777aeed05cbd5671e083d951a3.jpg -------------------------------------------------------------------------------- /docs/img/eb7fee5ada5c5f4e89b8b82e1a9befcb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/eb7fee5ada5c5f4e89b8b82e1a9befcb.jpg -------------------------------------------------------------------------------- /docs/img/ef85022bec451c83cd8bd1f89fab9116.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/ef85022bec451c83cd8bd1f89fab9116.jpg -------------------------------------------------------------------------------- /docs/img/ef9dff0e7bf0efcd3230a04478370867.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/ef9dff0e7bf0efcd3230a04478370867.jpg -------------------------------------------------------------------------------- /docs/img/f242bcf3542f9154b1000948515ae8d0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/f242bcf3542f9154b1000948515ae8d0.jpg -------------------------------------------------------------------------------- /docs/img/f33baba9840d1f4a7c43d5bb70282c8e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/f33baba9840d1f4a7c43d5bb70282c8e.jpg -------------------------------------------------------------------------------- /docs/img/fa1216543bb20389c59adc1ddb210fc0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/fa1216543bb20389c59adc1ddb210fc0.jpg -------------------------------------------------------------------------------- /docs/img/fa730ce5ba742c146bfa8b3dac4a6a46.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/fa730ce5ba742c146bfa8b3dac4a6a46.jpg -------------------------------------------------------------------------------- /docs/img/fb6573533db2359eab44f7549e6d6157.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/fb6573533db2359eab44f7549e6d6157.jpg -------------------------------------------------------------------------------- /docs/img/fd8e8017293a8080614eefedfdc5c6b2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/pythonbasics-zh/22cfb4b5150ce4a5518530a1d986922a9445bffd/docs/img/fd8e8017293a8080614eefedfdc5c6b2.jpg -------------------------------------------------------------------------------- /update.sh: -------------------------------------------------------------------------------- 1 | git add -A 2 | git commit -am "$(date "+%Y-%m-%d %H:%M:%S")" 3 | git push --------------------------------------------------------------------------------