练习1.求1000以内所有的水仙花数
需求:求1000以内的所有的水仙花数
分析:它的每个位数上的数字的3次幂之和等于它本身
代码1:用if 单次判断
num = int(input("请输入一个1000以内的三位数,最小为100:"))
if 100< num <1000:
#求出对应的百位,十位,个位数字
#假设 x是百位数,y是十位数,z是个位数
x= num //100
y= (num-x*100) // 10
z= num % 10
if x**3+y**3+z**3 == num:
print(num,'是水仙花数')
else:
print(num,'不是水仙花数')
else:
print('输入的数字有误,请重新输入!')
代码2:用 while循环实现
num=100
while num<1000:
#求出对应的百位,十位,个位数字
#假设 x是百位数,y是十位数,z是个位数
x = num // 100
y= (num-x*100) // 10
z= num % 10
if x**3+y**3+z**3 == num:
print(num,'是水仙花数')
num +=1
练习2.求质数
需求:获取用户输入的任意数,判断是否是质数
分析:质数就是只能被1和它本身整除
代码:
# 让用户输入一个任意数字
num = int(input("请输入一个数字:"))
# 定义一个变量用来作余数的判断
i=2
# 定义一个标签用来标记是否是质数
flag=True
while i<num:
if num % i == 0:
flag=False
i+=1
if flag:
print('是质数')
else:
print('不是质数')
练习3.循环嵌套
需求:
循环嵌套---------------------------------------
在控制台输出图形,第一行输出一个,第二行输出二个,第n行输出n个
分析:通过2个循环嵌套打印输出
代码1:正序输出:
# 让用户输入一个数字,用来控制显示的行数
num=int(input('请输入一个数字,用来控制您要显示的行数:'))
# 定义一个变量,用来控制输出星星的个数
i=0
# 控制行数
while i<num:
j=0
# 控制每行输出的个数
while j<i+1:
print('*',end='')
j+=1
print()
i += 1
代码2:反序输出:
# 让用户输入一个数字,用来控制显示的行数
num=int(input('请输入一个数字,用来控制您要显示的行数:'))
# 定义一个变量,用来控制输出星星的个数
i=0
# 控制行数
while i<num:
j=0
# 控制每行输出的个数
while j<num-i:
print('*',end='')
j+=1
print()
i += 1
练习3.99乘法表
代码1:while循环
i=0
while i< 9:
i += 1
j=0
while j < i:
j+=1
print('{}*{}={} '.format(j,i,i*j),end='')
print()
代码2:for循环
for i in range(0,10):
i+=1
for j in range(0,i):
j+=1
print('{}*{}={} '.format(j,i,i*j),end='')
print()
练习4. while break continue
需求:猜数字,猜对了结束,猜不对继续
代码1:
# 定义一个要猜的数字:
i=7
# 定义一个变量接收用户输入的数字
while True:
num = int(input("请输入一个10之内的数字:"))
if num > 10 or num < 1:
print('输入有误!')
continue
elif num>i:
print('猜大了!')
continue
elif num< i :
print('猜小了:')
continue
elif num==i:
print('猜对了!')
break
代码2:
猜数字游戏 随机1 - 10个数字,如果猜对正确,如果没有猜对错误
给用户9次机会,最终结果要求用户一次都猜不对
1 2 3 4 5 6 7 8 9 10 9次机会
思路:可以先拿到用户猜过的数字,我可以随机一个数字,去和用户猜过的数字作比对。如果这个循环的数字没有在用户猜过的数字当中。那么这个数字就是我们需要的答案
代码:
import random
# 定义一个列表 目的:用来存储用户猜过的数字
lst = []
i = 0
while i < 9:
number = int(input('请输入一个1-10的数字:'))
# 把用户猜过的数字追加到列表当中
lst.append(number)
print('对不起,你没有猜对')
i += 1
while True:
number_x = random.randint(1,10) #1<= x <=10
if number_x in lst:
continue
else:
break
print('正确号码是:',number_x)
练习5. 求质数2
需求:求100以内的质数
代码:
i=2
while i<=100:
flag = True
j=2
while j<i:
if i % j == 0:
flag=False
j+=1
if flag:
print(i)
i += 1
练习6. 求质数2,性能优化
先通过time模块来查看2个时间差
from time import *
start_time= time()
i=2
while i<=10000:
flag = True
j=2
while j<i:
if i % j == 0:
flag=False
j+=1
if flag:
#
pass
i += 1
end_time = time()
print('花费了{}秒'.format(end_time-start_time))
通过上面代码的运行,发现当基数变大的时候,执行时间变长
6.1第一次优化
通过在内层循环增加break的方法跳出不需要再次循环的数字
代码如下:
from time import *
start_time= time()
i=2
while i<=10000:
flag = True
j=2
while j<i:
if i % j == 0:
flag=False
break
j+=1
if flag:
#
pass
i += 1
end_time = time()
print('花费了{}秒'.format(end_time-start_time))
通过上面代码的执行发现比原有的快了近10倍
6.1第二次优化
通过
代码:
from time import *
start_time= time()
i=2
while i<=100000:
flag = True
j=2
while j<=i**0.5:
if i % j == 0:
flag=False
break
j+=1
if flag:
print(i)
pass
i += 1
end_time = time()
print('花费了{}秒'.format(end_time-start_time))
通过最后的时间的观察,和最开始的对比,程序速度快了100倍左右
网友评论