修正了文档代码中的bug

pull/7/head
jackfrued 2020-04-06 21:17:51 +08:00
parent 3c9e65ad9a
commit 32a49632a2
4 changed files with 25 additions and 31 deletions

View File

@ -152,10 +152,3 @@ for factor in range(x, 0, -1):
学会了Python中的分支结构和循环结构我们就可以解决很多实际的问题了。通过这节课的学习大家应该已经知道了可以用`for`和`while`关键字来构造循环结构。**如果知道循环的次数,我们通常使用**`for`**循环**;如果**循环次数不能确定,可以用**`while`**循环**。在循环中还**可以使用**`break`**来提前结束循环**。 学会了Python中的分支结构和循环结构我们就可以解决很多实际的问题了。通过这节课的学习大家应该已经知道了可以用`for`和`while`关键字来构造循环结构。**如果知道循环的次数,我们通常使用**`for`**循环**;如果**循环次数不能确定,可以用**`while`**循环**。在循环中还**可以使用**`break`**来提前结束循环**。
> **温馨提示**:学习中如果遇到困难,可以加**QQ交流群**询问,群号:**789050736**,当然也可以看看我们为大家录制的入门视频,视频的链接地址:<https://pan.baidu.com/s/10y7sGM016YBM7gDdauGqLw>密码4s6r。 > **温馨提示**:学习中如果遇到困难,可以加**QQ交流群**询问,群号:**789050736**,当然也可以看看我们为大家录制的入门视频,视频的链接地址:<https://pan.baidu.com/s/10y7sGM016YBM7gDdauGqLw>密码4s6r。

View File

@ -80,36 +80,37 @@ from random import randint
money = 1000 money = 1000
while money > 0: while money > 0:
print(f'你的总资产为: {money}元') print(f'你的总资产为: {money}元')
needs_go_on = False go_on = False
# 下注金额必须大于0小于等于玩家总资产 # 下注金额必须大于0小于等于玩家总资产
while True: while True:
debt = int(input('请下注: ')) debt = int(input('请下注: '))
if 0 < debt <= money: if 0 < debt <= money:
break break
# 第一次摇色子 # 第一次摇色子
first_point = randint(1, 6) + randint(1, 6) # 用1到6均匀分布的随机数模拟摇色子得到的点数
print(f'玩家摇出了{first_point}点') first = randint(1, 6) + randint(1, 6)
if first_point == 7 or first_point == 11: print(f'\n玩家摇出了{first}点')
print('玩家胜!') if first == 7 or first == 11:
print('玩家胜!\n')
money += debt money += debt
elif first_point == 2 or first_point == 3 or first_point == 12: elif first == 2 or first == 3 or first == 12:
print('庄家胜!') print('庄家胜!\n')
money -= debt money -= debt
else: else:
needs_go_on = True go_on = True
# 第一次摇色子没有分出胜负游戏继续 # 第一次摇色子没有分出胜负游戏继续
while needs_go_on: while go_on:
needs_go_on = False go_on = False
current_point = randint(1, 6) + randint(1, 6) current = randint(1, 6) + randint(1, 6)
print(f'玩家摇出了{current_point}点') print(f'玩家摇出了{current}点')
if current == 7: if current == 7:
print('庄家胜') print('庄家胜!\n')
money -= debt money -= debt
elif current == first: elif current == first:
print('玩家胜') print('玩家胜!\n')
money += debt money += debt
else: else:
needs_go_on = True go_on = True
print('你破产了, 游戏结束!') print('你破产了, 游戏结束!')
``` ```

View File

