我们要实现一个每隔1秒中在屏幕上打印一次“hello, world”;并持续打印一个小时的程序,我们肯定不能够直接把`print(‘hello, world’)`这句代码写3600遍,如果真的要这样做,那么编程的工作就太无聊乏味了。因此,我们还需要了解一下循环结构,有了循环结构我们就可以轻松的控制某件事或者某些事重复、重复、再重复的去执行。
Python 中的循环语句有 2 种,上一课我们已经对 while 做了详细的讲解,本节给大家介绍 for 循环,它常用于遍历字符串、列表、元组、字典、集合等序列类型,逐个获取序列中的各个元素。
for 循环的语法格式如下:
for 迭代变量 in 字符串|列表|元组|字典|集合:
代码块
格式中,迭代变量用于存放从序列类型变量中读取出来的元素,所以一般不会在循环中对迭代变量手动赋值;代码块指的是具有相同缩进格式的多行代码(和 while 一样),由于和循环结构联用,因此代码块又称为循环体。
for 循环语句的执行流程如图 1 所示。
for循环的语法格式很容易理解,主要有三种类型,分为数值循环、遍历列表和元组、遍历字典。我们通过几个实例来熟悉它的用法。
实例1:计算1~100求和的结果
如果明确的知道循环执行的次数或者要对一个容器进行迭代(后面会讲到),那么我们推荐使用`for-in`循环,例如下面代码中计算1~100求和的结果。
用for循环实现1~100求和
sum = 0
for x in range(101):
sum += x
print(sum)
需要说明的是上面代码中的`range(101)`可以用来构造一个从0到100的取值范围,这样就可以构造出一个整数的序列并用于循环中,例如:
– `range(101)`可以产生一个0到100的整数序列。
– `range(1, 100)`可以产生一个1到99的整数序列。
– `range(1, 100, 2)`可以产生一个1到99的奇数序列,其中2是步长,即数值序列的增量。
知道了这一点,我们举一反三,来实现1~100之间的偶数求和。
ps:在 Python 2.x 中,除提供 range() 函数外,还提供了一个 xrange() 函数,它可以解决 range() 函数不经意间耗掉所有可用内存的问题。但在 Python 3.x 中,已经将 xrange() 更名为 range() 函数,并删除了老的 xrange() 函数。
本课程用的都是Python 3.x 。
实例2:实现1~100之间的偶数求和
sum = 0
for x in range(2, 101, 2):
sum += x
print(sum)
循环结构是可以嵌套的,也就是说在循环中还可以构造循环结构。下面的例子演示了如何通过嵌套的循环来输出一个九九乘法表。
实例3:九九乘法表
for i in range(1, 10):
for j in range(1, i + 1):
print(‘%d*%d=%d’ % (i, j, i * j), end=’\t’)
print()
使用 for 循环遍历字典其实也是通过遍历普通列表来实现的。字典包含了如下三个方法:
items():返回字典中所有 key-value 对的列表。
keys():返回字典中所有 key 的列表。
values():返回字典中所有 value 的列表。
因此,如果要遍历字典,完全可以先调用字典的上面三个方法之一来获取字典的所有 key-value 对、所有 key、所有 value,再进行遍历。如下程序示范了使用 for 循环来遍历字典:
实例4:输出小明的考试成绩:my_dict ={‘语文’:89,’数学’:92,’英语’:80}
my_dict ={‘语文’:89,’数学’:92,’英语’:80}
# 通过items()方法遍历所有key-value对
# 由于items方法返回的列表元素是key-value对,因此要声明两个变量
for key, value in my_dict.items():
print(‘key:’, key)
print(‘value:’, value)
print(‘————-‘)
# 通过keys()方法遍历所有key
for key in my_dict.keys():
print(‘key:’, key)
# 在通过key获取value
print(‘value:’, my_dict[key])
print(‘————-‘)
# 通过values()方法遍历所有value
for value in my_dict.values():
print(‘value:’, value)
数学界,质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。
质数在实际生活中的应用很广泛:
质数被利用在密码学上,所谓的公钥就是将想要传递的信息在编码时加入质数,编码之后传送给收信人,任何人收到此信息后,若没有此收信人所拥有的密钥,则解密的过程中(实为寻找素数的过程),将会因为找质数的过程(分解质因数)过久,使即使取得信息也会无意义。
在汽车变速箱齿轮的设计上,相邻的两个大小齿轮齿数设计成质数,以增加两齿轮内两个相同的齿相遇啮合次数的最小公倍数,可增强耐用度减少故障。
在害虫的生物生长周期与杀虫剂使用之间的关系上,杀虫剂的质数次数的使用也得到了证明。实验表明,质数次数地使用杀虫剂是最合理的:都是使用在害虫繁殖的高潮期,而且害虫很难产生抗药性。
以质数形式无规律变化的导弹和鱼雷可以使敌人不易拦截。
多数生物的生命周期也是质数(单位为年),这样可以最大程度地减少碰见天敌的机会。
那如何利用for循环判断一个数字是不是质数呢?
实例5:随机输入一个正整数判断是不是质数。
from math import sqrt
num = int(input(‘请输入一个正整数: ‘))
end = int(sqrt(num))
is_prime = True
for x in range(2, end + 1):
if num % x == 0:
is_prime = False
break
if is_prime and num != 1:
print(‘%d是质数’ % num)
else:
print(‘%d不是质数’ % num)
关注小程序“空手之道”(搜索:4buy)
关注公众号“K12少儿编程”