用户:
小麦做的面包查看:0 回复:0 评论:0 创建时间:2022-07-20T10:21:25
【作品展示】

【作品介绍】
动机是以前一直想做一个用概率算的分支(此代码的Branch类),但是也能干别的用(如封面),有用的话可以加到lab里就能直接import了
【作品源代码】
import random
# from objprint import op
class Probability:
'''
Probability object has 4 syntax to initialize:
1. Probability(kwargs_dict)
2. Probability(__else__,kwargs_dict)
3. Probability(**kwargs)
4. 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 __init__() 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
geted=self.__else__
for key in self.pros:
if now100:
raise ValueError('The sum of the argment of __init__() must less than or equal to 100')
self.pros=pros
self.total=total
class Average_Probability(Probability):
'''
Average_Probability object has 2 syntax to initialize:
1. Average_Probability(args_list)
2. Average_Probability(*args)
'''
def __init__(self, args_list=[], *args):
if not args_list and not args:
raise ValueError('__init__() must take 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:
print(args)
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 take 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))})
if __name__=='__main__':
p = Probability({1:1,2:2,3:3,4:90})
print(p.get())
p.append({5:4})
p.test()
# op(p)
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn