1、求1000以内的所有水仙花数
水仙花数: 指一个n位数(n >= 3),它的每个位上的数字n次幂之和等于他本身
如:153 = 1^3 + 5^3 +3^3
i = 100
while i < 1000:
#分离个位
a = i % 10
#分离十位
b = (i // 10) % 10
#分离百位
c = i // 100
sum = a ** 3 + b ** 3 + c ** 3
if sum == i:
print(i)
i += 1
>>> 153
>>> 370
>>> 371
>>> 407
2、获取用户输出的任意数,判断其是否是质数
只能被1和他本身整除的数就是质数。如:2、3、5、7、11……
num = int(input('请输入一个数'))
i = 2
flg = True
while i < num:
if num % i == 0:
print(num,"不是质数")
flg = False
break
i += 1
if flg:
print(num,'是质数')
>>> 请输入一个数11
>>> 11 是质数
3、在控制台打印如下图形
*******
*******
*******
*******
*******
i = 0
while i < 5:
j = 0
while j < 7:
print('*',end ='')
j += 1
print()
i += 1
输出:
*******
*******
*******
*******
*******
4、在控制台打印如下图形
*
**
***
****
*****
i = 0
while i < 5:
j = 0
while j < i+1:
print('*',end ='')
j += 1
print()
i += 1
输出:
*
**
***
****
*****
5、打印九九乘法表
形如:
1*1=1
1*2=2 2*2=4
……
1*9=9 …… 9*9=81
i = 1
while i < 10 :
j = 1
while j < i+1:
print('{} * {} = {} '.format(j,i,i*j),end ='')
# print(f'{j} * {i} = {i*j} ',end = '') #可以达到上面相同的效果
j += 1
print()
i += 1
输出:
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
6、开发一个彩票小游戏,
给用户9次机会猜10个数字1-10随机来猜并告诉用户才猜出的数字是否正确
需求:用户怎么猜都猜不对
思路1: 先拿到用户猜的所有数字,再随机一个数字,如果这个随机的数字没在用户猜的数字里面那么这个数字就是我们要的答案
思路2: 先建立一个1-10的列表,每猜一次将列表中的数字删除一个,9次之后留下那个就是正确答案
#思路1
import random
i = 0
list = []
while i < 9:
num = int(input('请猜一个1-10的数字: '))
if num in list:
print('这个数字已经猜过了')
continue
list.append(num)
i += 1
print('你才过的答案',list)
while 1:
num1 = random.randint(1,10)
if num1 not in list:
print('正确答案是',num1)
break
#思路2:
i = 0
list = [1,2,3,4,5,6,7,8,9,10]
while i < 9:
num = int(input('请猜一个1-10的数字: '))
if num in list:
list.remove(num)
else:
print('这个数你已经猜过了')
continue
i += 1
print('正确答案是',list)
7、输出1000以内的所有质数
i = 1
lst = []
while i< 100:
flag = True
i += 1
j = 2
while j < i:
if i % j == 0:
flag = False
break
j += 1
if flag:
lst.append(i)
print(lst)
>>> [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]
算法优化
以上例为例当计算20000以内的质数时
import time
i = 1
start = time.time()
while i< 20000:
flag = True
i += 1
j = 2
while j < i:
if i % j == 0:
flag = False
break
j += 1
if flag:
#print(i)
pass #空操作
end = time.time()
print('花费时间为: %dms' %((end - start)*1000))
>>> 花费时间为: 3360ms
优化算法1:
在进行逐一除的时候,如100除到50的时候其商为2,此后逐次减小的实际上在做除法的时候只需要除数循环到被除数的一半即可
代码如下:
import time
i = 1
start = time.time()
while i< 20000:
flag = True
i += 1
j = 2
while j < (i/2):
if i % j == 0:
flag = False
#rint(i)
break
j += 1
if flag:
#print(i)
pass
end = time.time()
print('花费时间为: %dms' %((end - start)*1000))
>>> 花费时间为: 2406ms
再次优化:
import time
i = 1
start = time.time()
while i< 20000:
flag = True
i += 1
j = 2
while j < i ** (0.5):
if i % j == 0:
flag = False
break
j += 1
if flag:
#print(i)
pass
end = time.time()
print('花费时间为: %dms' %((end - start)*1000))
>>> 花费时间为: 123ms