在编写程序时,我们经常需要重复执行同一段代码。例如在游戏中释放了一个持续的治疗技能,效果是一段时间内不断的回血,总计回复十次。
这样的写法显然不合适:
hp:int = 10
# 治疗
hp += 1
hp += 1
hp += 1
hp += 1
hp += 1
hp += 1
hp += 1
hp += 1
hp += 1
hp += 1
此时就需要使用循环来优化代码,Python 有两种循环语法,分别由 while
和 for
控制。
while
循环的结构如下:
# 只要 `循环条件` 为 `True`,就循环执行 `循环体`,直到 `循环条件` 变为 `False` 时结束循环,继续执行后面的代码。
while 循环条件:
循环体
graph TD
START([开始]) --> COND{循环条件?} -- 是 --> 循环体 --> COND
COND -- 否 --> END([结束])
例如:
for
循环的结构如下:
# 从 `可迭代对象` 中逐个取出值,赋值给 `循环变量` 并执行 `循环体`,直到 `可迭代对象` 的值被取完时结束循环,继续执行后面的代码。
for 循环变量 in 可迭代对象:
循环体
例如:
这里的 range
是一个内建函数,他会返回一个可迭代对象,依次得到 0 至 n-1,此处为 0 至 9。
由于我们只需要循环 10 次,而不需要迭代的值,因此使用特殊变量 _
来接收。
range
函数十分常用,它由三种用法:
range(stop) # 迭代对象依次得到 0 至 stop,不含 stop 本身,每次递增 1
range(start, stop) # 迭代对象依次得到 start 至 stop,不含 stop 本身,每次递增 1
range(start, stop, step) # 迭代对象依次得到 start 至 stop,不含 stop 本身,每次递增 step
示例:
在循环中有两个十分常用的操作,break
和 continue
。
break
的作用是提前结束整个循环
continue
的作用是结束本轮循环,进入下一轮循环。
例如,我们的生命值上限是 15 点,如果生命值已经达到了上限就不应该继续治疗了。
可以在生命值达到上限时通过 break
结束治疗:
这种方式下,如果在持续时间内玩家会受到伤害,由于治疗技能已经提前结束了,因此无法进行恢复。
另一种方式是在生命值达到上限时通过 continue
跳过本次回复:
这种方式下,如果在持续时间内玩家会受到伤害,治疗技能将在下一次回复时恢复生命值。
Python 可以在循环后接 else
,它的代码块将在循环结束时执行,但通过 break
结束循环时不执行 else
的代码块。
如果循环条件从一开始就是 False
(或者可迭代对象是空的),也会执行 else
的代码块。
while 条件:
循环体代码块
else:
代码块
for 循环变量 in 可迭代对象:
循环体代码块
else:
代码块
请实现判断一个正整数是否是质数,通过 input
获取输入。
特别规定 1 不是质数。
只能被 1 和自己整除的正整数是质数,否则不是。