修正了文档代码中的bug
parent
3c9e65ad9a
commit
32a49632a2
|
@ -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。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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('你破产了, 游戏结束!')
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -320,7 +320,7 @@ print(s.strip()) # jackfrued@126.com
|
||||||
|
|
||||||
#### 其他方法
|
#### 其他方法
|
||||||
|
|
||||||
字符串类型还有许多其他的方法,等我们用到这些方法的时候再为大家进行续点讲解。平常我们使用字符串类型的时候,还有一个经常用到的操作是对字符串进行匹配检查,即检查字符串是否满足某种特定的模式。例如,一个网站对用户注册信息中用户名和邮箱的检查,就属于模式匹配检查。实现模式匹配检查的工具叫正则表达式,Python语言通过标准库中的`re`模块提供了对正则表达式的支持,我们会在后续的课程中为大家讲解这个知识点。
|
字符串类型还有许多其他的方法,后面我们用到这些方法的时候再为大家进行续点讲解。对于字符串类型来说,还有一个常用的操作是对字符串进行匹配检查,即检查字符串是否满足某种特定的模式。例如,一个网站对用户注册信息中用户名和邮箱的检查,就属于模式匹配检查。实现模式匹配检查的工具叫做正则表达式,Python语言通过标准库中的`re`模块提供了对正则表达式的支持,我们会在后续的课程中为大家专门讲解这个知识点。
|
||||||
|
|
||||||
### 简单的总结
|
### 简单的总结
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue