Asabeneh/30-Days-Of-Python
GitHub: Asabeneh/30-Days-Of-Python
一个为期 30 天的 Python 编程系统学习挑战,从零基础到 Web 爬虫、数据分析和 API 构建逐步进阶,帮助学习者掌握 Python 核心技能。
Stars: 64064 | Forks: 12073
# 🐍 30 天 Python
|# 天 | 主题 |
|------|:---------------------------------------------------------:|
| 01 | [简介](./readme.md)|
| 02 | [变量,内置函数](./02_Day_Variables_builtin_functions/02_variables_builtin_functions.md)|
| 03 | [运算符](./03_Day_Operators/03_operators.md)|
| 04 | [字符串](./04_Day_Strings/04_strings.md)|
| 05 | [列表](./05_Day_Lists/05_lists.md)|
| 06 | [元组](./06_Day_Tuples/06_tuples.md)|
| 07 | [集合](./07_Day_Sets/07_sets.md)|
| 08 | [字典](./08_Day_Dictionaries/08_dictionaries.md)|
| 09 | [条件语句](./09_Day_Conditionals/09_conditionals.md)|
| 10 | [循环](./10_Day_Loops/10_loops.md)|
| 11 | [函数](./11_Day_Functions/11_functions.md)|
| 12 | [模块](./12_Day_Modules/12_modules.md)|
| 13 | [列表推导式](./13_Day_List_comprehension/13_list_comprehension.md)|
| 14 | [高阶函数](./14_Day_Higher_order_functions/14_higher_order_functions.md)|
| 15 | [Python 类型错误](./15_Day_Python_type_errors/15_python_type_errors.md)|
| 16 | [Python 日期时间](./16_Day_Python_date_time/16_python_datetime.md) |
| 17 | [异常处理](./17_Day_Exception_handling/17_exception_handling.md)|
| 18 | [正则表达式](./18_Day_Regular_expressions/18_regular_expressions.md)|
| 19 | [文件处理](./19_Day_File_handling/19_file_handling.md)|
| 20 | [Python 包管理器](./20_Day_Python_package_manager/20_python_package_manager.md)|
| 21 | [类和对象](./21_Day_Classes_and_objects/21_classes_and_objects.md)|
| 22 | [网络抓取](./22_Day_Web_scraping/22_web_scraping.md)|
| 23 | [虚拟环境](./23_Day_Virtual_environment/23_virtual_environment.md)|
| 24 | [统计学](./24_Day_Statistics/24_statistics.md)|
| 25 | [Pandas](./25_Day_Pandas/25_pandas.md)|
| 26 | [Python Web](./26_Day_Python_web/26_python_web.md)|
| 27 | [Python 结合 MongoDB](./27_Day_Python_with_mongodb/27_python_with_mongodb.md)|
| 28 | [API](./28_Day_API/28_API.md)|
| 29 | [构建 API](./29_Day_Building_API/29_building_API.md)|
| 30 | [总结](./30_Day_Conclusions/30_conclusions.md)|
🧡🧡🧡 祝你编程快乐 🧡🧡🧡
# 📘 第 1 天
## 欢迎
**恭喜**你决定参与 _30 天 Python_ 编程挑战。在这次挑战中,你将学习成为一名 Python 程序员所需的一切知识以及整个编程的概念。在挑战结束时,你将获得一张 _30DaysOfPython_ 编程挑战证书。
如果你想积极参与挑战,可以加入 [30DaysOfPython 挑战](https://t.me/ThirtyDaysOfPython) Telegram 群组。
## 简介
Python 是一种用于通用编程的高级编程语言。它是一种开源、解释型、面向对象的编程语言。Python 由荷兰程序员 Guido van Rossum 创建。Python 编程语言的名字来源于一部英国喜剧小品系列 *Monty Python's Flying Circus*。其第一个版本于 1991 年 2 月 20 日发布。这 30 天的 Python 挑战将帮助你逐步学习最新版本的 Python,即 Python 3。这些主题被分解为 30 天,每天包含几个主题,并附有易于理解的解释、真实世界的例子以及许多动手练习和项目。
本挑战专为想要学习 Python 编程语言的初学者和专业人士设计。完成挑战可能需要 30 到 100 天。积极参与 Telegram 群组的人完成挑战的概率很高。
本挑战易于阅读,以对话式的英语编写,引人入胜、鼓舞人心,同时要求也非常高。你需要分配大量的时间来完成这个挑战。如果你是一名视觉学习者,可以在 Washera YouTube 频道获取视频课程。你可以从 [Python 零基础视频教程](https://youtu.be/OCCWZheOesI)开始。订阅该频道,在 YouTube 视频下方发表评论并提问,保持积极主动,作者最终会注意到你的。
作者很乐意听到你对挑战的看法,通过表达你对 30DaysOfPython 挑战的想法来分享给作者。你可以在这个[链接](https://www.asabeneh.com/testimonials)留下你的感言。
## 为什么选择 Python ?
这是一种非常接近人类语言的编程语言,正因为如此,它很容易学习和使用。
Python 被各个行业和公司(包括 Google)使用。它被用于开发 Web 应用程序、桌面应用程序、系统管理以及机器学习库。Python 是数据科学和机器学习社区中备受推崇的语言。我希望这足以说服你开始学习 Python。Python 正在吞噬世界,你要在它吞噬你之前掌握它。
## 环境设置
### 安装 Python
要运行 Python 脚本,你需要安装 Python。让我们[下载](https://www.python.org/) Python。
如果你是 Windows 用户,点击红圈圈出的按钮。
[](https://www.python.org/)
如果你是 macOS 用户,点击红圈圈出的按钮。
[](https://www.python.org/)
要检查是否已安装 Python,请在你的设备终端中写入以下命令。
```
python3 --version
```

正如你从终端中看到的,我目前使用的是 _Python 3.7.5_ 版本。你的 Python 版本可能与我的不同,但应该是 3.6 或更高版本。如果你成功看到了 Python 版本,做得好。Python 已经安装在你的机器上了。继续下一节。
### Python Shell
Python 是一种解释型脚本语言,因此它不需要编译。这意味着它会逐行执行代码。Python 自带一个 _Python Shell(Python 交互式 Shell)_。它用于执行单个 Python 命令并获取结果。
Python Shell 等待用户提供 Python 代码。当你输入代码时,它会解释代码并在下一行显示结果。
打开你的终端或命令提示符(cmd)并写入:
```
python
```

Python 交互式 Shell 已打开,正等待你编写 Python 代码(Python 脚本)。你将在这个符号 >>> 旁边编写你的 Python 脚本,然后按 Enter 键。
让我们在 Python 脚本 Shell 中编写我们的第一个脚本。

做得好,你在 Python 交互式 Shell 上编写了你的第一个 Python 脚本。我们如何关闭 Python 交互式 Shell ?
要关闭 shell,在这个符号 >>> 旁边写下 **exit()** 命令并按 Enter 键。

现在,你知道如何打开 Python 交互式 Shell 以及如何退出它了。
如果你编写的脚本是 Python 能理解的,它会给你结果,否则会返回错误。让我们故意犯个错,看看 Python 会返回什么。

正如你从返回的错误中看到的,Python 非常聪明,它知道我们犯的错误是 _Syntax Error: invalid syntax_。在 Python 中使用 x 作为乘法是一个语法错误,因为 在 Python 中不是有效的语法。我们使用星号 (*) 来代替 进行乘法运算。返回的错误清楚地表明了要修复的内容。
识别并从程序中删除错误的过程称为 _调试_。让我们通过把 **x** 替换为 * 来进行调试。

我们的 bug 被修复了,代码运行了,我们得到了预期的结果。作为一名程序员,你每天都会看到这样的错误。知道如何调试是件好事。要擅长调试,你应该了解你面临的是哪种类型的错误。你可能遇到的一些 Python 错误有 _SyntaxError_、_IndexError_、_NameError_、_ModuleNotFoundError_、_KeyError_、_ImportError_、_AttributeError_、_TypeError_、_ValueError_、_ZeroDivisionError_ 等。我们将在后面的章节中看到更多关于不同 Python **_错误类型_** 的内容。
让我们练习更多如何使用 Python 交互式 Shell。转到你的终端或命令提示符并写入 **python**。

Python 交互式 Shell 已打开。让我们做一些基本的数学运算(加法、减法、乘法、除法、取模、指数运算)。
在编写任何 Python 代码之前,让我们先做一些数学运算:
- 2 + 3 = 5
- 3 - 2 = 1
- 3 \* 2 = 6
- 3 / 2 = 1.5
- 3 \*\* 2 = 3 x 3 = 9
在 Python 中,我们有以下额外的运算:
- 3 % 2 = 1 => 这意味着求余数
- 3 // 2 = 1 => 这意味着去除余数(向下取整)
让我们把上面的数学表达式转换为 Python 代码。Python Shell 已经打开,让我们在 Shell 的最开头写一个注释。
_注释_ 是代码中不被 Python 执行的部分。因此我们可以在代码中留下一些文本,使我们的代码更具可读性。Python 不会运行注释部分。Python 中的注释以井号(#) 符号开头。
这是你在 Python 中编写注释的方式
```
# comment starts with hash
# this is a python comment, because it starts with a (#) symbol
```

在进入下一节之前,让我们在 Python 交互式 Shell 上做更多练习。通过在 Shell 中写入 _exit()_ 关闭已打开的 Shell,然后重新打开它,让我们练习如何在 Python Shell 上编写文本。

### 安装 Visual Studio Code
Python 交互式 Shell 非常适合尝试和测试小型脚本代码,但它不适合大型项目。在实际工作环境中,开发者使用不同的代码编辑器来编写代码。在这 30 天的 Python 编程挑战中,我们将使用 Visual Studio Code。Visual Studio Code 是一款非常流行的开源文本编辑器。我是 vscode 的粉丝,我推荐[下载](https://code.visualstudio.com/) Visual Studio Code,但如果你更喜欢其他编辑器,请随意使用你拥有的编辑器继续。
[](https://code.visualstudio.com/)
如果你已经安装了 Visual Studio Code,让我们看看如何使用它。
如果你更喜欢视频,可以跟随这个 Visual Studio Code for Python [视频教程](https://www.youtube.com/watch?v=bn7Cx4z-vSo)
#### 如何使用 Visual Studio Code
双击 Visual Studio 图标打开 Visual Studio Code。当你打开它时,你会看到这种界面。尝试与带标签的图标进行交互。

在你的桌面上创建一个名为 30DaysOfPython 的文件夹。然后使用 Visual Studio Code 打开它。


打开它之后,你将看到在 30DaysOfPython 项目目录中创建文件和文件夹的快捷方式。如下所示,我创建了第一个文件 `helloworld.py`。你也可以这样做。

经过漫长一天的编码,你想关闭你的代码编辑器,对吧?这就是你关闭打开的项目的方式。

恭喜,你已完成开发环境的设置。让我们开始编码。
## Python 基础
### Python 语法
Python 脚本可以在 Python 交互式 Shell 或代码编辑器中编写。Python 文件的扩展名为 .py。
### Python 缩进
缩进是文本中的空白空间。在许多语言中,缩进用于提高代码的可读性;然而,Python 使用缩进来创建代码块。在其他编程语言中,使用花括号而不是缩进来创建代码块。在编写 Python 代码时,最常见的错误之一就是缩进不正确。

### 注释
注释在提高代码可读性以及允许开发者在代码中留下注释方面起着至关重要的作用。在 Python 中,任何以井号 (#) 符号开头的文本都被视为注释,在代码运行时不会被执行。
**示例:单行注释**
```
# This is the first comment
# This is the second comment
# Python is eating the world
```
**示例:多行注释**
如果没有赋值给变量,三重引号可用于多行注释
```
"""This is multiline comment
multiline comment takes multiple lines.
python is eating the world
"""
```
### 数据类型
在 Python 中有几种类型的数据类型。让我们从最常见的几种开始。不同的数据类型将在其他章节中详细介绍。目前,让我们先浏览一下不同的数据类型并熟悉它们。你不需要现在就完全理解。
#### 数字
- 整数:整数(负数、零和正数)
示例:
... -3, -2, -1, 0, 1, 2, 3 ...
- 浮点数:小数
示例
... -3.5, -2.25, -1.0, 0.0, 1.1, 2.2, 3.5 ...
- 复数
示例
1 + j, 2 + 4j
#### 字符串
在单引号或双号下的一个或多个字符的集合。如果一个字符串不止一句话,我们就使用三重引号。
**示例:**
```
'Asabeneh'
'Finland'
'Python'
'I love teaching'
'I hope you are enjoying the first day of 30DaysOfPython Challenge'
```
#### 布尔值
布尔数据类型要么是 True 值,要么是 False 值。T 和 F 应该始终大写。
**示例:**
```
True # Is the light on? If it is on, then the value is True
False # Is the light on? If it is off, then the value is False
```
#### 列表
Python 列表是一个有序集合,允许存储不同的数据类型项。列表类似于 JavaScript 中的数组。
**示例:**
```
[0, 1, 2, 3, 4, 5] # all are the same data types - a list of numbers
['Banana', 'Orange', 'Mango', 'Avocado'] # all the same data types - a list of strings (fruits)
['Finland','Estonia', 'Sweden','Norway'] # all the same data types - a list of strings (countries)
['Banana', 10, False, 9.81] # different data types in the list - string, integer, boolean and float
```
#### 字典
Python 字典对象是以键值对格式存储的无序数据集合。
**示例:**
```
{
'first_name':'Asabeneh',
'last_name':'Yetayeh',
'country':'Finland',
'age':250,
'is_married':True,
'skills':['JS', 'React', 'Node', 'Python']
}
```
#### 元组
元组是一个有序的不同数据类型的集合,类似于列表,但元组一旦创建就不能修改。它们是不可变的。
**示例:**
```
('Asabeneh', 'Pawel', 'Brook', 'Abraham', 'Lidiya') # Names
```
```
('Earth', 'Jupiter', 'Neptune', 'Mars', 'Venus', 'Saturn', 'Uranus', 'Mercury') # planets
```
#### 集合
集合是一种类似于列表和元组的数据类型集合。与列表和元组不同,集合不是有序的集合项。就像在数学中一样,Python 中的集合只存储唯一的项。
在后面的章节中,我们将详细介绍每一种 Python 数据类型。
**示例:**
```
{2, 4, 3, 5}
{3.14, 9.81, 2.7} # order is not important in set
```
### 检查数据类型
要检查特定数据/变量的数据类型,我们使用 **type** 函数。在以下终端中,你将看到不同的 Python 数据类型:

### Python 文件
首先打开你的项目文件夹,30DaysOfPython。如果你没有这个文件夹,创建一个名为 30DaysOfPython 的文件夹。在这个文件夹内,创建一个名为 helloworld.py 的文件。现在,让我们使用 Visual Studio Code 执行我们之前在 Python 交互式 Shell 上做过的操作。
Python 交互式 Shell 在打印时没有使用 **print**,但是在 Visual Studio Code 中要看到我们的结果,我们应该使用内置函数 _print()_。_print()_ 内置函数接受一个或多个参数,如下所示 _print('arument1', 'argument2', 'argument3')_。看下面的例子。
**示例:**
文件名为 `helloworld.py`
```
# 第 1 天 - 30DaysOfPython Challenge
print(2 + 3) # addition(+)
print(3 - 1) # subtraction(-)
print(2 * 3) # multiplication(*)
print(3 / 2) # division(/)
print(3 ** 2) # exponential(**)
print(3 % 2) # modulus(%)
print(3 // 2) # Floor division operator(//)
# 检查 data types
print(type(10)) # Int
print(type(3.14)) # Float
print(type(1 + 3j)) # Complex number
print(type('Asabeneh')) # String
print(type([1, 2, 3])) # List
print(type({'name':'Asabeneh'})) # Dictionary
print(type({9.8, 3.14, 2.7})) # Set
print(type((9.8, 3.14, 2.7))) # Tuple
```
要运行 Python 文件,请查看下图。你可以通过点击 Visual Studio Code 上的绿色运行按钮,或者在终端中输入 _python helloworld.py_ 来运行 Python 文件。

🌕 你太棒了。你刚刚完成了第 1 天的挑战,你正在通往伟大的道路上。现在为你的大脑和肌肉做一些练习吧。
## 💻 练习 - 第 1 天
### 练习:等级 1
1. 检查你正在使用的 Python 版本
2. 打开 Python 交互式 Shell 并执行以下操作。操作数为 3 和 4。
- 加法(+)
- 减法(-)
- 乘法(\*)
- 取模(%)
- 除法(/)
- 指数(\*\*)
- 地板除运算符(//)
3. 在 Python 交互式 Shell 上编写字符串。字符串如下:
- 你的名字
- 你的姓氏
- 你的国家
- 我正在享受 30 天的 Python
4. 检查以下数据的数据类型:
- 10
- 9.8
- 3.14
- 4 - 4j
- ['Asabeneh', 'Python', 'Finland']
- 你的名字
- 你的姓氏
- 你的国家
### 练习:等级 2
1. 在 30DaysOfPython 文件夹内创建一个名为 day_1 的文件夹。在 day_1 文件夹内,创建一个 Python 文件 helloworld.py 并重复问题 1、2、3 和 4。记住在处理 Python 文件时使用 _print()_。导航到你保存文件的目录,并运行它。
### 练习:等级 3
1. 写出不同 Python 数据类型的示例,如数字(整数、浮点数、复数)、字符串、布尔值、列表、元组、集合和字典。
2. 求 (2, 3) 和 (10, 8) 之间的[欧几里得距离](https://en.wikipedia.org/wiki/Euclidean_distance#:~:text=In%20mathematics%2C%20the%20Euclidean%20distance,being%20called%20the%20Pythagorean%20distance.)
🎉 恭喜! 🎉
[第 2 天 >>](./02_Day_Variables_builtin_functions/02_variables_builtin_functions.md)
标签:30天挑战, DNS解析, MongoDB, Python, SEO, Syscall, Web开发, 代码示例, 元组, 函数, 分布式计算, 列表, 包管理器, 变量, 字典, 字符串, 开源项目, 异常处理, 循环, 技术栈, 数据分析, 文件处理, 无后门, 条件判断, 模块, 类和对象, 统一API, 编程学习, 编程教程, 自学编程, 虚拟环境, 计算机基础, 软件开发, 逆向工具, 面向对象编程