《Python程序设计基础》【第六章】习题

#6.1随机生成10个8位密码(包含26个大小写字母和数字)

import random
content=list()         #建立内容列表,包含所有数字和字母,密码从列表中随机抽出元素生成

for i in range(0,10):  #把0-9输入到内容列表中
    content.append(i)

i=ord("A")             #输入A-Z
while True:
    content.append(chr(i))
    i=i+1
    if i>ord('Z'):
        break
i=ord("a")             #输入a-z(unicode码中字母大小写编排不连续)
while True:
    content.append(chr(i))
    i=i+1
    if i>ord('z'):
        break

#生成密码
password=list()
for i in range(10):
    eachpassword=list()
    for j in range(8):
        eachpassword.append(random.choice(content))
    password.append(eachpassword)

for eachpassword in password:
    print(eachpassword)

输出结果:

['X', 'P', 'y', 'T', 'k', 'U', 4, 'N']
['J', 'S', 'P', 'J', 'J', 8, 'J', 'A']
['J', 'r', 8, 'v', 'I', 'Y', 'N', 0]
['U', 'q', 'h', 9, 'F', 'P', 'f', 7]
[8, 'X', 'b', 'q', 'T', 'Y', 'v', 'J']
['T', 'i', 2, 9, 'K', 'j', 'A', 'F']
['S', 'U', 'Z', 'u', 'a', 'r', 'V', 's']
[0, 6, 'N', 'N', 'g', 1, 'V', 'r']
['a', 'Q', 'o', 'f', 'b', 'f', 'A', 'a']
['Y', 'J', 'G', 'T', 'O', 'A', 7, 'Q']


#6.2重复元素判定。编写一个函数,接受列表作为参数,若有重复元素则返回True.同时编写测试程序

def check(a):
    repeat=0                   #作为是否出现重复元素的布尔值
    testlist=list()
    for i in a:
        if i in testlist:       #出现重复元素
            repeat=1
            break
        else:
            testlist.append(i)

    return (bool(repeat))

#测试部分
list1=[1,2,3]
list2=[1,2,2,3]
print(check(list1))
print(check(list2))

输出结果:

False

True


#6.5生日悖论。生日悖论指如果一个房间里有23人或以上,那么至少有两个人生日相同的概率大于50%。编写程序,输入在不同随机样本数量下,23个人中石少两个人生日相同的概率

import random
all_birth=range(1,366)     #构建包含所有生日的数组

#检测一个样本中是否出现同一天生日的情况
def check():
    a=set()
    for i in range(23):
        a.add(random.choice(all_birth))
    if len(a)<23:
        return 1
    else:
        return 0

#测试函数
def test(N):
    n=0
    for i in range(N):
        n+=check()
    print(n/N)

#代入不同样本数量进行测试
test(100)
test(1000)
test(10000)

输出结果:

0.42
0.512
0.5061


  • 9
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值