Skip to content

Commit

Permalink
更新了部分文档
Browse files Browse the repository at this point in the history
  • Loading branch information
jackfrued committed Feb 24, 2025
1 parent cf74785 commit a6d501a
Show file tree
Hide file tree
Showing 41 changed files with 18,696 additions and 155 deletions.
6 changes: 3 additions & 3 deletions Day01-20/02.第一个Python程序.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,15 +96,15 @@ Visual Studio Code 是由微软开发能够在 Windows、 Linux 和 macOS 等操

按照行业惯例,我们学习任何一门编程语言写的第一个程序都是输出`hello, world`,因为这段代码是伟大的丹尼斯·里奇(C 语言之父,和肯·汤普森一起开发了 Unix 操作系统)和布莱恩·柯尼汉(awk 语言的发明者)在他们的不朽著作《*The C Programming Language*》中写的第一段代码,下面是对应的 Python 语言的版本。

```Python
```python
print('hello, world')
```

> **注意**:上面代码中的圆括号、单引号都是在英文输入法状态下输入的,如果不小心写成了中文的圆括号或单引号,运行代码时会出现`SyntaxError: invalid character '(' (U+FF08)``SyntaxError: invalid character '‘' (U+2018)`这样的错误提示。
上面的代码只有一个语句,在这个语句中,我们用到了一个名为`print`的函数,它可以帮助我们输出指定的内容;`print`函数圆括号中的`'hello, world'`是一个字符串,它代表了一段文本内容;在 Python 语言中,我们可以用单引号或双引号来表示一个字符串。不同于 C、C++ 或 Java 这样的编程语言,Python 代码中的语句不需要用分号来表示结束,也就是说,如果我们想再写一条语句,只需要回车换行即可,代码如下所示。此外,Python 代码也不需要通过编写名为`main`的入口函数来使其运行,提供入口函数是编写可执行的 C、C++ 或 Java 代码必须要做的事情,这一点很多程序员都不陌生,但是在 Python 语言中它并不是必要的。

```Python
```python
print('hello, world')
print('goodbye, world')
```
Expand Down Expand Up @@ -134,7 +134,7 @@ Python 中有两种形式的注释:
1. 单行注释:以`#`和空格开头,可以注释掉从`#`开始后面一整行的内容。
2. 多行注释:三个引号(通常用双引号)开头,三个引号结尾,通常用于添加多行说明性内容。

```Python
```python
"""
第一个Python程序 - hello, world
Expand Down
10 changes: 5 additions & 5 deletions Day01-20/03.Python语言中的变量.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

1. 整型(`int`):Python 中可以处理任意大小的整数,而且支持二进制(如`0b100`,换算成十进制是4)、八进制(如`0o100`,换算成十进制是64)、十进制(`100`)和十六进制(`0x100`,换算成十进制是256)的表示法。运行下面的代码,看看会输出什么。

```Python
```python
print(0b100) # 二进制整数
print(0o100) # 八进制整数
print(100) # 十进制整数
Expand All @@ -25,7 +25,7 @@

2. 浮点型(`float`):浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,浮点数除了数学写法(如`123.456`)之外还支持科学计数法(如`1.23456e2`,表示$\small{1.23456 \times 10^{2}}$)。运行下面的代码,看看会输出什么。

```Python
```python
print(123.456) # 数学写法
print(1.23456e2) # 科学计数法
```
Expand Down Expand Up @@ -53,7 +53,7 @@
下面通过例子来说明变量的类型和变量的使用。
```Python
```python
"""
使用变量保存数据并进行加减乘除运算
Expand All @@ -71,7 +71,7 @@ print(a / b) # 3.75
在 Python 中可以使用`type`函数对变量的类型进行检查。程序设计中函数的概念跟数学上函数的概念非常类似,数学上的函数相信大家并不陌生,它包括了函数名、自变量和因变量。如果暂时不理解函数这个概念也不要紧,我们会在后续的内容中专门讲解函数的定义和使用。
```Python
```python
"""
使用type函数检查变量的类型
Expand All @@ -98,7 +98,7 @@ print(type(d)) # <class 'bool'>
下面的例子为大家演示了Python中类型转换的操作。
```Python
```python
"""
变量的类型转换操作
Expand Down
6 changes: 3 additions & 3 deletions Day01-20/07.分支和循环结构实战.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

