1.水仙花数
练习1 求1000以内所有的水仙花数
水仙花数 指的是一个n位数(n >= 3),它的每个位数上的数字的n次幂之和等于它本身
13 + 53 + 3**3 = 153
# 先获取1000以内所有的三位数
i = 100
while i < 1000:
#假设 i 的百位数是a ,十位数是 b ,个位数是 c
#求百位数
a = i // 100
# 求十位数
b = i // 10 % 10
# b = (i - a*100) // 10
# 求个位数
c = i % 10
# print(a)
# print(i)
# 判断 i 是否是水仙花数
if a**3 + b**3 + c**3 == i:
print(i)
i += 1
>>>153
370
371
407
2.质数练习1
练习2 获取用户输入的任意数,判断其是否是质数
什么是质数 只能被1和它本身整除的数就是质数 2 3 5 7 11 13 17 19
# 获取用户输入的任意数
num = int(input('输入一个任意大于1的整数:'))
# 定义一个变量
i = 2
flag = True
# 创建一个标记 用来记录num是否是质数 默认是质数
while i < num:
# print(i)
#如果这个条件成立,则证明num一定不是质数
if num % i == 0:
# 一旦进入这个循环,则证明num不是质数
flag = False
# print(num)
i += 1
if flag:
print(num,'是质数')
else:
print(num,'不是质数')
3.循环嵌套
在控制台输入如下图形
# *****
# *****
# *****
# *****
# print('*****')
# print('*****')
# print('*****')
# print('*****')
# print('*****')
>>>
*****
*****
*****
*****
*****
# 控制图形的高度
# i = 0
#
# while i < 5:
#
# print('*****')
# i += 1
>>>
*****
*****
*****
*****
*****
外层循环控制的是高度(列),内层循环控制的是宽度(行)
i = 0
#
# while i < 5:
# print('*',end='')
# print('*',end='')
# print('*',end='')
# print('*',end='')
# print('*',end='')
# print()
# i += 1
>>>*****
*****
*****
*****
*****
----------------------------------------------------------------------------------------------------------------------------
# 外层循环控制的是高度(列),内层循环控制的是宽度(行)
# 外层循环控制图形的高度
i = 0
while i < 5:
# 内层循环控制的是图形的宽度
j = 0
while j < 5:
print('*',end='') # end=' '表示:防止换行
j += 1
print()
i += 1
>>>
*****
*****
*****
*****
*****
>>>过程实现原理如下图所示
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print()
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print()
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print()
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print()
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print()
>>>
*****
*****
*****
*****
*****
练习1:打印出如下图形
*
**
***
****
*****
# * i = 0 j < 1 j < i + 1
# ** i = 1 j < 2 j < i + 1
# *** i = 2 j < 3 j < i + 1
# **** i = 3 j < 4 j < i + 1
# ***** i = 4 j < 5 j < i + 1
i = 0
while i < 5:
j = 0
while j < i + 1:
print('*',end='')
j += 1
print()
i += 1
>>>
*
**
***
****
*****
练习2:打印出如下图形
*****
****
***
**
*
***** i = 0 j < 5 j < 5 - i j < 5 = 5 - i = 5 - 0
**** i = 1 j < 4 j < 5- i j < 4 = 5 - i = 5 - 1
*** i = 2 j < 3 j < 5- i j < 3 = 5 - i = 5 - 2
** i = 3 j < 2 j < 5- i j < 2 = 5 - i = 5 - 3
* i = 4 j < 1 j < 5- i j < 1 = 5 - i = 5 - 4
i = 0
while i < 5:
j = 0
while j < 5 - i:
print('*',end='')
j += 1
print()
i += 1
>>>
*****
****
***
**
*
4. 99乘法表
练习3: 在控制台输出99乘法表
11=1
12=2 22=4
13=3 23=6 33=9
。。。。。。。 9*9=81
方案一:
# 创建一个外层循环来控制高度
i = 0
while i < 9:
i += 1
# 创建一个内层循环来控制宽度
j = 0
while j < i:
j += 1
print(f'{j}*{i}={j*i}',end=' ')
print()
》》》
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
方案二:
i = 0
while i < 9:
i += 1
j = 0
while j < i:
j += 1
print(j,'*',i,'=',i*j,end=' ')
print()
》》》
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
5.continue和break
练习4:猜数字游戏 随机1-10个数字,如果猜对正确,如果没有猜对,错误
给用户9次机会,最终结果要求用户一次都猜不对
1 2 3 4 5 6 7 8 9 10 猜9次,有9次机会
思路:可以先拿到用户猜过的数字,我可以随机拿一个数字,去和用户猜过的数字做比对,如果这个循环的数字没有在用户猜过的数字当中。那么这个数字就是我们需要的答案
# continue break
# continue 可以用来跳过当次循环
i = 0
while i < 6:
i += 1
if i == 2:
continue
print(i)
else:
print('hello')
》》》
1
3
4
5
6
hello
# break 可以立即退出循环语句,包括else语句
i = 0
while i < 6:
i += 1
if i == 2:
break
print(i)
else:
print('hello')
》》》
1
import random
# 定义一个列表 目的:用来存储用户猜过的数字
list = []
i = 0
while i < 9:
number = int(input('请输入任意一个1-10之间的数字:'))
# 把用户猜过的数字追加到列表当中
list.append(number)
print('对不起,你没有猜对')
i += 1
while True:
number_x = random.randint(1,10) # 1 <= X <= 10
if number_x in list:
continue
else:
break
print('正确号码是:',number_x)
》》》
请输入任意一个1-10之间的数字:1
对不起,你没有猜对
请输入任意一个1-10之间的数字:2
对不起,你没有猜对
请输入任意一个1-10之间的数字:3
对不起,你没有猜对
请输入任意一个1-10之间的数字:4
对不起,你没有猜对
请输入任意一个1-10之间的数字:5
对不起,你没有猜对
请输入任意一个1-10之间的数字:6
对不起,你没有猜对
请输入任意一个1-10之间的数字:7
对不起,你没有猜对
请输入任意一个1-10之间的数字:8
对不起,你没有猜对
请输入任意一个1-10之间的数字:10
对不起,你没有猜对
正确号码是: 9
6.质数练习2:
练习5 求100以内所有质数 2和可以被1和它本身整除的数
i = 2
while i <= 100:
flag = True
# 判断 i 是否是质数
# 获取所有可能成为i的因数
j = 2
while j < i:
# 判断 i 是否能被 就整除 ,i不是质数
if i % j == 0:
flag = False
j += 1
if flag:
print(i)
i += 1
》》》
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
7 质数练习2
优化前:
10000个数 8.70秒
100000个数 没结果了···
from time import *
# 获取程序开始的时间 经验 性能
start = time()
i= 2
while i <= 10000:
flag = True
j = 2
while j <= i :
if i % j == 0:
flag = False
# 一旦判断证明i根本不是质数,所以内层循环根本就没必要继续执行
j += 1
if flag:
print(i)
pass
i += 1
# 获取程序结束时间
end = time()
# 计算程序执行的时间
print('程序花费了:',end - start,'秒')
第一次优化:(加个break)
10000个数 1.00秒
100000个数 84.6秒
在这里插入代码片from time import *
# 获取程序开始的时间 经验 性能
start = time()
i= 2
while i <= 10000:
flag = True
j = 2
while j <= i :
if i % j == 0:
flag = False
# 一旦判断证明i根本不是质数,所以内层循环根本就没必要继续执行
break
j += 1
if flag:
print(i)
pass
i += 1
# 获取程序结束时间
end = time()
# 计算程序执行的时间
print('程序花费了:',end - start,'秒')
第二次优化:再加个 ( **0.5 )
10000个数: 0.05秒
100000个数: 1.24秒
from time import *
# 获取程序开始的时间 经验 性能
start = time()
i= 2
while i <= 10000:
flag = True
j = 2
while j <= i ** 0.5 :
if i % j == 0:
flag = False
# 一旦判断证明i根本不是质数,所以内层循环根本就没必要继续执行
break
j += 1
if flag:
print(i)
pass
i += 1
# 获取程序结束时间
end = time()
# 计算程序执行的时间
print('程序花费了:',end - start,'秒')