# 循环结构
循环结构就是在程序中控制某条或某些指令重复执行的结构,在 python 中构造循环结构有两种做法,一种是
for-in
循环,一种是while
循环。
# for-in 循环
如果明确知道循环执行的次数,推荐使用 for-in 循环
看下面这个列子:计算 1~100 的和
sum = 0
for x in range(1,101):
sum += x
print(sum)
注意:range
函数左闭右开
计算 1~100 之间偶数的和:
sum = 0
for x in range(1,101):
if x % 2 == 0:
sum += x
print(sum)
当然还有更方便的方式:
sum = 0
for x in range(0,101,2):
sum += x
print(sum)
那么计算 1~100 之间奇数之和呢?
sum = 0
for x in range(1,101,2):
sum += x
print(sum)
# while 循环
如果不知道循环执行的次数,推荐使用 while 循环
猜数字游戏:计算机出一个1到100的随机数,玩家输入自己猜的数字,计算机给出对应的提示信息(大一点,小一点,猜对了),如果玩家猜中了数字,计算机提示用户一共猜了多少次,游戏结束,否则游戏继续。
import random
# 随机数
random_num = random.randint(1,100)
# 计数器
counter = 0
# 执行循环
while True:
my_num = int(input('请输入你的号码:'))
counter += 1
if my_num > random_num:
print('小一点')
elif my_num < random_num:
print('大一点')
else:
print('恭喜你猜对了')
break
print('你一共猜了 %d 次' % counter)
if counter > 7:
print('你的智商余额明显不足')
注意:和分支结构一样,循环结构也是可以嵌套的
例如输出九九乘法表
for x in range(1,10):
for j in range(1,x+1):
print('%d * %d = %d' % (x,j,x*j),end='\t')
print()
# 练习
练习1:输入一个正整数判断是不是素数
素数指的是只能被1和自身整除的大于1的整数
'''
普通的解决方案
'''
num = int(input('请输入您的数字:'))
is_su = True
for x in range(1,num + 1):
if x == 1 or x == num:
continue
if num % x == 0 :
is_su = False
break
if is_su and num != 1:
print('%d 是素数' % num)
else:
print('%d 不是素数' % num)
'''
更简单的处理方案
'''
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(f'{num} 是素数')
else:
print(f'{num} 不是素数')
练习2:输入两个正整数,计算它们的最大公约数和最小公倍数
两个数的最大公约数是两个数的公共因子中最大的那个数。两个数的最小公倍数是能够同时被两个数整除的最小的那个数。
x = int(input('x = '))
y = int(input('y = '))
# 最大公约数
if x > y:
x,y = y,x
for factor in range(x,0,-1):
if x % factor == 0 and y % factor == 0:
print(f'{x}和{y}的最大公约数是{factor}')
print(f'{x}和{y}的最小公倍数是{ x * y // factor}')
break
练习3:打印三角形图案
'''
*
**
***
****
*****
'''
row = int(input('请输入行数:'))
for x in range(row):
for j in range(x+1):
print('*',end='')
print()
'''
*****
****
***
**
*
'''
row = int(input('请输入行数:'))
for j in range(row,0,-1):
for x in range(row):
if j < row - x:
print(' ',end='')
else:
print('*',end='')
print()
'''
*****
****
***
**
*
'''
row = int(input('请输入行数:'))
for x in range(row,0,-1):
for j in range(x):
print('*',end='')
print()
'''
*
**
***
****
*****
'''
row = int(input('请输入行数:'))
for x in range(row):
for j in range(row,0,-1):
if j > x + 1:
print(' ',end='')
else:
print('*',end='')
print()
'''
*
***
*****
*******
*********
'''
row = int(input('输入行数为:'))
for x in range(row):
for j in range(row - x - 1):
print(' ',end='')
for j in range(2*x + 1):
print('*',end='')
print()