本文主要是介绍Python笔记 | 依概率随机产生姓氏案例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
生活中,不同的姓氏出现的频率大不相同。如赵、王、李等姓出现频率很高,而像东方、慕容这样的复姓却很少见到,今天我们就来在python中简单实现一下上述过程。
要求:姓氏全都按行保存在CNames中,越靠后的姓氏越少见。各行数组出现概率比为20:15:5:2:1,对应行数组为0-3行,4-8行,9-15行,16-20行,21-25行
CNames.txt文件包含内容如下图所示:
加载数据
def load_file():text_data=[]with open('CName.txt','r',encoding='utf-8') as f:data=f.readlines()for line in data:tmp=line.split(';')text_data.append(tmp[:-1])return text_data
产生概率行数组
probability_control=[[0,1,2,3],[4,5,6,7,8],[9,10,11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25]]loop=[20,15,5,2,1]def probability_line(data:list,ranges:list):if len(data)==len(ranges):data=data.copy()count=0for loops in loop:for a in range(loops-1):data.append(data[count])count+=1return dataelse:print('长度不匹配')
产生随机姓氏
import randomdef generator_line(data):name=load_file()line_combine=data[random.randrange(len(data))]line=line_combine[random.randrange(len(line_combine))]random_name=name[line][random.randrange(len(name[line]))]return random_name
全部代码:
import randomprobability_control=[[0,1,2,3],[4,5,6,7,8],[9,10,11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25]]loop=[20,15,5,2,1]def load_file():text_data=[]with open('CName.txt','r',encoding='utf-8') as f:data=f.readlines()for line in data:tmp=line.split(';')text_data.append(tmp[:-1])return text_datadef probability_line(data:list,ranges:list):if len(data)==len(ranges):data=data.copy()count=0for loops in loop:for a in range(loops-1):data.append(data[count])count+=1return dataelse:print('长度不匹配')def generator_line(data):name=load_file()line_combine=data[random.randrange(len(data))]line=line_combine[random.randrange(len(line_combine))]random_name=name[line][random.randrange(len(name[line]))]return random_namedef main():data=probability_line(probability_control,loop)with open('random_name.txt','w') as f:for i in range(10000): # 随机产生10000个姓氏name=generator_line(data)f.write(name+'\n')if __name__=='__main__':main()
这篇关于Python笔记 | 依概率随机产生姓氏案例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!