一、range
- range为数列
- start 起点 默认值是0 包含
- stop 终点 必填项 不包含
- step 步长 默认值是1
datas = range(10)
print(datas) # range(0, 10)
# range变为list类型,即可打印
print(list(datas))# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 倒着数
datas = range(16, 8, -1)
print(list(datas))
# 定义其他步长
datas = range(3, 9, 2)
print(list(datas))
二、for循环
1、运用规则
- 循环结构:重复,多次执行
- 可遍历数组、字符串、range
- for 后是变量名 in 后是范围
# in成员运算符
print(5 in range(10),list(range(10)))
# 结果:True [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for i in range(10): # 将range中的内容这个赋予变量i
pass
print("循环执行range遍", i)
# 到i不包含在range里面时退出
for c in "ABCDEFG": # char指的是字符
print(c)
# 结果:字符串逐个输出
for e in ["第一个", bool, False, None, 100, "3", "a", "class"]: #列表
print(e)
# 结果:第一个、<class 'bool'>、False、None、100、3、a、class
for a in range(3, 67, 15):
print(a)
# 结果: 3、18、33、48、63
num1 = [1, 5, 8, 14]
for num in num1:
print(num)
# 结果:1、5、8、14
2、实战
(1)计算1+2+3+4+...+100
# 计算1+2+3+4+...+100
# sum是函数,为求和计算print(sum(range(1, 101)))
# 变量名尽量避开sum
total = 0
for i in range(101):
total += i
print(total)
(2)计算【500,1000】之间3的倍数的平均数
#计算【500,1000】之间3的倍数的平均数
total = 0 # 总数
j = 0 # 个数(count)
for i in range(500, 1001):
if i % 3 == 0:
j += 1
total += i
print(total / j)
(3)计算从500开始前10个5的倍数的平均数
# 计算从500开始前10个5的倍数的平均数
# 方法1
# total = 0
# for i in range(500, 500+5*10, 5):
# total += i
# print(total / 10)
# 方法2
start = 500
total = 0
ifor i in range(10):
total += start
start += 5
print(total / 10)
# 方法3
total = 0
count = 0
for i in range(500, 600, 1):
if i % 5 == 0:
total += i
count += 1
elif count == 10:
break
print(total / 10)
三、break与continue
1、使用规则
- break 可以终止循环,循环退出
- continue可以结束当前这一轮,进入下一轮循环
2、实战
(1)计算从500开始前10个13的倍数的平均数
total = 0
count = 0
for i in range(500, 1000):
if i % 13 == 0:
count += 1
total += i
if count == 10:
break
print(total / count)
四、循环嵌套
1、规则:
外层循环变化一次内层循环变化一轮
2、实战
⑴、打印9*9乘法表
# 打印9*9乘法表
for i in range(1, 10): # 控制外层循环
for j in range(1, i+1): # 控制内层循环,从1乘到i
print(f"{j}*{i}={j * i}", end="\t") # "\t"表示制表符,使每行对齐
print() # print()输出空行,每次内层循环结束后空行
# # 即i控制列数,j控制行数
⑵、输入一个数,求出它的阶乘
num = int(input("请输入一个数:"))
total = 1
for i in range(1, num+1):
total *= i
print(f"{num}的阶乘是{total}")
# 请输入一个数:5
# 5的阶乘是120
进阶:请输入一个数求出它的阶乘和
num = int(input("请输入一个数:"))
total = 0
for i in range(1, num + 1):
count = 1
for j in range(1, i+1):
count *= j
total += count
print(total)
# 请输入一个数:5
# 153
⑶、9行9列的图形,控制各种显示各种位置三角形
①9 * 9 的正方形
# 9 * 9 的正方形
for i in range(9):
for j in range(9):
print(" * ", end="") # end负责取消空行(默认为end="\n"),即每次输出完j不换行,即控制行数
print() # print负者每行输出完之后换行,即i控制行数
# 结果
# * * * * * * * * *
# * * * * * * * * *
# * * * * * * * * *
# * * * * * * * * *
# * * * * * * * * *
# * * * * * * * * *
# * * * * * * * * *
# * * * * * * * * *
# * * * * * * * * *
②上三角线
# 上三角线
for i in range(9):
for j in range(9):
if i == j:
print(" * ", end="")
else:
print(" ", end="")
print()
# 结果
# *
# *
# *
# *
# *
# *
# *
# *
# *
③下三角形线
# 下三角线
for i in range(9):
for j in range(9):
if i + j == 8:
print(" * ", end="")
else:
print(" ", end="")
print()
# 结果
# *
# *
# *
# *
# *
# *
# *
# *
# *
④右上三角形
# 右上三角
for i in range(9):
for j in range(9):
if i <= j:
print(" * ", end="")
else:
print(" ", end="")
print()
# 结果
# * * * * * * * * *
# * * * * * * * *
# * * * * * * *
# * * * * * *
# * * * * *
# * * * *
# * * *
# * *
# *
⑤左下三角形
# 左下三角形
for i in range(9):
for j in range(9):
if i >= j:
print(" * ", end="")
else:
print(" ", end="")
print()
# 结果
# *
# * *
# * * *
# * * * *
# * * * * *
# * * * * * *
# * * * * * * *
# * * * * * * * *
# * * * * * * * * *
⑥右下三角形
# # 右下三角形
for i in range(9):
for j in range(9):
if i + j >= 8:
print(" * ", end="")
else:
print(" ", end="")
print()
# 结果
# *
# * *
# * * *
# * * * *
# * * * * *
# * * * * * *
# * * * * * * *
# * * * * * * * *
# * * * * * * * * *
⑦左上三角形
# # 左上三角形
for i in range(9):
for j in range(9):
if i + j <= 8:
print(" * ", end="")
else:
print(" ", end="")
print()
# 结果
# * * * * * * * * *
# * * * * * * * *
# * * * * * * *
# * * * * * *
# * * * * *
# * * * *
# * * *
# * *
# *
⑧沙漏形状
# 时间沙漏
for i in range(9):
for j in range(9):
if i <= j and i + j <=8 or i >= j and i + j >=8:
print(" * ", end="")
else:
print(" ", end="")
print()
# 结果
# * * * * * * * * *
# * * * * * * *
# * * * * *
# * * *
# *
# * * *
# * * * * *
# * * * * * * *
# * * * * * * * * *
⑷、输入3打印
*
***
*****
# 方法一
num = int(input("请输入一个数字:"))
for i in range(1, num):
for j in range(1, 2*i):
print("*", end="")
print()
# 方法二
num = int(input("请输入一个数字:"))
for i in range(1, num+1):
print("*"*(2*i-1)) # 一个字符串乘以多少,相当于字符串重复几遍
print()
⑸、输入一个数,倒着输出*
*****
***
*
num = int(input("请输入一个数字:"))
for i in range(num, 0, -1):
for j in range(1, 2*i):
print("*", end="")
print()
⑹、已知两个三位数abc和cba之和为1333(即abc+cba=1333)求 a、b、c。
for i in range(100,1000):
a1 = i // 100
a2 = i // 10 % 10
a3 = i % 10
for j in range(100, 1000):
b1 = j // 100
b2 = j // 10 % 10
b3 = j % 10
if a1 == b3 and a2 == b2 and a3 == b1 and i + j == 1333:
print(f"a={a1},b={a2},c={a3}")
# 结果
# a=4,b=1,c=9
# a=5,b=1,c=8
# a=6,b=1,c=7
# a=7,b=1,c=6
# a=8,b=1,c=5
# a=9,b=1,c=4
⑺、编程求出满足以下条件的三位数:它除以11所得的商等于它各位数字之和。
for i in range(100, 1000):
num = i / 11
first = i // 100
second = i // 10 % 10
third = i % 10
if num == first + second + third:
print(i)
# 结果:198
⑻、求1000以内最大的5个能同时被3和6整除的数。
count = 0
for i in range(1000, 0, -1):
if i % 3 == 0 and i % 6 == 0:
count += 1
print(i)
if count == 5:
break
# 结果
# 996
# 990
# 984
# 978
# 972
⑼、输入一个数字,如果这个数字是质数则打印该数字,否则则打印该数字最大的因数。
num = int(input("请输入一个数字:"))
# 默认值是质数
flag = True
for i in range(num-1, 1, -1): # 除的数应该排除本身和1
if num % i == 0:
flag = False
print(f"{num}的最大公因子为{i}")
break
if flag:
print(f"{num}是质数")
⑽、求1000以内所有质数的平均数。
count = 0
total = 0
for i in range(2, 1001):
flag = True
for j in range(2, i):
if i % j == 0:
flag = False
break
if flag:
total += i
count += 1
print(total / count)
# 结果
# 453.13690476190476
⑾、找到1000以内10个最大的质数。
count = 0
for i in range(1000, 1, -1):
flag = True # 注意每个数都要重新判断是否是质数
for j in range(2, i): # 一千个数有一千个Flag,即每个数都使用自己的flag
if i % j == 0:
flag = False
break
if flag:
print(i)
count += 1
if count > 9:
break
# 结果
# 997
# 991
# 983
# 977
# 971
# 967
# 953
# 947
# 941
# 937
五、while循环
1、while循环的规则
- 核心开门关门概念, 默认条件True才能进入代码块。
- 随着程序的运行,改变条件,将条件设置为False。
- 条件为False, 跳出循环。
2、实例
⑴、每次输入一个整数,求输了几次,前面所有整数的和大于100了。
# 方法一
count = 0
value = 0
while True:
count += 1
value += value1
value1 = float(input("请输入一个数:"))
if value >= 100:
print(f"需要{count}次")
break
# 方法二
count = 0
value = 0
while value <= 100:
num = float(input("请输入一个数:"))
count += 1
value += num
print(count)
⑵、随机生成一个5-10之间的整数,请问随机多少次,数字的累加和可以大于100。
count = 0
value = 0
while value <= 100:
num = random.randint(5, 10)
print(num)
count += 1
value += num
print(f"共需要{count}次")
⑶、使用while循环9*9乘法表。
i = 1
while i <= 9:
j = 1
while j <= i:
print(f"{j}*{i}={j*i}", end="\t")
j += 1
i += 1
print()
⑷、漏斗
# 漏斗
i = 0
while i < 9:
j = 0
while j < 9:
if i >= j and i + j >= 8 or i <= j and i + j <= 8:
print(" * ", end=" ")
else:
print(" ", end=" ")
j += 1
print()
i += 1
⑸、用while判断一个数是否是质数。
m = int(input("请输入一个数"))
flag = True
n = 2
while n < m:
if m % n == 0:
flag = False
print(f"{m}不为质数")
break
n += 1
if flag:
print(f"{m}为质数")
六、while循环嵌套
1、实例
⑴、1000以内最大的10个质数 使用while。
count = 0
i = 1000
while i <= 1000: # 或者 i>1
j = 2
while j in range(2, i): # 或者 while j < i:
if i % j == 0:
break
j += 1
else:
count += 1
print(i)
if count == 10:
break
i -= 1
# 结果
# 997
# 991
# 983
# 977
# 971
# 967
# 953
# 947
# 941
# 937
⑵、用while判断1000以内质数的个数 。
i = 2
count = 0
while i <= 1000:
flag = True
n = 2
while n < i:
if i % n == 0:
flag = False
break
n += 1
if flag:
count += 1
print(f"{i}为质数")
i += 1
print(f"1000以内的质数个数为{count}个")
七、for与while都可以使用else
1、for与while使用else的规则
- for中执行break,不会执行else
- for 中有continue,还执行else
- 即for中执行完才会执行else
2、实例
⑴、输入一个数判断其是否为质数。
# 方法一
value = int(input("请输入一个数:"))
flag = True
i = 2
while i < value:
i += 1
if value % i == 0:
flag = False
print(f"{value}不是质数")
break
if flag:
print(f"{value}是质数")
# 方法二
value = int(input("请输入一个数:"))
i = 2
while i < value:
if value % i == 0:
print(f"{value}不是质数")
break
i += 1
else:
print(f"{value}是质数")
# 方法三
value = int(input("请输入一个数:"))
for i in range(2, value):
if value % i == 0:
print(f"{value}不是质数")
break
else:
print(f"{value}是质数")
⑵、1000以内最大的10个质数 使用while 。
count = 0
i = 1000
while i <= 1000: # 或者 i>1
j = 2
while j in range(2, i): # 或者 while j < i:
if i % j == 0:
break
j += 1
else:
count += 1
print(i)
if count == 10:
break
i -= 1
# 结果
# 997
# 991
# 983
# 977
# 971
# 967
# 953
# 947
# 941
# 937
⑶、1000以内从小到大的是个质数。
count = 0
for i in range(2, 1001):
for j in range(2, i):
if i % j == 0:
break
else:
print(i)
count += 1
if count == 10:
break