八年级上册¶

第一单元 用计算机程序解决问题¶

第3节 简单实用的枚举算法¶

一、枚举算法简介¶

In [2]:
# 输出1000以内同时被7和5整除的所有整数
lst = []
for x in range(1, 1000):
    if x % 7 == 0 and x % 5 == 0:
        lst.append(x)
print(lst)
[35, 70, 105, 140, 175, 210, 245, 280, 315, 350, 385, 420, 455, 490, 525, 560, 595, 630, 665, 700, 735, 770, 805, 840, 875, 910, 945, 980]
In [5]:
# 输出邀请函
names = ['小林', '张三', '李四', '小明']
f = open('invitation.txt', 'w')
for name in names:
    s = '''{}同学:
    你好,学校周日将在操场举行校园创客节,邀请你届时参加。
    
                                        xxxx学校
                                        xxxx年xx月xx日
    
    '''.format(name)
    print(s)
    f.write(s)
print('邀请函生成完毕,已保存在invitation.txt文件中。')
f.close()
小林同学:
    你好,学校周日将在操场举行校园创客节,邀请你届时参加。
    
                                        xxxx学校
                                        xxxx年xx月xx日
    
    
张三同学:
    你好,学校周日将在操场举行校园创客节,邀请你届时参加。
    
                                        xxxx学校
                                        xxxx年xx月xx日
    
    
李四同学:
    你好,学校周日将在操场举行校园创客节,邀请你届时参加。
    
                                        xxxx学校
                                        xxxx年xx月xx日
    
    
小明同学:
    你好,学校周日将在操场举行校园创客节,邀请你届时参加。
    
                                        xxxx学校
                                        xxxx年xx月xx日
    
    
邀请函生成完毕,已保存在invitation.txt文件中。

二、枚举算法应用¶

In [7]:
# 模拟生日密码强度验证
import time
password = int(input('输入待验证的生日密码(如20120101):'))
s = time.time()
for i in range(21000000):
    if i == password:
        e = time.time()
        print('密码被命中,用时{:.3f}秒'.format(e-s))
        break
输入待验证的生日密码(如20120101):19990101
密码被命中,用时2.201秒

实践活动:物不知数¶

In [8]:
# 物不知数 -- 只找第一个数
# 今有物,不知其数。三三数之剩二,五五数之剩三,七七数之剩二,问物几何?
n = 1
while True:
    if n % 3 == 2 and n % 5 == 3 and n % 7 == 2:
        print(n)
        break
    n += 1
23
In [12]:
# 物不知数 -- 在一定范围内找
# 今有物,不知其数。三三数之剩二,五五数之剩三,七七数之剩二,问物几何?
a, b = map(int, input('输入数的范围(如 1 1000):').split())
n = 1
while a <= n <= b:
    if n % 3 == 2 and n % 5 == 3 and n % 7 == 2:
        print(n, end=' ')
    n += 1
输入数的范围(如 1 1000):1 2000
23 128 233 338 443 548 653 758 863 968 1073 1178 1283 1388 1493 1598 1703 1808 1913 
In [ ]: