python3隨機(jī)生成中文字符(隨機(jī)生成兩字或三字的名字)

第一種方法:Unicode碼

在unicode碼中,漢字的范圍是(0x4E00, 9FBF)

import random

def Unicode():
    val = random.randint(0x4e00, 0x9fbf)
    return chr(val)

這個(gè)方法有個(gè)小問(wèn)題,unicode碼中收錄了2萬(wàn)多個(gè)漢字,包含很多生僻的繁體字.

第二種方法:GBK2312

gbk2312對(duì)字符的編碼采用兩個(gè)字節(jié)相組合,第一個(gè)字節(jié)的范圍是0xB0-0xF7, 第二個(gè)字節(jié)的范圍是0xA1-0xFE.
對(duì)GBK2312編碼方式詳細(xì)的解釋請(qǐng)參看GBK2312編碼

import random

def GBK2312():
    head = random.randint(0xb0, 0xf7)
    body = random.randint(0xa1, 0xf9)   # 在head區(qū)號(hào)為55的那一塊最后5個(gè)漢字是亂碼,為了方便縮減下范圍
    val = f'{head:x}{body:x}'
    str = bytes.fromhex(val).decode('gb2312')
    return str

GBK2312收錄了6千多常用漢字.兩種方法的取舍就看需求了.
原博:http://www.itdecent.cn/p/73bf99e37ca2

需求:隨機(jī)生成兩字或三字的名字

思路1:姓后面的第一個(gè)名,用數(shù)組隨機(jī)取數(shù),數(shù)組第一個(gè)數(shù)據(jù)為隨機(jī)的中文字符(調(diào)用上述函數(shù)),第二個(gè)數(shù)據(jù)為空字符,隨機(jī)取數(shù)取到空字符就是兩字名字,取到非空字符就是三字名字

思路2:for循環(huán)生成中文字符的函數(shù),然后進(jìn)行str拼接,循環(huán)次數(shù)為隨機(jī)生成[1-2]隨機(jī)整數(shù),隨機(jī)到1,則為二字名字,隨機(jī)到2,則為三字名字(4字名字類推)

思路1代碼:

import random

def GBK2312():
    head = random.randint(0xb0, 0xf7)
    body = random.randint(0xa1, 0xf9)  # 在head區(qū)號(hào)為55的那一塊最后5個(gè)漢字是亂碼,為了方便縮減下范圍
    val = f'{head:x}{body:x}'
    st = bytes.fromhex(val).decode('gb2312')
    return st

def first_name():  #   隨機(jī)取姓氏字典
    first_name_list = [
        '趙', '錢', '孫', '李', '周', '吳', '鄭', '王', '馮', '陳', '褚', '衛(wèi)', '蔣', '沈', '韓', '楊', '朱', '秦', '尤', '許',
        '何', '呂', '施', '張', '孔', '曹', '嚴(yán)', '華', '金', '魏', '陶', '姜', '戚', '謝', '鄒', '喻', '柏', '水', '竇', '章',
        '云', '蘇', '潘', '葛', '奚', '范', '彭', '郎', '魯', '韋', '昌', '馬', '苗', '鳳', '花', '方', '俞', '任', '袁', '柳',
        '酆', '鮑', '史', '唐', '費(fèi)', '廉', '岑', '薛', '雷', '賀', '倪', '湯', '滕', '殷', '羅', '畢', '郝', '鄔', '安', '常',
        '樂(lè)', '于', '時(shí)', '傅', '皮', '卞', '齊', '康', '伍', '余', '元', '卜', '顧', '孟', '平', '黃', '和', '穆', '蕭', '尹',
        '姚', '邵', '堪', '汪', '祁', '毛', '禹', '狄', '米', '貝', '明', '臧', '計(jì)', '伏', '成', '戴', '談', '宋', '茅', '龐',
        '熊', '紀(jì)', '舒', '屈', '項(xiàng)', '祝', '董', '梁']
    n = random.randint(0, len(first_name_list) - 1)
    f_name = first_name_list[n]
    return f_name

def second_name():
    # 隨機(jī)取數(shù)組中字符,取到空字符則沒(méi)有second_name
    second_name_list = [GBK2312(), '']
    n = random.randint(0, 1)
    s_name = second_name_list[n]
    return s_name

def last_name():
    return GBK2312()

def create_name():
    name = first_name() + second_name() + last_name()
    return name

print(create_name())

思路2代碼:

def create_name():
    n = random.randint(1, 2)
    name = ''
    for i in range(n):
        s = GBK2312()
        name = name+s
    return first_name()+name

優(yōu)化后版本(2023.5.19更新):
random.choice()從序列中獲取一個(gè)隨機(jī)元素,其原型為random.choice(sequence),參數(shù)sequence表示一個(gè)有序類型。這里說(shuō)明一下,sequence在Python中不是一種特定的類型,而是泛指序列數(shù)據(jù)結(jié)構(gòu)。列表,元組,字符串都屬于sequence

second_name = random.choice([GBK2312(), ''])
def GBK2312():
    head = random.randint(0xb0, 0xf7)
    body = random.randint(0xa1, 0xf9)  # 在head區(qū)號(hào)為55的那一塊最后5個(gè)漢字是亂碼,為了方便縮減下范圍
    val = f'{head:x}{body:x}'
    st = bytes.fromhex(val).decode('gb2312')
    return st

def create_name():
    first_name_list = [
        '趙', '錢', '孫', '李', '周', '吳', '鄭', '王', '馮', '陳', '褚', '衛(wèi)', '蔣', '沈', '韓', '楊', '朱', '秦', '尤', '許',
        '何', '呂', '施', '張', '孔', '曹', '嚴(yán)', ]
    f_name = random.choice(first_name_list)
    name = f_name + random.choice([GBK2312(), '']) + GBK2312()
    return name

print(create_name())
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容