> **说明**:素数指的是只能被 1 和自身整除的正整数(不包括 1),之前我们写过判断素数的代码,这里相当于是一个升级版本。
```Python
```python
"""
输出100以内的素数
Expand All @@ -29,7 +29,7 @@ for num in range(2, 100):

> **说明**:斐波那契数列(Fibonacci sequence),通常也被称作黄金分割数列,是意大利数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)在《计算之书》中研究理想假设条件下兔子成长率问题而引入的数列,因此这个数列也常被戏称为“兔子数列”。斐波那契数列的特点是数列的前两个数都是 1,从第三个数开始,每个数都是它前面两个数的和。按照这个规律,斐波那契数列的前 10 个数是:`1, 1, 2, 3, 5, 8, 13, 21, 34, 55`。斐波那契数列在现代物理、准晶体结构、化学等领域都有直接的应用。
```Python
```python
"""
输出斐波那契数列中的前20个数
Expand Down Expand Up @@ -125,7 +125,7 @@ for x in range(0, 21):

> **说明**:CRAPS又称花旗骰,是美国拉斯维加斯非常受欢迎的一种的桌上赌博游戏。该游戏使用两粒骰子,玩家通过摇两粒骰子获得点数进行游戏。简化后的规则是:玩家第一次摇骰子如果摇出了 7 点或 11 点,玩家胜;玩家第一次如果摇出 2 点、3 点或 12 点,庄家胜;玩家如果摇出其他点数则游戏继续,玩家重新摇骰子,如果玩家摇出了 7 点,庄家胜;如果玩家摇出了第一次摇的点数,玩家胜;其他点数玩家继续摇骰子,直到分出胜负。为了增加代码的趣味性,我们设定游戏开始时玩家有 1000 元的赌注,每局游戏开始之前,玩家先下注,如果玩家获胜就可以获得对应下注金额的奖励,如果庄家获胜,玩家就会输掉自己下注的金额。游戏结束的条件是玩家破产(输光所有的赌注)。
```Python
```python
"""
Craps赌博游戏
Expand Down
6 changes: 3 additions & 3 deletions Day01-20/09.常用数据结构之列表-2.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ print(nums2)

场景三: 有一个整数列表`nums1`,创建一个新的列表`nums2`,将`nums1`中大于`50`的元素放到`nums2`中。

```Python
```python
nums1 = [35, 12, 97, 64, 55]
nums2 = []
for num in nums1:
Expand All @@ -126,7 +126,7 @@ print(nums2)

使用列表生成式做同样的事情,代码如下所示。

```Python
```python
nums1 = [35, 12, 97, 64, 55]
nums2 = [num for num in nums1 if num > 50]
print(nums2)
Expand All @@ -148,7 +148,7 @@ print(scores[0][1])

如果想通过键盘输入的方式来录入5个学生3门课程的成绩并保存在列表中,可以使用如下所示的代码。

```Python
```python
scores = []
for _ in range(5):
temp = []
Expand Down
2 changes: 1 addition & 1 deletion Day01-20/11.常用数据结构之字符串.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ print(len('goodbye, world')) # 14

#### 索引和切片

字符串的索引和切片操作跟列表几乎区别,因为字符串也是一种有序序列,可以通过正向或反向的整数索引访问其中的元素。但是有一点需要注意,因为**字符串是不可变类型**,所以**不能通过索引运算修改字符串中的字符**
字符串的索引和切片操作跟列表、元组几乎没有区别,因为字符串也是一种有序序列,可以通过正向或反向的整数索引访问其中的元素。但是有一点需要注意,因为**字符串是不可变类型**,所以**不能通过索引运算修改字符串中的字符**

```python
s = 'abc123456'
Expand Down
14 changes: 8 additions & 6 deletions Day01-20/12.常用数据结构之集合.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
## 常用数据结构之集合

在学习了列表和元组之后,我们再来学习一种容器型的数据类型,它的名字叫集合(set)。说到集合这个词大家一定不会陌生,在数学课本上就有这个概念。如果我们**把一定范围的、确定的、可以区别的事物当作一个整体来看待**,那么这个整体就是集合,集合中的各个事物称为集合的**元素**。通常,集合需要满足以下特性
在学习了列表和元组之后,我们再来学习一种容器型的数据类型,它的名字叫集合(set)。说到集合这个词大家一定不会陌生,在数学课本上就有这个概念。如果我们**把一定范围的、确定的、可以区别的事物当作一个整体来看待**,那么这个整体就是集合,集合中的各个事物称为集合的**元素**。通常,集合需要满足以下要求

1. **无序性**:一个集合中,每个元素的地位都是相同的,元素之间是无序的。
2. **互异性**:一个集合中,任何两个元素都是不相同的,即元素在集合中只能出现一次。
3. **确定性**:给定一个集合和一个任意元素,该元素要么属这个集合,要么不属于这个集合,二者必居其一,不允许有模棱两可的情况出现。

Python 程序中的集合跟数学上的集合没有什么本质区别,需要强调的是上面所说的无序性和互异性。无序性说明集合中的元素并不像列中的元素那样存在某种次序,可以通过索引运算就能访问任意元素,**集合并不支持索引运算**。另外,集合的互异性决定了**集合中不能有重复元素**,这一点也是集合区别于列表的地方,我们无法将重复的元素添加到一个集合中。集合类型必然是支持`in``not in`成员运算的,这样就可以确定一个元素是否属于集合,也就是上面所说的集合的确定性。**集合的成员运算在性能上要优于列表的成员运算**,这是集合的底层存储特性决定的,此处我们暂时不做讨论,大家记住这个结论即可。

> **说明**:集合底层使用了哈希存储(散列存储),对哈希存储感兴趣的读者可以看看维基百科上“散列表”这个词条
> **说明**:集合底层使用了哈希存储(散列存储),对哈希存储不了解的读者可以先看看“Hello 算法”网站对[哈希表](https://www.hello-algo.com/chapter_hashing/)的讲解,感谢作者的开源精神
### 创建集合

Expand All @@ -31,7 +31,9 @@ set5 = {num for num in range(1, 20) if num % 3 == 0 or num % 7 == 0}
print(set5)
```

需要提醒大家,集合中的元素必须是`hashable`类型,使用哈希存储的容器都会对元素提出这一要求。所谓`hashable`类型指的是能够计算出哈希码的数据类型,通常不可变类型都是`hashable`类型,如整数(`int`)、浮点小数(`float`)、布尔值(`bool`)、字符串(`str`)、元组(`tuple`)等。可变类型都不是`hashable`类型,因为可变类型无法计算出确定的哈希码,所以它们不能放到集合中。例如:我们不能将列表作为集合中的元素;同理,由于集合本身也是可变类型,所以集合也不能作为集合中的元素。我们可以创建出嵌套的列表,但是我们不能创建出嵌套的集合,这一点在使用集合的时候一定要引起注意。
需要提醒大家,集合中的元素必须是`hashable`类型,所谓`hashable`类型指的是能够计算出哈希码的数据类型,通常不可变类型都是`hashable`类型,如整数(`int`)、浮点小数(`float`)、布尔值(`bool`)、字符串(`str`)、元组(`tuple`)等。可变类型都不是`hashable`类型,因为可变类型无法计算出确定的哈希码,所以它们不能放到集合中。例如:我们不能将列表作为集合中的元素;同理,由于集合本身也是可变类型,所以集合也不能作为集合中的元素。我们可以创建出嵌套列表(列表的元素也是列表),但是我们不能创建出嵌套的集合,这一点在使用集合的时候一定要引起注意。

> **温馨提示**:如果不理解上面提到的哈希码、哈希存储这些概念,可以先放放,因为它并不影响你继续学习和使用 Python 语言。当然,如果是计算机专业的小伙伴,不理解哈希存储是很难被原谅的,要赶紧去补课了。
### 元素的遍历

Expand All @@ -47,7 +49,7 @@ for elem in set1:
### 集合的运算

Python 为集合类型提供了非常丰富的运算符,主要包括:成员运算、交集运算、并集运算、差集运算、比较运算(相等性、子集、超集)等。
Python 为集合类型提供了非常丰富的运算,主要包括:成员运算、交集运算、并集运算、差集运算、比较运算(相等性、子集、超集)等。

#### 成员运算

Expand Down Expand Up @@ -130,7 +132,7 @@ print(set2.issuperset(set1)) # True
### 集合的方法

刚才我们说过,Python 中的集合是可变类型,我们可以通过集合类型的方法向集合添加元素或从集合中删除元素
刚才我们说过,Python 中的集合是可变类型,我们可以通过集合的方法向集合添加元素或从集合中删除元素

```python
set1 = {1, 10, 100}
Expand All @@ -151,7 +153,7 @@ set1.clear()
print(set1) # set()
```

> **说明**删除集合元素的`remove`方法在元素不存在时会引发`KeyError`错误,所以上面的代码中我们先通过成员运算判断元素是否在集合中。集合类型还有一个`pop`方法可以从集合中随机删除一个元素,该方法在删除元素的同时会获得被删除的元素,而`remove``discard`方法仅仅是删除元素,不会获得被删除的元素
> **说明**删除元素的`remove`方法在元素不存在时会引发`KeyError`错误,所以上面的代码中我们先通过成员运算判断元素是否在集合中。集合类型还有一个`pop`方法可以从集合中随机删除一个元素,该方法在删除元素的同时会返回(获得)被删除的元素,而`remove``discard`方法仅仅是删除元素,不会返回(获得)被删除的元素
集合类型还有一个名为`isdisjoint`的方法可以判断两个集合有没有相同的元素,如果没有相同元素,该方法返回`True`,否则该方法返回`False`,代码如下所示。

Expand Down
Loading

0 comments on commit a6d501a

Please sign in to comment.