修正了文档中的问题

pull/7/head
jackfrued 2020-04-14 15:35:40 +08:00
parent af189e127a
commit 49ac6b8329
5 changed files with 24 additions and 6 deletions

View File

@ -53,7 +53,7 @@ python hello.py
> **提醒**我们也可以在任意位置打开“命令行提示符”或“终端”工具然后将需要执行的Python代码通过拖拽的方式拖入到“命令行提示符”或“终端”中这样相当于指定了文件的绝对路径来运行该文件中的Python代码。再次提醒macOS系统要通过`python3`命令来运行该程序。
你可以尝试一下将上面程序单引号中的`hello, world`换成其他的内容;你也可以尝试着多写几个`print`(最好每行只有一个哟),看看会发生什么事情
你可以尝试将上面程序单引号中的`hello, world`换成其他内容;你也可以尝试着多写几个这样的语句,看看会运行出怎样的结果。需要提醒大家,上面代码中的`print('hello, world')`就是一条完整的语句我们用Python写程序最好每一行代码中只有一条语句。虽然使用`;`s分隔符可以将多个语句写在一行代码中但是最好不要这样做因为代码会变得非常难看
### 注释你的代码

View File

@ -24,9 +24,11 @@ else:
print('身份验证失败!')
```
需要说明的是和C/C++、Java等语言不同Python中没有用花括号来构造代码块而是**使用了缩进的方式来表示代码的层次结构**,如果`if`条件成立的情况下需要执行多条语句,只要保持多条语句具有相同的缩进就可以了。换句话说**连续的代码如果又保持了相同的缩进那么它们属于同一个代码块**,相当于是一个执行的整体。**缩进**可以使用任意数量的空格,但**通常使用4个空格**建议大家**不要使用制表键**或者**设置你的代码编辑工具自动将制表键变成4个空格**
需要说明的是不同于C++、Java等编程语言Python中没有用花括号来构造代码块而是**使用了缩进的方式来表示代码的层次结构**,如果`if`条件成立的情况下需要执行多条语句,只要保持多条语句具有相同的缩进就可以了。换句话说**连续的代码如果又保持了相同的缩进那么它们属于同一个代码块**,相当于是一个执行的整体。**缩进**可以使用任意数量的空格,但**通常使用4个空格**强烈建议大家**不要使用制表键来缩进代码**,如果你已经习惯了这么做,可以**设置代码编辑工具将1个制表键自动变成4个空格**,很多的代码编辑工具都支持这项功能
当然如果要构造出更多的分支,可以使用`if...elif...else...`结构或者嵌套的`if...else...`结构,下面的代码演示了如何利用多分支结构实现分段函数求值。
> **提示**`if`和`else` 的最后面有一个`:`,它是用英文输入法输入的冒号;程序中输入的`'`、`"`、`=`、`(`、`)`等特殊字符,都是在英文输入法状态下输入的。有很多初学者经常不注意这一点,结果运行代码的时候就会遇到很多莫名其妙的错误提示。**强烈建议**大家在写代码的时候都**打开英文输入法**(注意是英文输入法而不是中文输入法的英文输入模式),这样可以避免很多不必要的麻烦。
如果要构造出更多的分支,可以使用`if...elif...else...`结构或者嵌套的`if...else...`结构,下面的代码演示了如何利用多分支结构实现分段函数求值。
![](res/piecewise-function.png)

View File

@ -8,7 +8,7 @@
### for-in循环
如果明确的知道循环执行的次数,我们推荐使用`for-in`循环例如计算1到100的和。
如果明确的知道循环执行的次数,我们推荐使用`for-in`循环例如计算1到100的和。 被`for-in`循环控制的语句块也是通过缩进的方式来确定的,这一点跟分支结构完全相同,大家看看下面的代码就明白了。
```Python
"""
@ -60,6 +60,7 @@ Author: 骆昊
"""
import random
# 产生一个1-100范围的随机数
answer = random.randint(1, 100)
counter = 0
while True:
@ -72,6 +73,7 @@ while True:
else:
print('恭喜你猜对了!')
break
# 当退出while循环的时候显示用户一共猜了多少次
print(f'你总共猜了{counter}次')
```

View File

