目录

Python基础语法(5)while循环

Python基础语法(5)while循环

学习目标

  • 循环简介
  • while的语法
  • while循环的应用
  • break和continue
  • while循环嵌套

循环简介

如果一个操作需要重复进行,无需编写重复性的代码,利用循环则可以让代码更高效地重复执行。在Python中循环有两种,一种是while循环,一种是for循环,两种实现的效果可以是相同的。


while的语法

1
2
3
4
while 条件:
  条件成立时需要重复执行的代码1
  条件成立时需要重复执行的代码2
  ...

小案例:重复执行5次打印"我想学好Python”。

1
2
3
4
5
times = 1
while times <=5:
  print("我想学好Python!")
  times += 1
print("程序结束!")

计数器的书写习惯

  • 计数器通常初始化为0,即初始值为0出发,贴近计算机的认知。
  • 通常用i或者j表示计数器变量。
  • 判断条件用小于或者大于,增量的书写无所谓。

循环的执行流程

先判断循环判断条件,如果满足则执行循环体内的代码,然后回到循环判断条件,如此循环往复直到循环判断条件不满足,则跳出循环,执行循环以下的其他的代码。


while循环的应用

需求:计算1-100的累加和

分析需求:1-100的累加和即1+2+3+…+99+100的和,即前两个数字的和加上后一个数字。

1
2
3
4
5
6
i = 1
sum = 0
while i <= 100:
  sum += i
  i += 1
print(sum)  # 输出结果为5050

为了验证程序的准确性,可以改小循环的边界测试一下。

需求:计算1-100以内的偶数的累加和

分析需求:对待加数字进行逐个判断,是则累加不是则不累加继续循环。

方法一,条件判断取偶数:

1
2
3
4
5
6
7
i = 1
sum = 0
while i <= 100:
  if i%2 == 0:
    sum += i
  i += 1
print(sum)  # 结果为2550

这里只需要嵌套用一个if即可,注意 i+=1 的缩进要和if对齐

方法二,计数器加2:

1
2
3
4
5
6
i = 0
sum = 0
while i < 100+1:  # 需要把100包含进条件
  sum += i
  i += 2
print(sum)  # 结果为2550

虽然方法二代码量小,从逻辑上来讲方法一更符合人的思维,建议使用方法一,计数器加二是人的思想经验。注意不要忘记计数器的累加。


break和continue

break和continue是在循环过程中满足一定的条件退出循环的两种不同方式。break是在循环中满足条件后直接从循环中跳出来,即终止循环;continue是在循环满足条件后当前循环终止,即continue以下的语句不执行,重新开始下一次循环。

案例

需求:循环吃五个苹果,吃到第三个吃饱了不吃了,第四、五次循环不执行。

1
2
3
4
5
6
7
i = 1
while i <= 5:
  if i == 3:
    print(f"我吃了{i}个苹果了,现在饱了")
    break
  print(f"我吃了{i}个苹果,现在还想吃")
  i += 1

需求:循环吃五个苹果,吃到第三个出现虫子,第四第五个苹果还是吃掉。

1
2
3
4
5
6
7
8
i = 1
while i <= 5:
  if i == 3:
    print("吃到一个虫子,我不吃这个")    # 在continue前最好修改一次计数器
    i += 1
    continue
  print(f"我吃第{i}个苹果,我还想吃")
  i += 1

⚠️注意:在continue使用的过程中要注意计数器的变化,否则容易引起死循环。


while循环嵌套

一套需要循环执行的流程需要执行多次的时候,运用循环的嵌套可以实现,例如:今天吃三餐饭做三次家务和一次锻炼,一套这样的流程我需要坚持一周;例如今天要把代码学十遍,一套这样的流程我需要坚持一个星期等等。

代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
days = 0
while days < 7:
  # 开始一天的任务对变量进行重置
  haveMeals = 0
  doHousework = 0
  while haveMeals < 3:
    haveMeals += 1
  while doHousework <3:
    doHousework += 1
  days += 1
  print(f"今天是第{days}天,吃了{haveMeals}次饭,做了{doHousework}次家务")
1
2
3
4
5
6
7
days = 0
while days < 7:
  learnCoding = 0
  while learnCoding < 10:
    learnCoding += 1
  days += 1
  print(f"今天是第{days}天,学了{learnCoding}次代码")

嵌套循环执行流程

当内部循环执行完成后,再执行下一次的外部循环的条件判断,也就是子循环的条件为假时,跳出子循环,完成子循环之后的代码后,转到父循环的判断条件进行判断来进行父循环流程。

循环嵌套应用

需求:打印一个由*组成的矩形。

1
2
3
4
5
6
7
8
hang = 0
while hang < 5:
  lie = 0
  while lie < 10:
    print("*", end="")
    lie += 1
  print()
  hang += 1

需求:打印一个由*组成的三角形。

1
2
3
4
5
6
7
8
hang = 0
while hang < 5:
  lie = 0
  while lie <= hang:  # 条件更改内层循环计数小于等于外层,这样就能保持打印*数和行号数相同,从而形成梯度
    print("*", end="")
    lie += 1
  print()
  hang += 1

需求:打印一个九九乘法表

1
2
3
4
5
6
7
8
9
hang = 0
while hang < 9:
  lie = 0
  while lie <= hang:
    # 由于行和列从0开始起,实际乘法表从1开始,故要在显示中加一,列放在前面是因为每次子循环开始列是最小值
    print(f"{lie+1}*{hang+1}={(hang+1)*(lie+1)}", end="\t")
    lie += 1
  print()
  hang += 1

行和列建立联动关系,这种思想很重要。


总结:

  • Python可以使用while循环进行简单操作进行重复性的进行,需要注意的是语法的缩进和计数器的编写习惯。

  • 在进行大的循环次数的程序编写时,我们可以通过改小循环次数来进行测试。

  • 循环程序的编写最好遵循人能理解的习惯。

  • continue语句运用时一定要注意到计数器的变化,防止死循环的发生。

  • break和continue语句具有不同退出循环的方式,注意辨别。

  • 在循环嵌套时要理解整个程序的执行流程,擅长使用debug工具。