栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python自制probability库

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python自制probability库

import random

class Probability:
    '''
    Probability has 4 init syntax:
    1.pro=Probability(kwargs_dict)
    2.pro=Probability(__else__,kwargs_dict)
    3.pro=Probability(**kwargs)
    4.pro=Probability(__else__,**kwargs)
    '''
    def __init__(self, __else__=None,kwargs_dict={},**kwargs):
        if type(__else__)==dict:
            kwargs_dict=__else__
            __else__=None
        if not kwargs_dict and not kwargs:
            raise ValueError('__init__() must take one argument between dict and **kwargs(0 given)')
        if kwargs_dict and kwargs:
            raise ValueError('__init__() takes only one argument between dict and **kwargs(2 given)')
        if kwargs_dict:
            kwargs=kwargs_dict
        total = 0
        for key in kwargs:
            total+=kwargs[key]
        if total>100:
            raise ValueError('The sum of the argment of Probability() must Less than or equal to 100')
        self.pros=kwargs
        self.__else__=__else__
        self.total=total
        self.diary=[]
    def get(self):
        num=random.random()*100
        now=0
        for key in self.pros:
            if now100:
            raise ValueError('和不能大于100')
        
        self.pros=pros
        self.total=total

class Average_Probability(Probability):
    '''
    Average_Probability has 2 init syntax:
    1.pro=Probability(args_list)
    2.pro=Probability(*args)
    ( 2.pro=Probability([],*args) )
    '''
    def __init__(self, args_list=[], *args):
        if not args_list and not args:
            raise ValueError('__init__() must takes one argument between list and *args(0 given)')
        if args_list and args and type(args_list)==list:
            raise ValueError('__init__() takes only one argument between list and *args(2 given)')
        if args_list and type(args_list)==list:
            args=args_list
        if type(args_list)!=list:
            args=list(args)
            args.append(args_list)
        pros={}
        for i in args:
            pros[i]=100/len(args)
        self.pros=pros
        self.__else__=None
        self.total=len(args)
        self.diary=[]
    
    def append(self,args_list=[],*args):
        if not args_list and not args:
            raise ValueError('__init__() must takes one argument between list and *args(0 given)')
        if args_list and args and type(args_list)==list:
            raise ValueError('__init__() takes only one argument between list and *args(2 given)')
        if args_list and type(args_list)==list:
            args=args_list
        if type(args_list)!=list:
            args=list(args)
            args.append(args_list)
        args+=list(self.pros.keys())
        args=set(args)
        pros={}
        for i in args:
            if i not in pros:
                pros[i]=100/len(args)
        self.pros=pros
        self.total=len(args)


class randrange(Probability):
    def __init__(self, start, stop=None, step=None):
        self.start=start
        self.stop=stop
        self.step=step
    
    def get(self):
        if self.step:
            return random.randrange(self.start,self.stop,self.step)
        if self.stop:
            return random.randrange(self.start,self.stop)
        return random.randrange(self.start,self.stop,self.step)
    
    def __str__(self):
        return str(self.get())

class Branch(Probability):
    '''
    bra=Branch(10,30,25).get()
    if bra==0:
        pass
    elif bra==1:
        pass
    elif bra==2:
        pass
    else:
        pass
    '''
    def __init__(self,*args):
        super().__init__('else',{i:args[i] for i in range(len(args))})

用法:

from probability import Probability as pro

print(pro('else',a=10,b=20,c=40).get())

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/856244.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号