@ -43,7 +43,7 @@ print(fm // fn // fm_n)
数学上的函数通常形如`y = f(x)`或者`z = g(x, y)`这样的形式,在`y = f(x)`中,`f`是函数的名字,`x`是函数的自变量,`y`是函数的因变量;而在`z = g(x, y)`中,`g`是函数名,`x`和`y`是函数的自变量,`z`是函数的因变量。Python中的函数跟这个结构是一致的每个函数都有自己的名字、自变量和因变量。我们通常把Python中函数的自变量称为函数的参数而因变量称为函数的返回值。
在Python中可以使用`def`关键字来定义函数,和变量一样每个函数也应该有一个漂亮的名字,命名规则跟变量的命名规则是一致的(赶紧想一想我们之前讲过的变量的命名规则)。在函数名后面的圆括号中可以放置传递给函数的参数,就是我们刚才说到的函数的自变量,而函数执行完成后我们会通过`return`关键字来返回函数的执行结果,就是我们刚才说的函数的因变量。
在Python中可以使用`def`关键字来定义函数,和变量一样每个函数也应该有一个漂亮的名字,命名规则跟变量的命名规则是一致的(赶紧想一想我们之前讲过的变量的命名规则)。在函数名后面的圆括号中可以放置传递给函数的参数,就是我们刚才说到的函数的自变量,而函数执行完成后我们会通过`return`关键字来返回函数的执行结果,就是我们刚才说的函数的因变量。一个函数要执行的代码块(要做的事情)也是通过缩进的方式来表示的,跟之前分支和循环结构的代码块是一样的。大家不要忘了`def`那一行的最后面还有一个`:`,之前提醒过大家,那是在英文输入法状态下输入的冒号。
我们可以通过函数对上面的代码进行重构。**所谓重构,是在不影响代码执行结果的前提下对代码的结构进行调整。**重构之后的代码如下所示。

View File

@ -34,6 +34,8 @@ for elem in set4:
print(elem)
```
需要提醒大家,集合中的元素必须是`hashable`类型。所谓`hashable`类型指的是能够计算出哈希码的数据类型你可以暂时将哈希码理解为和变量对应的唯一的ID值。通常不可变类型都是`hashable`类型,如整数、浮点、字符串、元组等,而可变类型都不是`hashable`类型因为可变类型无法确定唯一的ID值所以也就不能放到集合中。集合本身也是可变类型所以集合不能够作为集合中的元素这一点请大家一定要注意。
### 集合的运算
Python为集合类型提供了非常丰富的运算符主要包括成员运算、交集运算、并集运算、差集运算、比较运算相等性、子集、超集等。
@ -167,9 +169,21 @@ print(set1.isdisjoint(set2)) # True
print(set1.isdisjoint(set3)) # False
```
### 不可变集合
Python中还有一种不可变类型的集合名字叫`frozenset`。`set`跟`frozenset`的区别就如同`list`跟`tuple`的区别,`frozenset`由于是不可变类型,能够计算出哈希码,因此它可以作为`set`中的元素。除了不能添加和删除元素,`frozenset`在其他方面跟`set`基本是一样的,下面的代码简单的展示了`frozenset`的用法。
```Python
set1 = frozenset({1, 3, 5, 7})
set2 = frozenset(range(1, 6))
print(set1 & set2) # frozenset({1, 3, 5})
print(set1 | set2) # frozenset({1, 2, 3, 4, 5, 7})
print(set1 - set2) # frozenset({7})
print(set1 < set2) # False
```
### 简单的总结
Python中的**集合底层使用了哈希存储**,对于这一点我们暂时不做介绍,在后面的课程有需要的时候我再为大家讲解集合的底层原理和实际应用,现阶段大家只需要知道**集合是一种容器**,它的**元素没有序不能使用索引且必须唯一**就足够了。
Python中的集合底层使用了**哈希存储**的方式,对于这一点我们暂时不做介绍,在后面的课程有需要的时候再为大家讲解集合的底层原理,现阶段大家只需要知道**集合是一种容器**元素必须是`hashable`类型,与列表不同的地方在于集合中的元素**没有序**、**不能用索引运算**、**不能重复**
> **温馨提示**:学习中如果遇到困难,可以加**QQ交流群**询问,群号:**789050736**。