forked from HappySnailSunshine/JavaInterview
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Python.md
5331 lines (3477 loc) · 149 KB
/
Python.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Python
> 这一部分是在B站学习黑马的Python课程的时候,老师的笔记,放在这里,是为了方便查阅。
>
> 有一些是笔者自己在学习过程中做的记录。
# 在虚拟机中安装 Ubuntu
## 步骤
1. 安装前的准备和基本安装
2. 设置语言环境
3. 安装常用软件
## 1. 安装前的准备和基本安装
### 1.1 安装前的准备
* 访问 http://cn.ubuntu.com/download/ 下载 Ubuntu 16.04 版本
* 在操作系统上安装 `VMWare` 虚拟机软件
> 为什么要使用虚拟机?
>
> 1. 不需要准备 **额外的电脑**
> 2. 在虚拟机中可以 **大胆尝试任何操作**,不用担心造成不可逆转的破坏
### 1.2 基本安装
* 有了映像文件之后,只需要按照提示一步一步操作即可安装 Ubuntu 了
* **提示**,在开始安装之前,请确认勾选了 **在虚拟机中访问个人文件夹**,如下图所示:
<img src='images/001_安装前的设置.png' width='60%' /img>
> 该选项可以方便地实现在 **虚拟机** 和 **个人电脑** 之间共享文件
* 安装结束后,登录并且进入系统,可以看到以下画面:
<img src='images/002_默认安装完成.png' width='75%' /img>
## 2. 设置语言环境
按照以下步骤操作可以修改 ubuntu 的语言环境
* 1) 进入 **系统设置 System Settings**
* 2) 打开 **语言支持 Language Support**
* 3) 通过 **安装/删除语言 Install/Remove Languages** 添加 **简体中文 Chinese(simplified)**
* 4) 将 **汉语** 拖拽到 **顶部**,如下图所示:
<img src='images/003_将汉语拖拽到顶部.png' width='75%' /img>
* 5) **重新启动系统**
* 6) **不** 修改文件夹的名称,如下图所示:
<img src='images/004_不修改文件夹名称.png' width='75%' /img>
## 3. 安装常用软件
* 3.1 设置服务器镜像源
* 3.2 在启动栏添加 **终端** 图标
* 3.3 **apt** 终端命令
* 3.4 谷歌浏览器 chrome
* 3.5 搜狗输入法
### 3.1 设置服务器镜像源
* Ubuntu 中 **大部分** 的软件 **安装/更新** 都是利用 `apt` 命令,从 **ubuntu 的服务器** 直接安装的
* Ubuntu **官方的服务器在国外**,为了提高软件 **安装/更新速度**,**ubuntu** 提供了 **选择最佳服务器** 的功能,可以帮助我们方便的找到一个速度最快的 **镜像服务器**!
> 所谓 **镜像服务器**,就是 **所有服务器的内容是相同的(镜像)**,但是根据所在位置不同,速度不同,通常国内服务器速度会更快一些!
按照以下步骤操作可以设置 ubuntu 的服务器
* 1) 进入 **系统设置**
* 2) 打开 **软件和更新**
* 3) 设置 **下载自...** **其他站点**
* 4) 通过 **选择最佳服务器** 选择速度最快的 **镜像源**,如下图所示:
<img src='images/005_自动选择服务器.png' width='75%' /img>
**提示**:更换服务器之后,需要一个相对比较长时间的更新过程,需要耐心等待。更新完成后,再安装软件都会从新设置的服务器下载软件了
### 3.2 在启动栏添加 **终端** 图标
* Ubuntu 的 **启动栏** 类似于 Windows 的 **任务栏**,可以显示 **常用软件图标** 和 **正在运行的软件图标**
* 通常 Linux 的用户使用 **终端命令** 的频率非常高,所以会把 **终端** 添加到 **启动栏**
* 通过最上方的 **搜索** 按钮可以 **搜索并启动** 需要使用的程序
* **点击右键** 可以 **保留**、**删除** 或者 **移动** 启动栏中图标
* 可以把最常用的软件图标,**保留** 在启动栏,可以方便快速启动程序
### 3.3 apt 终端命令
* `apt` 是 `Advanced Packaging Tool`,是 Ubuntu 下的 **安装包管理工具**
* **大部分** 的软件 **安装/更新/卸载** 都是利用 `apt` 命令来实现的
* 直接在终端中输入 `apt` 即可以查阅命令的帮助信息
* 常用命令如下:
```bash
# 1. 安装软件
$ sudo apt install 软件名
# 2. 卸载软件
$ sudo apt remove 软件名
# 3. 更新可用软件包列表
$ sudo apt update
# 4. 更新已安装的包
$ sudo apt upgrade
```
#### 1) 软件更新和升级
* 通常安装完 ubuntu 之后,可以先使用 `upgrade` 更新一下当前系统中可以升级的的软件包
```bash
$ sudo apt update
$ sudo apt upgrade
```
* **提示** 如果增加、更换了软件源,通常需要使用 `update` 更新一下本地缓存
#### 2) 安装常用工具
**提示** apt 安装命令的格式是不需要记忆的,如果在终端中输入的软件没有安装,系统会提示 **apt 命令** 的使用格式
##### python 程序员
```bash
$ sudo apt install ipython
$ sudo apt install ipython3
$ sudo apt install python-pip
$ sudo apt install python3-pip
```
##### C++ 程序员
```bash
$ sudo apt install cmake
$ sudo apt install qtcreator
```
##### ruby 程序员
```bash
$ sudo apt install ruby
```
##### 安装 ssh 服务器
```bash
sudo apt install openssh-server
```
安装之后,才可以在其他系统中,通过 ssh 工具远程登陆
#### 3) 删除不使用的软件
**libreoffice**
* `libreoffice` 是一套类似于 `微软 Office` 的 **免费的** 办公套件
* 不过无论是界面交互还是执行性能都还有很大的提升空间
* 卸载 libreoffice 可以释放大概 **300M** 的磁盘空间
```bash
$ sudo apt remove libreoffice-common
```
**Amazon**
```bash
$ sudo apt remove unity-webapps-common
```
#### 4) 扩展:`apt` 和 `apt-get`
* `apt` 和 `apt-get` 都是 ubuntu 下常用的安装软件的命令
* **早期** 使用 `apt-get`,从 ununtu 16 开始,官方建议使用 `apt`
* 这两个命令的 **使用方式非常类似**
### 3.4 deb 安装格式
**deb** 是 Debian Linux 的安装格式,在 ubuntu 中同样可以使用。要安装 deb 安装包,需要使用 `dpkg` 这个终端命令,命令格式如下:
```bash
$ sudo dpkg -i <package.deb>
```
#### 1) 谷歌浏览器
1. 从 https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb 下载最新版本的安装文件
2. 在终端中执行以下命令:
<!--sudo apt-get install libappindicator1 libindicator7 -->
```bash
$ sudo apt install libappindicator1 libindicator7
$ sudo dpkg -i google-chrome-stable_current_amd64.deb
$ sudo apt -f install
```
#### 2) 搜狗输入法
**fcitx** 被称为 **小企鹅输入法**,是一个以 GPL 方式发布的 **输入法平台**,可以通过安装引擎支持多种输入法。它的优点是,短小精悍、跟程序的兼容性比较好!
1. 打开 **系统设置** **语言支持**
* 将 **键盘输入法系统** 修改为 **fcitx**
2. 访问网站 http://pinyin.sogou.com/linux/ 下载最新版本的安装文件
3. 在终端中执行以下命令:
```bash
$ sudo dpkg -i sogoupinyin_2.1.0.0086_amd64.deb
$ sudo apt -f install
```
> 提示,安装输入法之后,需要重新启动系统
## 序章
### 课程清单
| 序号 | 内容 | 目标 |
| :--: | :------------: | :--------------------------------------------------: |
| 01 | Linux基础 | 在Ubuntu上熟练操作 |
| 02 | Python基础 | 涵盖Python基础知识,让大家掌握基础的编程能力 |
| 03 | Python面向对象 | 介绍Python的面向对象开噶,为开发大型项目做铺垫和准备 |
| 04 | 项目实战 | 应用基础班学习过的知识,完成第一个项目 |
### 分享
```
1.01^365 = 37.8
0.99^365 = 0.03
积硅步以致千里,积怠惰以致深渊。
```
学习要坚持不懈持之以恒。
# 认识 Python
> 人生苦短,我用 Python —— Life is short, you need Python
## 目标
* Python 的起源
* 为什么要用 Python?
* Python 的特点
* Python 的优缺点
## 01. Python 的起源
> Python 的创始人为吉多·范罗苏姆(Guido van Rossum)
1. 1989 年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的**解释程序**,作为 ABC 语言的一种继承(**感觉下什么叫牛人**)
2. ABC 是由吉多参加设计的一种教学语言,就吉多本人看来,ABC 这种语言非常优美和强大,是**专门为非专业程序员设计的**。但是 ABC 语言并没有成功,究其原因,吉多认为是**非开放**造成的。吉多决心在 Python 中避免这一错误,并获取了非常好的效果
3. 之所以选中 Python(蟒蛇) 作为程序的名字,是因为他是 BBC 电视剧——蒙提·派森的飞行马戏团(Monty Python's Flying Circus)的爱好者
4. 1991 年,第一个 Python **解释器** 诞生,它是用 C 语言实现的,并能够调用 C 语言的库文件
### 1.1 解释器(科普)
**计算机不能直接理解任何除机器语言以外的语言**,所以必须要把程序员所写的程序语言翻译成机器语言,计算机才能执行程序。**将其他语言翻译成机器语言的工具,被称为编译器**
编译器翻译的方式有两种:一个是**编译**,另外一个是**解释**。两种方式之间的区别在于**翻译时间点的不同**。当编译器**以解释方式运行的时候**,也称之为**解释器**
<img src="../media/pictures/Python.assets/image-20210108231617417.png" alt="image-20210108231617417" style="zoom:33%;" />
* **编译型语言**:程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如 C、C++
* **解释型语言**:解释型语言编写的程序不进行预先编译,以文本方式存储程序代码,会将代码一句一句直接运行。在发布程序时,看起来省了道编译工序,但是在运行程序的时候,必须先解释再运行
#### 编译型语言和解释型语言对比
* **速度** —— 编译型语言比解释型语言执行速度快
* **跨平台性** —— 解释型语言比编译型语言跨平台性好
### 1.2 Python 的设计目标
1999 年,吉多·范罗苏姆向 DARPA 提交了一条名为 “Computer Programming for Everybody” 的资金申请,并在后来说明了他对 Python 的目标:
* 一门**简单直观的语言**并与主要竞争者一样强大
* **开源**,以便任何人都可以为它做贡献
* 代码**像纯英语那样容易理解**
* 适用于**短期**开发的日常任务
这些想法中的基本都已经成为现实,Python 已经成为一门流行的编程语言
### 1.3 Python 的设计哲学
1. 优雅
2. 明确
3. 简单
<!-- > 在 Python 解释器内运行 `import this` 可以获得完整的列表 -->
* Python 开发者的哲学是:**用一种方法,最好是只有一种方法来做一件事**
* 如果面临多种选择,Python 开发者一般会拒绝花俏的语法,而选择**明确没有或者很少有歧义的语法**
> 在 Python 社区,吉多被称为“仁慈的独裁者”
## 02. 为什么选择 Python?
* 代码量少
* ……
> 同一样问题,用不同的语言解决,代码量差距还是很多的,一般情况下 `Python` 是 `Java` 的 **1/5**,所以说 **人生苦短,我用 Python**
## 03. Python 特点
* Python 是**完全面向对象的语言**
* **函数**、**模块**、**数字**、**字符串**都是对象,**在 Python 中一切皆对象**
* 完全支持继承、重载、多重继承
* 支持重载运算符,也支持泛型设计
* Python **拥有一个强大的标准库**,Python 语言的核心只包含 **数字**、**字符串**、**列表**、**字典**、**文件** 等常见类型和函数,而由 Python 标准库提供了 **系统管理**、**网络通信**、**文本处理**、**数据库接口**、**图形系统**、**XML 处理** 等额外的功能
* Python 社区提供了**大量的第三方模块**,使用方式与标准库类似。它们的功能覆盖 **科学计算**、**人工智能**、**机器学习**、**Web 开发**、**数据库接口**、**图形系统** 多个领域
* 换句话说就类似你有一个大公司,这个公司收罗天下奇人异人能人,你有问题找对应的人来解决问题就好。
### 面向对象的思维方式
* **面向对象** 是一种 **思维方式**,也是一门 **程序设计技术**
* 要解决一个问题前,首先考虑 **由谁** 来做,怎么做事情是 **谁** 的职责,最后把事情做好就行!
* **对象** 就是 **谁**
* 要解决复杂的问题,就可以找**多个不同的对象**,**各司其职**,共同实现,最终完成需求
## 04. Python 的优缺点
### 4.1 优点
* 简单、易学
* 免费、开源
* **面向对象**
* 丰富的库
* 可扩展性
* 如果需要一段关键代码运行得更快或者希望某些算法不公开,可以把这部分程序用 `C` 或 `C++` 编写,然后在 `Python` 程序中使用它们
* ……
### 4.2 缺点
* 运行速度
* 国内市场较小
* 中文资料匮乏
# 第一个 Python 程序
## 目标
* 第一个 `HelloPython` 程序
* `Python 2.x` 与 `3.x` 版本简介
* 执行 `Python` 程序的三种方式
* 解释器 —— `python` / `python3`
* 交互式 —— `ipython`
* 集成开发环境 —— `PyCharm`
## 01. 第一个 `HelloPython` 程序
### 1.1 Python 源程序的基本概念
1. Python 源程序就是**一个特殊格式的文本文件**,可以**使用任意文本编辑软件**做 `Python` 的开发
2. Python 程序的 **文件扩展名** 通常都是 `.py`
### 1.2 演练步骤
* 在桌面下,新建 `认识Python` 目录
* 在 `认识Python` 目录下新建 `01-HelloPython.py` 文件
* 使用 **gedit** 编辑 `01-HelloPython.py` 并且输入以下内容:
```python
print("hello python")
print("hello world")
```
* 在终端中输入以下命令执行 `01-HelloPython.py`
```bash
$ python 01-HelloPython.py
```
> `print` 是 `python` 中我们学习的第一个 **函数**
>
> `print` 函数的作用,可以把 **""** 内部的内容,输出到屏幕上
### 1.3 演练扩展 —— 认识错误(BUG)
#### 关于错误
* 编写的程序**不能正常执行**,或者**执行的结果不是我们期望的**
* 俗称 `BUG`,是程序员在开发时非常常见的,初学者常见错误的原因包括:
1. 手误
2. 对已经学习过的知识理解还存在不足
3. 对语言还有需要学习和提升的内容
* 在学习语言时,不仅要**学会语言的语法**,而且还要**学会如何认识错误和解决错误的方法**
> 每一个程序员都是在不断地修改错误中成长的
#### 第一个演练中的常见错误
* 1> **手误**,例如使用 `pirnt("Hello world")`
```bash
NameError: name 'pirnt' is not defined
名称错误:'pirnt' 名字没有定义
```
* 2> 将多条 `print` 写在一行
```bash
SyntaxError: invalid syntax
语法错误:语法无效
```
> 每行代码负责完成一个动作
* 3> 缩进错误
```bash
IndentationError: unexpected indent
缩进错误:不期望出现的缩进
```
> * Python 是一个格式非常严格的程序设计语言
> * 目前而言,大家记住每行代码前面都不要增加空格
* 4> **python 2.x 默认不支持中文**
目前市场上有两个 Python 的版本并存着,分别是 `Python 2.x` 和 `Python 3.x`
* **Python 2.x 默认不支持中文**,具体原因,等到介绍 **字符编码** 时给大家讲解
* Python 2.x 的解释器名称是 **python**
* Python 3.x 的解释器名称是 **python3**
```
SyntaxError: Non-ASCII character '\xe4' in file 01-HelloPython.py on line 3,
but no encoding declared;
see http://python.org/dev/peps/pep-0263/ for details
语法错误: 在 01-HelloPython.py 中第 3 行出现了非 ASCII 字符 '\xe4',但是没有声明文件编码
请访问 http://python.org/dev/peps/pep-0263/ 了解详细信息
```
> * `ASCII` 字符只包含 `256` 个字符,不支持中文
> * 有关字符编码的问题,后续会讲
#### 单词列表
```
* error 错误
* name 名字
* defined 已经定义
* syntax 语法
* invalid 无效
* Indentation 索引
* unexpected 意外的,不期望的
* character 字符
* line 行
* encoding 编码
* declared 声明
* details 细节,详细信息
* ASCII 一种字符编码
```
## 02. `Python 2.x` 与 `3.x` 版本简介
目前市场上有两个 Python 的版本并存着,分别是 `Python 2.x` 和 `Python 3.x`
> 新的 Python 程序建议使用 `Python 3.0` 版本的语法
* Python 2.x 是 **过去的版本**
* 解释器名称是 **python**
* Python 3.x 是 **现在和未来 主流的版本**
* 解释器名称是 **python3**
* 相对于 `Python` 的早期版本,这是一个 **较大的升级**
* 为了不带入过多的累赘,`Python 3.0` 在设计的时候 **没有考虑向下兼容**
* 许多早期 `Python` 版本设计的程序都无法在 `Python 3.0` 上正常执行
* Python 3.0 发布于 **2008 年**
* 到目前为止,Python 3.0 的稳定版本已经有很多年了
* Python 3.3 发布于 2012
* Python 3.4 发布于 2014
* Python 3.5 发布于 2015
* Python 3.6 发布于 2016
* 为了照顾现有的程序,官方提供了一个过渡版本 —— **Python 2.6**
* 基本使用了 `Python 2.x` 的语法和库
* 同时考虑了向 `Python 3.0` 的迁移,**允许使用部分** `Python 3.0` 的语法与函数
* 2010 年中推出的 `Python 2.7` 被确定为 **最后一个Python 2.x 版本**
> 提示:如果开发时,无法立即使用 Python 3.0(还有极少的第三方库不支持 3.0 的语法),建议
>
> * 先使用 `Python 3.0` 版本进行开发
> * 然后使用 `Python 2.6`、`Python 2.7` 来执行,并且做一些兼容性的处理
## 03. 执行 Python 程序的三种方式
### 3.1. 解释器 `python` / `python3`
#### Python 的解释器
```bash
# 使用 python 2.x 解释器
$ python xxx.py
# 使用 python 3.x 解释器
$ python3 xxx.py
```
##### 其他解释器(知道)
**Python 的解释器** 如今有多个语言的实现,包括:
* `CPython` —— 官方版本的 C 语言实现
* `Jython` —— 可以运行在 Java 平台
* `IronPython` —— 可以运行在 .NET 和 Mono 平台
* `PyPy` —— Python 实现的,支持 JIT 即时编译
### 3.2. 交互式运行 Python 程序
* 直接在终端中运行解释器,而不输入要执行的文件名
* 在 Python 的 `Shell` 中直接输入 **Python 的代码**,会立即看到程序执行结果
```python
#首先输入python
#输入python命令 1.01^365
>>> 1.01 ** 365
37.78343433288728
>>> 0.99 ** 365
0.025517964452291125
```
#### 1) 交互式运行 Python 的优缺点
##### 优点
* 适合于学习/验证 Python 语法或者局部代码
##### 缺点
* 代码不能保存
* 不适合运行太大的程序
#### 2) 退出 官方的解释器
##### 1> 直接输入 `exit()`
```python
>>> exit()
```
##### 2> 使用热键退出
在 python 解释器中,按热键 `ctrl + d` 可以退出解释器
#### 3) IPython
* IPython 中 的 “I” 代表 **交互 interactive**
##### 特点
* IPython 是一个 python 的 **交互式 shell**,比默认的 `python shell` 好用得多
* 支持自动补全
* 自动缩进
* 支持 `bash shell` 命令
* 内置了许多很有用的功能和函数
* IPython 是基于 BSD 开源的
##### 版本
* Python 2.x 使用的解释器是 **ipython**
* Python 3.x 使用的解释器是 **ipython3**
* 要退出解释器可以有以下两种方式:
##### 1> 直接输入 `exit`
```python
In [1]: exit
```
##### 2> 使用热键退出
在 IPython 解释器中,按热键 `ctrl + d`,`IPython` 会询问是否退出解释器
#### IPython 的安装
```bash
$ sudo apt install ipython
```
## 3.3. Python 的 IDE —— `PyCharm`
### 1) 集成开发环境(IDE)
集成开发环境(`IDE`,Integrated Development Environment)—— **集成了开发软件需要的所有工具**,一般包括以下工具:
* 图形用户界面
* 代码编辑器(支持 **代码补全**/**自动缩进**)
* 编译器/解释器
* 调试器(**断点**/**单步执行**)
* ……
### 2)PyCharm 介绍
* `PyCharm` 是 Python 的一款非常优秀的集成开发环境
* `PyCharm` 除了具有一般 IDE 所必备功能外,还可以在 `Windows`、`Linux`、`macOS` 下使用
* `PyCharm` 适合开发大型项目
* 一个项目通常会包含 **很多源文件**
* 每个 **源文件** 的代码行数是有限的,通常在几百行之内
* 每个 **源文件** 各司其职,共同完成复杂的业务功能
### 3)PyCharm 快速体验
* **文件导航区域** 能够 **浏览**/**定位**/**打开** 项目文件
* **文件编辑区域** 能够 **编辑** 当前打开的文件
* **控制台区域** 能够:
* 输出程序执行内容
* 跟踪调试代码的执行
* 右上角的 **工具栏** 能够 **执行(SHIFT + F10)** / **调试(SHIFT + F9)** 代码
* 通过控制台上方的**单步执行按钮(F8)**,可以单步执行代码
## Wins安装Python解释器,并在Pycharm配置解释器
参考:https://blog.csdn.net/ling_mochen/article/details/79314118?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param
### 在官网点击wins,选择版本(自己总结)
https://www.python.org/downloads/windows/
<img src="../media/pictures/Python.assets/image-20201016163038273.png" alt="image-20201016163038273" style="zoom:33%;" />
### 进去以后选择一个版本,然后选择可执行文件下载,然后安装(3.x不需要配置环境变量)
<img src="../media/pictures/Python.assets/image-20201016163209940.png" alt="image-20201016163209940" style="zoom:50%;" />
### 然后再Pycharm里面配置解释器
<img src="../media/pictures/Python.assets/image-20201016163443804.png" alt="image-20201016163443804" style="zoom: 33%;" />
# PyCharm 的初始设置(知道)
## 目标
* 恢复 PyCharm 的初始设置
* 第一次启动 PyCharm
* 新建一个 Python 项目
* 设置 PyCharm 的字体显示
* PyCharm 的升级以及其他
PyCharm 的官方网站地址是:https://www.jetbrains.com/pycharm/
## 01. 恢复 PyCharm 的初始设置
`PyCharm` 的 **配置信息** 是保存在 **用户家目录下** 的 `.PyCharmxxxx.x` 目录下的,`xxxx.x` 表示当前使用的 `PyCharm` 的版本号
如果要恢复 `PyCharm` 的初始设置,可以按照以下步骤进行:
* 1. 关闭正在运行的 `PyCharm`
* 2. 在终端中执行以下终端命令,删除 `PyCharm` 的配置信息目录:
```bash
$ rm -r ~/.PyCharm2016.3
```
* 3. 重新启动 `PyCharm`
## 02. 第一次启动 PyCharm
1. 导入配置信息
2. 选择许可协议
3. 配置初始界面
### 2.1 导入配置信息
* 在第一次启动 `PyCharm` 时,会首先提示用户是否导入 **之前的配置信息**
* 如果是第一次使用,直接点击 **OK** 按钮
![image-20210108233504369](../media/pictures/Python.assets/image-20210108233504369.png)
### 2.2 选择许可协议
* PyCharm 是一个付费软件,购买费用为 **199$ / 年** 或者 **19.90$ / 月**
* 不过 PyCharm 提供了对 **学生和教师免费使用的版本**
* 下载地址是:https://www.jetbrains.com/pycharm-edu/download/#section=linux
* 商业版本会提示输入注册信息,或者选择免费评估
<img src="../media/pictures/Python.assets/image-20210108233526299.png" alt="image-20210108233526299" style="zoom:33%;" />
### 2.3 PyCharm 的配置初始界面
* 在初始配置界面,可以通过 `Editor colors and fonts` 选择 **编辑器的配色方案**
<img src="../media/pictures/Python.assets/image-20210108233547317.png" alt="image-20210108233547317" style="zoom: 33%;" />
### 2.4 欢迎界面
* 所有基础配置工作结束之后,就可以看到 `PyCharm` 的 **欢迎界面**了,通过 **欢迎界面** 就可以开始开发 Python 项目了
<img src="../media/pictures/Python.assets/image-20210108233615642.png" alt="image-20210108233615642" style="zoom:33%;" />
## 03. 新建/打开一个 Python 项目
### 3.1 项目简介
* 开发 **项目** 就是开发一个 **专门解决一个复杂业务功能的软件**
* 通常每 **一个项目** 就具有一个 **独立专属的目录**,用于保存 **所有和项目相关的文件**
* 一个项目通常会包含 **很多源文件**
### 3.2 打开 Python 项目
* 直接点击 **Open** 按钮,然后浏览到之前保存 **Python 文件的目录**,既可以打开项目
* 打开之后,会在目录下新建一个 `.idea` 的目录,用于保存 **项目相关的信息**,例如:**解释器版本**、**项目包含的文件**等等
* 第一次打开项目,需要耐心等待 `PyCharm` 对项目**进行初始设置**
#### 设置项目使用的解释器版本
* 打开的目录如果不是由 `PyCharm` 建立的项目目录,**有的时候** 使用的解释器版本是 `Python 2.x` 的,需要**单独设置解释器的版本**
* 通过 **File** / **Settings...** 可以打开设置窗口,如下图所示:
<img src="../media/pictures/Python.assets/image-20210108233649270.png" alt="image-20210108233649270" style="zoom:33%;" />
### 3.3 新建项目
#### 1) 命名规则
* 以后 **项目名** 前面都以 **数字编号**,**随着知识点递增,编号递增**
* 例如:**01_Python 基础**、**02_分支**、**03_循环**...
* 每个项目下的 **文件名** 都以 `hm_xx_知识点` 方式来命名
* 其中 **xx** 是演练文件的序号
* 注意
* 1. 命名文件名时建议只使用 **小写字母**、**数字** 和 **下划线**
* 2. **文件名不能以数字开始**
* 通过 **欢迎界面** 或者菜单 **File** / **New Project** 可以新建项目
#### 2) 演练步骤
* 新建 `01_Python基础` 项目,使用 **Python 3.x 解释器**
* 在项目下新建 `hm_01_hello.py` Python 文件
* 编写 `print("Hello Python")` 代码
## 04. 设置 PyCharm 的字体显示
<img src="../media/pictures/Python.assets/image-20210108233709458.png" alt="image-20210108233709458" style="zoom:33%;" />
<img src="../media/pictures/Python.assets/image-20210108233727287.png" alt="image-20210108233727287" style="zoom:33%;" />
## 05. PyCharm 的升级以及其他
> PyCharm 提供了对 **学生和教师免费使用的版本**
* 教育版下载地址:https://www.jetbrains.com/pycharm-edu/download/#section=linux
* 专业版下载地址:https://www.jetbrains.com/pycharm/download/#section=linux
### 5.1 安装和启动步骤
* 1. 执行以下终端命令,解压缩下载后的安装包
```bash
$ tar -zxvf pycharm-professional-2017.1.3.tar.gz
```
* 2. 将解压缩后的目录移动到 `/opt` 目录下,可以方便其他用户使用
> `/opt` 目录用户存放给主机额外安装的软件
```bash
$ sudo mv pycharm-2017.1.3/ /opt/
```
* 3. 切换工作目录
```bash
$ cd /opt/pycharm-2017.1.3/bin
```
* 4. 启动 `PyCharm`
```bash
$ ./pycharm.sh
```
### 5.2 设置专业版启动图标
* 在**专业版**中,选择菜单 **Tools** / **Create Desktop Entry...** 可以设置任务栏启动图标
* 注意:设置图标时,需要勾选 `Create the entry for all users`
<img src="../media/pictures/Python.assets/image-20210108233750027.png" alt="image-20210108233750027" style="zoom:33%;" />
### 5.3 卸载之前版本的 PyCharm
#### 1) 程序安装
* 1. **程序文件目录**
* 将安装包解压缩,并且移动到 `/opt` 目录下
* **所有的相关文件都保存在解压缩的目录中**
* 2. **配置文件目录**
* 启动 `PyCharm` 后,会在用户家目录下建立一个 `.PyCharmxxx` 的隐藏目录
* **保存 `PyCharm` 相关的配置信息**
* 3. **快捷方式文件**
* `/usr/share/applications/jetbrains-pycharm.desktop`
> 在 `ubuntu` 中,应用程序启动的快捷方式通常都保存在 `/usr/share/applications` 目录下
#### 2) 程序卸载
* 要卸载 `PyCharm` 只需要做以下两步工作:
* 1. 删除解压缩目录
```bash
$ sudo rm -r /opt/pycharm-2016.3.1/
```
* 2. 删除家目录下用于保存配置信息的隐藏目录
```bash
$ rm -r ~/.PyCharm2016.3/
```
> 如果不再使用 PyCharm 还需要将 `/usr/share/applications/` 下的 `jetbrains-pycharm.desktop` 删掉
### 5.4 教育版安装演练
```bash
# 1. 解压缩下载后的安装包
$ tar -zxvf pycharm-edu-3.5.1.tar.gz
# 2. 将解压缩后的目录移动到 `/opt` 目录下,可以方便其他用户使用
$ sudo mv pycharm-edu-3.5.1/ /opt/
# 3. 启动 `PyCharm`
/opt/pycharm-edu-3.5.1/bin/pycharm.sh
```
> 后续课程**都使用专业版本演练**
#### 设置启动图标
* 1. 编辑快捷方式文件
```bash
$ sudo gedit /usr/share/applications/jetbrains-pycharm.desktop
```
* 3. 按照以下内容修改文件内容,需要注意**指定正确的 `pycharm` 目录**
```
[Desktop Entry]
Version=1.0
Type=Application
Name=PyCharm
Icon=/opt/pycharm-edu-3.5.1/bin/pycharm.png
Exec="/opt/pycharm-edu-3.5.1/bin/pycharm.sh" %f
Comment=The Drive to Develop
Categories=Development;IDE;
Terminal=false
StartupWMClass=jetbrains-pycharm
```
# 注释
## 目标
* 注释的作用
* 单行注释(行注释)
* 多行注释(块注释)
## 01. 注释的作用
> 使用用自己熟悉的语言,在程序中对某些代码进行标注说明,增强程序的可读性
<img src="../media/pictures/Python.assets/annotion.gif" alt="annotion.gif" style="zoom:70%;" />
## 02. 单行注释(行注释)
* 以 `#` 开头,`#` 右边的所有东西都被当做说明文字,而不是真正要执行的程序,只起到辅助说明作用
* 示例代码如下:
```python
# 这是第一个单行注释
print("hello python")
```
> 为了保证代码的可读性,`#` 后面建议先添加一个空格,然后再编写相应的说明文字
### 在代码后面增加的单行注释
* 在程序开发时,同样可以使用 `#` 在代码的后面(旁边)增加说明性的文字
* 但是,需要注意的是,**为了保证代码的可读性**,**注释和代码之间** 至少要有 **两个空格**
* 并且解释器不会解释注释行
* 示例代码如下:
```python
print("hello python") # 输出 `hello python`
```
## 03. 多行注释(块注释)
* 如果希望编写的 **注释信息很多,一行无法显示**,就可以使用多行注释
* 要在 Python 程序中使用多行注释,可以用 **一对 连续的 三个 引号**(单引号和双引号都可以)
* 示例代码如下:
```python
"""
这是一个多行注释
在多行注释之间,可以写很多很多的内容……
"""
print("hello python")
```
### 什么时候需要使用注释?
1. **注释不是越多越好**,对于一目了然的代码,不需要添加注释
2. 对于 **复杂的操作**,应该在操作开始前写上若干行注释
3. 对于 **不是一目了然的代码**,应在其行尾添加注释(为了提高可读性,注释应该至少离开代码 2 个空格)
4. 绝不要描述代码,假设阅读代码的人比你更懂 Python,他只是不知道你的代码要做什么
> 在一些正规的开发团队,通常会有 **代码审核** 的惯例,就是一个团队中彼此阅读对方的代码
### 关于代码规范
* `Python` 官方提供有一系列 PEP(Python Enhancement Proposals) 文档
* 其中第 8 篇文档专门针对 **Python 的代码格式** 给出了建议,也就是俗称的 **PEP 8**
* 文档地址:https://www.python.org/dev/peps/pep-0008/
* 谷歌有对应的中文文档:http://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_style_rules/
> 任何语言的程序员,编写出符合规范的代码,是开始程序生涯的第一步
# 算数运算符
**计算机**,顾名思义就是负责进行 **数学计算** 并且 **存储计算结果** 的电子设备
## 目标
* 算术运算符的基本使用
## 01. 算数运算符
* 算数运算符是 **运算符的一种**
* 是完成基本的算术运算使用的符号,用来处理四则运算
| 运算符 | 描述 | 实例 |
| :----: | :----: | ------------------------------------------ |
| + | 加 | 10 + 20 = 30 |
| - | 减 | 10 - 20 = -10 |
| * | 乘 | 10 * 20 = 200 |
| / | 除 | 10 / 20 = 0.5 |
| // | 取整除 | 返回除法的整数部分(商) 9 // 2 输出结果 4 |
| % | 取余数 | 返回除法的余数 9 % 2 = 1 |
| ** | 幂 | 又称次方、乘方,2 ** 3 = 8 |
* 在 Python 中 `*` 运算符还可以用于字符串,计算结果就是字符串重复指定次数的结果
```python
In [1]: "-" * 50
Out[1]: '----------------------------------------' #就输出50个“-”