代码结构和代码
import json import random import os import re #!/usr/bin/python # -*- coding: UTF-8 -*- import os, re import random,readJSON data = readJSON.读JSON文件("data.json") 名人名言 = data["famous"] # a 代表前面垫话,b代表后面垫话 前面垫话 = data["before"] # 在名人名言前面弄点废话 后面垫话 = data['after'] # 在名人名言后面弄点废话 古诗词 = data['bosh'] #古诗词 xx = "诗意" 重复度 = 2 def 洗牌遍历(列表): global 重复度 池 = list(列表) * 重复度 while True: random.shuffle(池) for 元素 in 池: yield 元素 下一句古诗词 = 洗牌遍历(古诗词) 下一句名人名言 = 洗牌遍历(名人名言) def 来点名人名言(): global 下一句名人名言 xx = next(下一句名人名言) xx = xx.replace( "a",random.choice(前面垫话) ) xx = xx.replace( "b",random.choice(后面垫话) ) return xx def 另起一段(): xx = ". " xx += "\r\n" xx += " " return xx # 限定可见方法 __all__ = ["ChineseName"] # ================ # 资源文件 # ================ BASE_DIR = os.path.dirname(os.path.abspath(__file__)) LASTFILE = os.path.join(BASE_DIR, "source/lastnames.txt") FIRSTFILE = os.path.join(BASE_DIR, "source/firstnames.txt") BOYFILE = os.path.join(BASE_DIR, "source/boy.json") GIRLFILE = os.path.join(BASE_DIR, "source/girl.json") # =================== # 主体代码 # =================== class ChineseName(object): """中文名取名""" def __init__(self, firstname_file=FIRSTFILE, lastname_file=LASTFILE): """初始化 Args: firstname_file: 名字文件路径 - String lastname_file:姓氏文件路径 - String 以上两个路径参数有默认值,也可由用户自定义,文件内容以空格分隔即可 """ # 存储名字,便于多次调用 - List self._firstnames = self._getChars(firstname_file) # 存储姓氏,便于多次调用 - List self._lastnames = self._getChars(lastname_file) self._loadFirstName() def _getChars(self, filename): """获取中文字符列表 Args: filename: 文件路径 - String (空格分隔文件) Returns: List: 字符列表 Raise: file not find """ if os.path.exists(filename): with open(filename, "r", encoding="utf-8") as f: chars = f.read().split(" ") return chars else: raise IOError("file not find!") def _loadFirstName(self): """ 加载男孩女孩名字 """ # 加载男孩名字 {dict} with open(BOYFILE, "r", encoding="utf-8") as f: self._boy_firstnames = json.loads(f.read()) # 加载女孩名字 {dict} with open(GIRLFILE, "r", encoding="utf-8") as f: self._girl_firstnames = json.loads(f.read()) def getLastName(self): """获取姓氏 Args: None Returns: String: 姓氏 """ return random.choice(self._lastnames) def _getFirstName(self, char_count=1, sex="boy"): """ 获取名字 :param char_count: {int} 名字字数 :param sex: {str} 性别 (boy | girl) :return: {srt} 名字 """ firstnames = { "boy": self._boy_firstnames, "girl": self._girl_firstnames } try: return random.choice(firstnames.get(sex).get(str(char_count))) except KeyError: raise KeyError("please input char_count between 1-2") def getGirlFirstName(self, char_count=1): """ 获取一个女孩名字 :param char_count: {int} 名字字数 :return: {str} 名字 """ return self._getFirstName(char_count, sex="girl") def getBoyFirstName(self, char_count=1): """ 获取一个男孩名字 :param char_count: {int} 名字字数 :return: {str} 名字 """ return self._getFirstName(char_count, sex="boy") def getFirstName(self, char_count=1, sex=None): """获取名字 Args: char_count: {int} 名字长度,默认1 sex: {str} 性别(boy | girl) Returns: String: 名字 """ if sex == "boy": firstname = self.getBoyFirstName(char_count) elif sex == "girl": firstname = self.getGirlFirstName(char_count) else: firstname = [] for i in range(char_count): firstname.append(random.choice(self._firstnames)) firstname = "".join(firstname) return firstname def getName(self, char_count=1, lastname="", sex=None): """获取一个中文姓名 Args: char_count: 名字长度,默认1 - Integer lastname: 姓氏,默认随机 - String sex: {str} 性别(boy | girl) Returns: String: 姓名 """ name = [] if lastname == "": name.append(self.getLastName()) else: name.append(lastname) name.append(self.getFirstName(char_count, sex)) name = "".join(name) return name def getBoyName(self, char_count=1, lastname=""): """ 获取男孩姓名 :param char_count: {int} 名字长度,默认1 :param lastname: {str} 姓氏 默认随机 :return: {str} 姓名 """ return self.getName(char_count, lastname, sex="boy") def getGirlName(self, char_count=1, lastname=""): """ 获取女孩姓名 :param char_count: {int} 名字长度,默认1 :param lastname: {str} 姓氏 默认随机 :return: {str} 姓名 """ return self.getName(char_count, lastname, sex="girl") def getNames(self, count, char_count=1, lastname="", sex=None): """获取一个中文姓名列表 Args: count: 名字数量 - Integer char_count: 名字长度,默认1 - Integer lastname: 姓氏,默认随机 - String sex: {str} 性别(boy | girl) Returns: List: 姓名列表 """ names = [] for i in range(count): names.append(self.getName(char_count, lastname, sex)) return names def getNameGenerator(self, count, char_count=1, lastname="", sex=None): """获取一个中文姓名生成器,2018年1月22日 Args: count: 名字数量 - Integer char_count: 名字长度,默认1 - Integer lastname: 姓氏,默认随机 - String sex: {str} 性别(boy | girl) Returns: Yield:姓名生成器 """ for i in range(count): yield self.getName(char_count, lastname, sex) def ask_for_name_generation(): count = int(input("请输入生成姓名的数量:")) char_count_input = input("是否指定姓名长度?(是/否,默认为1):") if char_count_input.lower() == "是": char_count = int(input("请输入姓名长度:")) else: char_count = 1 lastname = input("是否指定姓氏?(是/否,默认随机选择):") if lastname.lower() == "是": lastname = input("请输入姓氏:") else: lastname = "" sex_input = input("是否指定性别?(是/否,默认为None):") if sex_input.lower() == "是": sex = input("请输入性别(boy是1/girl是0):") sex = "boy" if sex == "1" else "girl" else: sex = None # 调用提供的函数 cname = ChineseName() generator = cname.getNameGenerator(count=count, char_count=char_count, lastname=lastname, sex=sex) # 遍历生成器并输出姓名 print("生成的姓名如下:") for name in generator: print(name) xx = input("请输入名字(如果不想解释可以ENTER):") for x in xx: tmp = str() while ( len(tmp) < 100 ) : 分支 = random.randint(0,100) if 分支 < 5: tmp += 另起一段() elif 分支 < 20 : tmp += 来点名人名言() else: tmp += next(下一句古诗词) tmp = tmp.replace("x",xx) print(tmp) while True: satisfaction = input(f"您是否满意这个名字和这段文本?(是/否):") if satisfaction.lower() == '是': print("感谢您的反馈!") return True elif satisfaction.lower() == '否': print("好的,您可以重新查询并生成。") return False else: print("请输入'是'或'否'。") # 调用函数 ask_for_name_generation()