@@ -58,7 +58,7 @@ for _ in range(3600):
58
58
59
59
<img src =" res/day06/terminate_program.png " style =" zoom :40% ;" >
60
60
61
- 下面,我们用` for-in ` 循环实现从1到100的整数求和 ,即 $\small{\sum_ {n=1}^{100}{n}}$ 。
61
+ 下面,我们用` for-in ` 循环实现从 1 到 100 的整数求和 ,即 $\small{\sum_ {n=1}^{100}{n}}$ 。
62
62
63
63
``` python
64
64
"""
@@ -73,7 +73,7 @@ for i in range(1, 101):
73
73
print (total)
74
74
```
75
75
76
- 上面的代码中,变量` total ` 的作用是保存累加的结果。在循环的过程中,循环变量` i ` 的值会从` 1 ` 一直取到` 100 ` 。对于变量` i ` 的每个取值,我们都执行了` total += i ` ,它相当于` total = total + i ` ,这条语句实现了累加操作。所以,当循环结束,我们输出变量` total ` 的值,它的值就是从` 1 ` 累加到` 100 ` 的结果` 5050 ` 。注意,` print(total) ` 这条语句前是没有缩进的,它不受` for-in ` 循环的控制,不会重复执行。
76
+ 上面的代码中,变量` total ` 的作用是保存累加的结果。在循环的过程中,循环变量` i ` 的值会从 1 一直取到 100。对于变量` i ` 的每个取值,我们都执行了` total += i ` ,它相当于` total = total + i ` ,这条语句实现了累加操作。所以,当循环结束,我们输出变量` total ` 的值,它的值就是从 1 累加到 100 的结果 5050。注意,` print(total) ` 这条语句前是没有缩进的,它不受` for-in ` 循环的控制,不会重复执行。
77
77
78
78
我们再来写一个从1到100偶数求和的代码,如下所示。
79
79
@@ -93,7 +93,7 @@ print(total)
93
93
94
94
> ** 说明** :上面的` for-in ` 循环中我们使用了分支结构来判断循环变量` i ` 是不是偶数。
95
95
96
- 我们也可以修改` range ` 函数的参数,将起始值和跨度修改为` 2 ` ,用更为简单的代码实现从1到100的偶数求和 。
96
+ 我们也可以修改` range ` 函数的参数,将起始值和跨度修改为` 2 ` ,用更为简单的代码实现从 1 到 100 的偶数求和 。
97
97
98
98
``` python
99
99
"""
@@ -124,7 +124,7 @@ print(sum(range(2, 101, 2)))
124
124
125
125
如果要构造循环结构但是又不能确定循环重复的次数,我们推荐使用` while ` 循环。` while ` 循环通过布尔值或能产生布尔值的表达式来控制循环,当布尔值或表达式的值为` True ` 时,循环体(` while ` 语句下方保持相同缩进的代码块)中的语句就会被重复执行,当表达式的值为` False ` 时,结束循环。
126
126
127
- 下面我们用` while ` 循环来实现从1到100的整数求和 ,代码如下所示。
127
+ 下面我们用` while ` 循环来实现从 1 到 100 的整数求和 ,代码如下所示。
128
128
129
129
``` python
130
130
"""
@@ -141,9 +141,9 @@ while i <= 100:
141
141
print (total)
142
142
```
143
143
144
- 相较于` for-in ` 循环,上面的代码我们在循环开始前增加了一个变量` i ` ,我们使用这个变量来控制循环,所以` while ` 后面给出了` i <= 100 ` 的条件。在` while ` 的循环体中,我们除了做累加,还需要让变量` i ` 的值递增,所以我们添加了` i += 1 ` 这条语句,这样` i ` 的值就会依次取到 ` 1 ` 、 ` 2 ` 、 ` 3 ` 、……,直到` 101 ` 。当` i ` 变成` 101 ` 时,` while ` 循环的条件不再成立,代码会离开` while ` 循环,此时我们输出变量` total ` 的值,它就是从` 1 ` 到 ` 100 ` 求和的结果` 5050 ` 。
144
+ 相较于` for-in ` 循环,上面的代码我们在循环开始前增加了一个变量` i ` ,我们使用这个变量来控制循环,所以` while ` 后面给出了` i <= 100 ` 的条件。在` while ` 的循环体中,我们除了做累加,还需要让变量` i ` 的值递增,所以我们添加了` i += 1 ` 这条语句,这样` i ` 的值就会依次取到1、2、3 、……,直到 101。当` i ` 变成 101 时,` while ` 循环的条件不再成立,代码会离开` while ` 循环,此时我们输出变量` total ` 的值,它就是从 1 到 100 求和的结果 5050。
145
145
146
- 如果要实现从1到100的偶数求和 ,我们可以对上面的代码稍作修改。
146
+ 如果要实现从 1 到 100 的偶数求和 ,我们可以对上面的代码稍作修改。
147
147
148
148
``` python
149
149
"""
@@ -162,7 +162,7 @@ print(total)
162
162
163
163
### break和continue
164
164
165
- 我们再来看一个极端的场景,把` while ` 循环的条件直接设置为布尔值` True ` ,还是从1到100的偶数求和 。
165
+ 我们再来看一个极端的场景,把` while ` 循环的条件直接设置为布尔值` True ` ,还是从 1 到 100 的偶数求和 。
166
166
167
167
``` python
168
168
"""
@@ -181,7 +181,7 @@ while True:
181
181
print (total)
182
182
```
183
183
184
- 上面的代码中使用` while True ` 构造了一个条件恒成立的循环,也就意味着如果不做特殊处理,循环是不会结束的,这也就是常说的“死循环”。为了在` i ` 的值超过` 100 ` 后让循环停下来,我们使用了` break ` 关键字,它的作用是终止循环结构的执行。需要注意的是,` break ` 只能终止它所在的那个循环,这一点在使用嵌套循环结构时需要引起注意,后面我们会讲到什么是嵌套的循环结构。除了` break ` 之外,还有另一个在循环结构中可以使用的关键字` continue ` ,它可以用来放弃本次循环后续的代码直接让循环进入下一轮,代码如下所示。
184
+ 上面的代码中使用` while True ` 构造了一个条件恒成立的循环,也就意味着如果不做特殊处理,循环是不会结束的,这也就是常说的“死循环”。为了在` i ` 的值超过 100 后让循环停下来,我们使用了` break ` 关键字,它的作用是终止循环结构的执行。需要注意的是,` break ` 只能终止它所在的那个循环,这一点在使用嵌套循环结构时需要引起注意,后面我们会讲到什么是嵌套的循环结构。除了` break ` 之外,还有另一个在循环结构中可以使用的关键字` continue ` ,它可以用来放弃本次循环后续的代码直接让循环进入下一轮,代码如下所示。
185
185
186
186
``` python
187
187
"""
@@ -235,9 +235,9 @@ for i in range(1, 10):
235
235
236
236
#### 例子1:判断素数
237
237
238
- 要求:输入一个大于1的正整数 ,判断它是不是素数。
238
+ 要求:输入一个大于 1 的正整数 ,判断它是不是素数。
239
239
240
- > ** 提示** :素数指的是只能被1和自身整除的大于1的整数 。例如对于正整数` n ` ,我们可以通过在` 2 ` 到 ` n-1 ` 之间寻找有没有` n ` 的因子,来判断它到底是不是一个素数。当然,循环不用从` 2 ` 开始到` n-1 ` 结束,因为对于大于1的正整数 ,因子应该都是成对出现的,所以循环到 $\small{\sqrt{n}}$ 就可以结束了。
240
+ > ** 提示** :素数指的是只能被 1 和自身整除的大于 1 的整数 。例如对于正整数 $\small{n}$ ,我们可以通过在 2 到 $\small{n - 1}$ 之间寻找有没有 $\small{n}$ 的因子,来判断它到底是不是一个素数。当然,循环不用从 2 开始到 $\small{n - 1}$ 结束,因为对于大于 1 的正整数 ,因子应该都是成对出现的,所以循环到 $\small{\sqrt{n}}$ 就可以结束了。
241
241
242
242
``` python
243
243
"""
@@ -259,11 +259,11 @@ else:
259
259
print (f ' { num} 不是素数 ' )
260
260
```
261
261
262
- > ** 说明** :上面的代码中我们用了布尔型的变量` is_prime ` ,我们先将它赋值为` True ` ,假设` num ` 是一个素数;接下来,我们在` 2 ` 到` num ** 0.5 ` 的范围寻找` num ` 的因子,如果找到了` num ` 的因子,那么它一定不是素数,此时我们将` is_prime ` 赋值为` False ` ,同时使用` break ` 关键字终止循环结构;最后,我们根据` is_prime ` 的值是` True ` 还是` False ` 来给出不同的输出。
262
+ > ** 说明** :上面的代码中我们用了布尔型的变量` is_prime ` ,我们先将它赋值为` True ` ,假设` num ` 是一个素数;接下来,我们在 2 到` num ** 0.5 ` 的范围寻找` num ` 的因子,如果找到了` num ` 的因子,那么它一定不是素数,此时我们将` is_prime ` 赋值为` False ` ,同时使用` break ` 关键字终止循环结构;最后,我们根据` is_prime ` 的值是` True ` 还是` False ` 来给出不同的输出。
263
263
264
264
#### 例子2:最大公约数
265
265
266
- 要求:输入两个大于` 0 ` 的正整数,求两个数的最大公约数。
266
+ 要求:输入两个大于 0 的正整数,求两个数的最大公约数。
267
267
268
268
> ** 提示** :两个数的最大公约数是两个数的公共因子中最大的那个数。
269
269
@@ -282,9 +282,9 @@ for i in range(x, 0, -1):
282
282
break
283
283
```
284
284
285
- > ** 说明** :上面代码中` for-in ` 循环的循环变量值是从大到小的,这样我们找到的能够同时整除` x ` 和` y ` 的因子` i ` ,就是` x ` 和` y ` 的最大公约数,此时我们用` break ` 终止循环。如果` x ` 和` y ` 互质,那么循环会执行到` i ` 变成` 1 ` ,因为` 1 ` 是所有正整数的因子,此时` x ` 和` y ` 的最大公约数就是` 1 ` 。
285
+ > ** 说明** :上面代码中` for-in ` 循环的循环变量值是从大到小的,这样我们找到的能够同时整除` x ` 和` y ` 的因子` i ` ,就是` x ` 和` y ` 的最大公约数,此时我们用` break ` 终止循环。如果` x ` 和` y ` 互质,那么循环会执行到` i ` 变成 1 ,因为 1 是所有正整数的因子,此时` x ` 和` y ` 的最大公约数就是 1 。
286
286
287
- 用上面代码的找最大公约数在执行效率是有问题的。假如` x ` 的值是` 999999999998 ` ,` y ` 的值是` 999999999999 ` ,很显然两个数是互质的,最大公约数为` 1 ` 。但是我们使用上面的代码,循环会重复` 999999999998 ` 次,这通常是难以接受的。我们可以使用欧几里得算法(辗转相除法)来找最大公约数 ,它能帮我们更快的得到想要的结果,代码如下所示。
287
+ 用上面代码的找最大公约数在执行效率是有问题的。假如` x ` 的值是` 999999999998 ` ,` y ` 的值是` 999999999999 ` ,很显然两个数是互质的,最大公约数为 1 。但是我们使用上面的代码,循环会重复` 999999999998 ` 次,这通常是难以接受的。我们可以使用欧几里得算法来找最大公约数 ,它能帮我们更快的得到想要的结果,代码如下所示。
288
288
289
289
``` python
290
290
"""
@@ -304,7 +304,7 @@ print(f'最大公约数: {x}')
304
304
305
305
#### 例子3:猜数字游戏
306
306
307
- 要求:计算机出一个` 1 ` 到 ` 100 ` 之间的随机数,玩家输入自己猜的数字,计算机给出对应的提示信息“大一点”、“小一点”或“猜对了”,如果玩家猜中了数字,计算机提示用户一共猜了多少次,游戏结束,否则游戏继续。
307
+ 要求:计算机出一个 1 到 100 之间的随机数,玩家输入自己猜的数字,计算机给出对应的提示信息“大一点”、“小一点”或“猜对了”,如果玩家猜中了数字,计算机提示用户一共猜了多少次,游戏结束,否则游戏继续。
308
308
309
309
``` python
310
310
"""
@@ -330,7 +330,7 @@ while True:
330
330
print (f ' 你一共猜了 { counter} 次. ' )
331
331
```
332
332
333
- > ** 说明** :上面的代码使用` import random ` 导入了 Python 标准库的` random ` 模块,该模块的` randrange ` 函数帮助我们生成了` 1 ` 到 ` 100 ` 范围的随机数。变量` counter ` 用来记录循环执行的次数,也就是用户一共做出了几次猜测,每循环一次` counter ` 的值都会加` 1 ` 。
333
+ > ** 说明** :上面的代码使用` import random ` 导入了 Python 标准库的` random ` 模块,该模块的` randrange ` 函数帮助我们生成了 1 到 100 范围的随机数。变量` counter ` 用来记录循环执行的次数,也就是用户一共做出了几次猜测,每循环一次` counter ` 的值都会加 1 。
334
334
335
335
### 总结
336
336
0 commit comments