python第六课 python编程小练习

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值