循环结构
for循环
- 如果明确知道循环执行的次数,或者是要多一个容器进行迭代
- 推荐使用
for...in..
循环 - 循环结构也可以进行嵌套,即循环结构中还可以构造循环结构
-
range
函数的使用range
可以用来产生一个不变的数值序列,这个数列通常都是用在循环中range(101)
: 产生一个0-100
的整数序列range(1, 100)
:产生一个1-99
的整数序列
range(1, 100, 2): 产生一个1-99的奇数序列,其中2是步长,即数值序列的增量。 - 练习1 用for循环实现1-100求和.
"""
先定义一个变量sum,初始值为0,然后做一个for循环,num为下标(索引)
然后做一个循环递增运算 sum = sum + num,sum等于自己本身加上第一个索引值,
依次递加,直至最后一个,最后打印出来,如果在for循环里面,
则把每次的递加都打印出来,放外面,就直接打印求和结果。
"""
sum = 0
for num in range(1, 101):
sum += num
# sum = sum + num
print(sum)
print(sum)
- 练习2 用for循环实现1-100之间的奇数求和.
fum = 0
for num in range(1, 100, 2):
fum = fum + num
print(fum)
print(fum)
- 练习3 用for循环实现1-100之间的偶数求和.
cum = 0
for num in range(2, 100, 2):
cum += num
print(cum)
print(cum)
# 也可以在循环中使用分支结构的方式来实现同样的功能.
sum = 0
for num in range(1, 101):
if num % 2 == 0:
sum += num
print(sum)
- 练习4 用for循环实现九九乘法表.
for i in range(1, 10): # i表示行
for j in range(1, i + 1): # j表示列
print('%s*%s=%s' % (j, i, i * j), end='\t')
# end='\t'表示不换行
print()
- 练习5 输入一个正整数,判断是不是素数.
# 素数:又称质数。一个大于1的自然数,除了1和它自身外,
# 不能被其他自然数整除的数叫做质数;否则称为合数。
import math
num = int(input('请输入一个数:'))
is_prime = True
# 这里设置一个bool运算,一般bool运算开始都设置为真,当该假设成立时,
即开始循环搜索素数
for x in range(2, int(math.sqrt(num) + 1)):
# 这里用math.sqrt是表示对最大值开根号运算,
# 可以缩小取值范围,可以得到和原始值的范围其实一样的结果
if num % x == 0:
# x在这里本身就是正整数,作为索引(下标)时,是在列表、元组中
is_prime = False # bool值为假时,循环结束
break # 跳出循环
if is_prime and num != 1:
print('%d是素数。' % num)
else:
print('%d不是素数。' % num)
- 练习6 输入两个正整数,计算最大公约数和最小公倍数.
"""
短除法:就是短除符号倒过来,在除法中写除数的地方写2个数公有的质因数,
然后写下2个数被公有质因数整除的商,之后再除,以此类推,直到结果互质为止。
互质:如果2个数最大公约数为1,则称这2个数互质。比如(2,3)(4,5)(5,6)(6,7)
最大公约数为左侧各位数字之积。
最小公倍数为左侧各位数字与下边各位数字之积。
文中的算法是,2个数的乘积除以最大公约数,也就是最小公倍数
"""
x = int(input('请输入第一个正整数:'))
y = int(input('请输入第二个正整数:'))
if x > y:
(x, y) = (y, x) # 如果x大于y,则交换x,y的位置,元组运算
for factor in range(x, 0, -1):
# factor为最大公约数,x为最大的整数,为最小,-1为步长(按照-1依次递减)
if x % factor == 0 and y % factor == 0:
print('%d和%d的最大公约数为%d' % (x, y, factor))
print('%d和%d的最小公倍数为%d' % (x, y, x * y // factor))
break
# 用定义函数来实现最大公约数和最小公倍数
def gcd(x, y):
(x, y) = (y, x) if x > y else (x, y) # 三元运算
for factor in range(x, 0, -1): # 这里factor是最大公约数,而不是元素的下标运算
if x % factor == 0 and y % factor == 0:
return factor
def lcm(x, y):
return x * y // gcd(x, y)
if __name__ == '__main__':
print(gcd(15, 25))
print(lcm(58, 3))
- 练习6 打印各种类型的图案.
"""
❤
❤❤
❤❤❤
❤❤❤❤
❤❤❤❤❤
❤❤❤❤❤❤
"""
row = int(input('请输入行数:'))
for i in range(1, row + 1):
print('❤' * i)
"""
❤
❤❤
❤❤❤
❤❤❤❤
❤❤❤❤❤
❤❤❤❤❤❤
"""
row = int(input('请输入行数:'))
for i in range(1, row + 1):
print(' ' * (row - i), end='')
print('❤' * i)
while循环
- 如果要构造出不知道具体循环次数的循环结构,即推荐使用while循环,
while循环通过一个能够产生或转换出bool值的表达式,来控制循环,
表达式的值为True,循环继续;表达式的值为False,循环结束。 - 练习—猜数字游戏
"""
计算机随机出一个1-100之间的随机数,人输入自己猜的数字,计算机给出对应的
提示信息,直到人猜出计算机出的数字。计算机根据人猜的数字分别给出提示大一点、
小一点及猜对了。
"""
import random
answer = random.randint(1, 100)
counter = 0 # 这里表示计数器
while True:
counter += 1 # 一直循环7次
number = int(input('请输入一个数字:'))
if number < answer:
print('你猜小了!')
elif number > answer:
print('你猜大了!')
else:
print('你猜对了!')
break
print('你一共猜了%s次。' % counter)
if counter > 7:
print('你的智商有问题')
"""
用break关键字来提前终止循环,注意:break只能终止它所在的那个循环,这一点
在使用嵌套的循环结构时,需引起注意,continue可以用来放弃本次循环,让后续
的代码直接进入下一轮循环。
"""