python核心编程 7-14

本文介绍了一种利用Python的random模块生成随机数集合的方法,并通过用户交互验证集合的并集与交集。读者可以通过输入预测结果来练习集合运算。
7–13. 随机数。修改练习 5-17 的代码:使用 random 模块中的 randint()或 randrange()方法生成一个随机数集合: 从 0 到 9(包括 9)中随机选择,生成 1 到 10 个随机数。这些数字组成集合A(A 可以是可变集合,也可以不是)。同理,按此方法生成集合 B。每次新生成集合 A 和 B 后,显示结果 A | B 和 A & B

7–14. 用户验证。修改前面的练习,要求用户输入 A | B 和 A & B 的结果,并告诉用户他(或她)的答案是否正确,而不是将 A | B 和 A & B 的结果直接显示出来。如果用户回答错误,允许他(或她)修改解决方案,然后重新验证用户输入的答案。如果用户三次提交的答案均不正确,程序将显示正确结果。


这题用到random模块,库的介绍如下:

random库

random.seed()设定种子,linux下默认是os.urandom()提供随机源,就是种子,也有系统是把系统时间当成种子。使用相同种子在系统中所产生的数是想同的。

还有两个重要的类是random.Random类和random.SystemRandom类。

一般常用函数:

random.random()
返回n,则 0 <= n < 1的小数。

random.uniform(a,b)    
返回n ,则 a <= n <= b的浮点数。

random.randint(a,b)
返回n ,则a <= n <= b的整数。

random.choice(sequence)  
随机选择函数,从序列中取出一个随机值,不会改变原序列。

random.shuffle() 
洗牌函数,将列表的顺序打乱,重新形成一个无序的列表。

random.randrange()和range()类似.
(!但是我发现for循环里不能直接用random.randrange要用range(random.randrange),好坑)
random.randrange(10)
random.randrange(20,41)
random.randrange(0,101,2)
random.randrange(20,60,3)

random.sample(seq,n)
返回一个长度为n的所有元素为seq元素随机且不重复的一个列表。

我的代码如下:

import random

def randset():
    aset=set()
    for i in range(random.randrange(10)):#居然要用 range(random.randrange(9))
        aset.add(random.randint(0,9))
    return aset

def inputset(prompt):
    string=input("输入你认为的%s,元素之间用','分隔:"%prompt)
    lens=len(string)
    count=0
    aset=set()
    while count<lens:
        if string[count] in '1234567890':
            aset.add(int(string[count]))
        count=count+1
    return aset           
            



if __name__ == '__main__':
    seta=randset()
    setb=randset()
    print ('A:',seta)
    print ('B:',setb)
    seta,setb=seta|setb,seta&setb
    count=0
    while count<3:
        setc=inputset('A|B')
        setd=inputset('A&B')
        if (seta==setc and setb==setd )or (setb==setc or seta==setd):
            print ('bingo')
            break
        else:
            count=count+1
            print ('guess again')
    if count==3:
        print ('A|B:',seta)
        print ('A&B:',setb)
        



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值