@ -4,11 +4,11 @@
![](res/equation.png) ![](res/equation.png)
事实上上面的问题等同于将8个苹果分成四组每组至少一个苹果有多少种方案所以答案应该是$C_7^3=35$。组合数的计算公式如下所示。 事实上上面的问题等同于将8个苹果分成四组每组至少一个苹果有多少种方案这个问题进一步等价于在分隔8个苹果的7个空隙之间插入三个隔板将苹果分成四组有多少种方式所以答案应该是`C(7,3)=35`。组合数的计算公式如下所示。
![](res/combination.png) ![](res/combination.png)
根据我们前面学习的知识可以用循环做累乘来计算阶乘那么通过下面的Python代码我们就可以计算出组合数`C(M,N)`的值,代码如下所示。 根据我们前面学习的知识,可以用循环做累乘的方式来计算阶乘那么通过下面的Python代码我们就可以计算出组合数`C(M,N)`的值,代码如下所示。
```Python ```Python
""" """
@ -37,15 +37,15 @@ print(fm // fn // fm_n)
### 函数的作用 ### 函数的作用
不知大家是否注意到,上面的代码中我们做了三次求阶乘,虽然`m`、`n`、`m - n`的值各不相同,但是三段代码并没有实质性的区别,属于重复代码。世界级的编程大师*Martin Fowler*先生曾经说过:“**代码有很多种坏味道,重复是最坏的一种!**”。要写出高质量的代码首先要解决的就是重复代码的问题。对于上面的代码来说,我们可以将计算阶乘的功能封装到一个称之为“函数”的功能模块中,在需要计算阶乘的地方,我们只需要“调用”这个“函数”就可以了。 不知大家是否注意到,上面的代码中我们做了三次求阶乘,虽然`m`、`n`、`m - n`的值各不相同,但是三段代码并没有实质性的区别,属于重复代码。世界级的编程大师*Martin Fowler*先生曾经说过:“**代码有很多种坏味道,重复是最坏的一种!**”。要写出高质量的代码首先要解决的就是重复代码的问题。对于上面的代码来说,我们可以将计算阶乘的功能封装到一个称为“函数”的代码块中,在需要计算阶乘的地方,我们只需要“调用函数”就可以了。
### 定义函数 ### 定义函数
数学上的函数通常形如`y = f(x)`或者`z = g(x, y)`这样的形式,在`y = f(x)`中,`f`是函数的名字,`x`是函数的自变量,`y`是函数的因变量;而`z = g(x, y)`中,`g`是函数名,`x`和`y`是函数的自变量,`z`是函数的因变量。Python中的函数跟这个结构是一致的每个函数都有自己的名字、自变量和因变量。我们通常把Python中函数的自变量称为函数的参数而因变量称为函数的返回值。 数学上的函数通常形如`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`关键字来返回函数的执行结果,就是我们刚才说的函数的因变量。
我们可以用函数的知识对上面的代码进行重构(不影响代码执行结果的前提下对代码的结构进行调整),重构之后的代码如下所示。 我们可以通过函数对上面的代码进行重构。所谓重构,是在不影响代码执行结果的前提下对代码的结构进行调整。重构之后的代码如下所示。
```Python ```Python
""" """
@ -68,7 +68,7 @@ def fac(num):
m = int(input('m = ')) m = int(input('m = '))
n = int(input('n = ')) n = int(input('n = '))
# 当需要计算阶乘的时候不用再写重复代码而是直接调用函数fac # 当需要计算阶乘的时候不用再写重复代码而是直接调用函数fac
# 调用函数的语法是在函数名后面跟上圆括号并传入参数 # 调用函数的语法是在函数名后面跟上圆括号并传入参数
print(fac(m) // fac(n) // fac(m - n)) print(fac(m) // fac(n) // fac(m - n))
``` ```
@ -77,7 +77,7 @@ print(fac(m) // fac(n) // fac(m - n))
#### 参数的默认值 #### 参数的默认值
在Python语言中如果函数中没有`return`语句,那么函数默认返回代表空值的`None`。另外在定义函数时函数也可以没有自变量但是函数名后面的圆括号是必须有的。Python中还允许函数的参数拥有默认值例如我们把上一课中摇色子获得点数的功能定义到一个函数中,我们可以写出如下所示的代码 如果函数中没有`return`语句,那么函数默认返回代表空值的`None`。另外在定义函数时函数也可以没有自变量但是函数名后面的圆括号是必须有的。Python中还允许函数的参数拥有默认值我们可以把上一课“CRAPS赌博游戏”的摇色子获得点数的功能封装成函数代码如下所示
```Python ```Python
""" """

View File

@ -320,7 +320,7 @@ print(s.strip()) # jackfrued@126.com
#### 其他方法 #### 其他方法
字符串类型还有许多其他的方法,等我们用到这些方法的时候再为大家进行续点讲解。平常我们使用字符串类型的时候,还有一个经常用到的操作是对字符串进行匹配检查即检查字符串是否满足某种特定的模式。例如一个网站对用户注册信息中用户名和邮箱的检查就属于模式匹配检查。实现模式匹配检查的工具叫正则表达式Python语言通过标准库中的`re`模块提供了对正则表达式的支持,我们会在后续的课程中为大家讲解这个知识点。 字符串类型还有许多其他的方法,后面我们用到这些方法的时候再为大家进行续点讲解。对于字符串类型来说,还有一个常用的操作是对字符串进行匹配检查,即检查字符串是否满足某种特定的模式。例如,一个网站对用户注册信息中用户名和邮箱的检查,就属于模式匹配检查。实现模式匹配检查的工具叫正则表达式Python语言通过标准库中的`re`模块提供了对正则表达式的支持,我们会在后续的课程中为大家专门讲解这个知识点。
### 简单的总结 ### 简单的总结