循环结构 — 可以让代码重复执行(代码写一遍,执行多次)
for 循环
语法:
for 变量 in 序列:
循环体
说明:
for、in - 关键字;固定写法
变量 - 变量名(可以是已经定义过的变量的变量名,也可以是没有定义)
序列 - 序列就是Python中容器型数据类型对应的数据;例如:字符串、列表、字典、元组、集合、迭代器、生成器、range等
: - 固定写法
循环体 - 和for保持一个缩进的一条或者多条语句(至少1条件); 循环体就是会被重复执行的代码
执行过程:
让变量去序列中取值,一个一个的取,取完为止,每取一个值就执行一次循环体。
for循环循环次数和序列中元素的个数有关
for x in 'abc':
print(x, '====')
print('++++')
'''
a ====
b ====
c ====
++++
'''
1.range 函数 — 产生一个等差数列
#1 2 3 4 5 6
#1 3 5 7 9
-
range(N) — 产生[0, N), 差是1的等差数列(N必须是正整数)。range(3) — 0, 1, 2;range(11) —0, 1, 2, 3, 4, 5, 6, 7, 8, 9
-
range(M, N) — 产生[M, N), 差是1的等差数列(M < N)。range(2, 6) — 2, 3, 4, 5;range(-2, 1) — -2, -1, 0
-
range(M, N, step) — 产生[M, N), 差是step的等差数列。range(10, 4, -2) — 10, 8, 6
2.求和套路
练习:求1+2+3+…+100的和
# 1)定义一个变量保存最后的和,变量默认值是0
sum1 = 0
# 2)通过循环获取到要求和的数据
for x in range(1, 101):
# 3) 取到一个数据就往保存和的变量中加一个数据
sum1 += x # sum1 = sum1 + x
print('和:', sum1)
练习: [45, 78, 90, 45, 67, 100, 90, 98, 76]
scores = [45, 78, 90, 45, 67, 100, 90, 98, 76]
total = 0
for x in scores:
total += x
print('总分:', total)
3.统计个数的套路
练习:统计scores中不及格学生的个数
scores = [45, 78, 90, 45, 67, 100, 90, 98, 76]
# 1) 定义一个变量保存最后的个数,默认值是0
count = 0
# 2) 通过循环获取统计对象
for x in scores:
# 3) 判断获取到的对象是否符合个数加1的条件
if x < 60:
count += 1
print('不及格人数:', count)
练习:统计100以内(1~99)能被3整除的数的个数
# 方法一:
count = 0
for x in range(1, 100):
if x % 3 == 0:
count += 1
print('被3整除的数的个数:', count)
# 方法二:
count = 0
for x in range(3, 100, 3):
count += 1
print('被3整除的数的个数:', count)
练习:计算2468…*20的结果
total = 1
for x in range(2, 21, 2):
total *= x
print(total) # 3715891200
练习:计算100以内所有能被3整除但是不能被5整除的数的和
# 方法一:
total = 0
for x in range(1, 100):
if x % 3 == 0 and x % 5 != 0:
total += x
print(total)
# 方法二:
total = 0
for x in range(3, 100, 3):
if x % 5 != 0:
total += x
print(total)
while循环
while 条件语句:
循环体
其他代码
说明:
while - 关键字;固定写法
条件语句 - 任何有结果的表达式,比如:具体的数据、已经赋值过的变量、运算表达式(赋值运算除外)
: - 固定写法
循环体 - 和while保持一个缩进的一条或者多条语句(至少一条); 循环体就是需要重复执行的代码
执行过程:
先判断条件语句是否为True,如果为True就执行循环体,执行完再判断条件语句是否为True,为True又执行循环体...
以此类推,如果判断条件语句的结果是False循环就结束。
练习:打印1,2,3,4,5
# for loop
for x in range(1, 6):
print(x)
# while loop
num = 1
while num < 6:
print(num)
num += 1
for和while的选择
如果循环次数确定就使用for循环;循环次数不确定就使用while循环。
练习:提示用户输入数据,直到输入的值是0为止。
"""
请输入一个数: 19
请输入一个数: 20
请输入一个数: 8
...
请输入一个数:0
结束!
"""
# value = '10990' # value的初始值只要不是'0'都可以
# while value != '0':
# value = input('请输入一个数:')
num = input(请输入一个数:')
while num != 0:
print('请输入一个数:')
练习:完成猜数字游戏
"""
游戏开始产生一个0~100的随机数,让用户不断输入数字,直到输入的数字和产生的随机相等为止。如果猜错了给出大了或者小了的提示。
45
请输入数字(0~100):50
大了!
请输入数字(0~100):25
小了
请输入数字(0~100):30
小了
请输入数字(0~100):45
恭喜你,猜对了!
"""
import random
# random.randint(a, b) - 产生a到b的随机数
value = random.randint(0, 100) # value的值就是0~100的随机数
input_num = int(input('请输入数字(0~100):'))
while input_num != value:
if input_num > value:
print('大了!')
else:
print('小了!')
input_num = int(input('请输入数字(0~100):'))
print('恭喜你,猜对了!')
1. 基础题
-
输入年份,如果输入的年是闰年打印
'闰年'
否则打印'平年'
year = int(input('请输入年份:')) if (year % 400 == 0) or (year % 4 == 0 and year % 100 != 0): print('闰年') else: print('平年')
-
使用for和while循环输出 0~100内所有3的倍数。
num = 0 for num in range(0, 101, 3): print(num)
num = 0 while num <= 100: if num % 3 == 0: print(num) num += 1
-
使用for和while循环输出100~200内个位数或者十位数能被3整除的数。
for i in range(100, 201): if (i % 100 // 10) % 3 == 0 or (i % 10 % 3 == 0): print(i)
num = 100 while num <= 200: if (num % 100 // 10 % 3 == 0) or (num % 10 % 3 == 0): print(num) num += 1
-
使用for和while循环统计100~200中十位数是5的数的个数
count = 0 for i in range(100, 201): if i % 100 // 10 == 5: count += 1 print(count)
count = 0 num = 100 while num <= 200: if num % 100 // 10 == 5: count += 1 num += 1 print(count)
-
使用for和while循环打印50~150中所有能被3整除但是不能被5整除的数
for i in range(50, 151): if i % 3 == 0 and i % 5 != 0: print(i)
num = 50 while num <= 150: if num % 3 == 0 and num % 5 != 0: print(num) num += 1
-
使用for和while循环计算50~150中所有能被3整除但是不能被5整除的数的和
sum = 0 for i in range(50, 151): if i % 3 == 0 and i % 5 != 0: sum += i print(sum)
while num <= 150: if num % 3 == 0 and num % 5 != 0: sum += num num += 1 print(sum)
2. 进阶题
-
使用循环计算
1*2*3*4*...*10
的结果。result = 1 for i in range(1, 11): result *= i print(result)
-
统计100以内个位数是2并且能够被3整除的数的个数。
count = 0 for i in range(0, 100, 3): if i % 10 == 2: count += 1 print(count)
-
输入任意一个正整数,求他是几位数?
注意: 这儿不能使用字符串,只能用循环
-
打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是
⼀个⽔仙花数,因为
1³ + 5³ + 3³
等于 153。for i in range(100, 1000): if (i // 100) ** 3 + (i // 10 % 10) ** 3 + (i % 100 % 10) ** 3 == i: print(i)
3. 挑战题
-
判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
num = 28 for i in range(2, num): if num % i == 0: print('is not prime') break else: print('is prime')
-
求斐波那契数列列中第n个数的值:1,1,2,3,5,8,13,21,34… (这儿的n可以是任意正整数,可以通过输入来确定)
-
输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
for i in range(1, 10): for j in range(1, i + 1): print(j, '*', i, '=', i * j, end = ' ') print()
-
这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)