基于Python编写一个根据姓名测性别的小程序

目录
  • 导语
  • 一、准备环节
    • 1.1安装环境
  • 二、准备素材
  • 三、开始敲代码
    • 3.1导入模块
    • 3.2定义界面
    • 3.3预测性别
    • 3.4读取数据
    • 3.5附完整的源码
  • 四、效果展示
  • 总结

导语

以前上英语课老师都会教哪些名字一听就知道是男生的,比如David、Tom、Jerry,然后Angela、Sophia一听就是女生的名字。当你以为所有名字一听就可以辨别男女的时候,你就想错了~就像中文里面“贾凡”,你以为是男生,其实是女生也说不定。这种难分性别的名字

其实很多呢~为了避免宝宝的性别和提前取好的名字冲突,很多准妈妈会给自己的孩子取一个中性的名字,不管男女都可以用哈哈哈~两全其美

​每个女孩子都希望自己的姓名能取的好听一点儿,也不希望经常跟男孩子名字撞名吧~想想一个班里面一个男生一个女生名字撞了多尴尬,如果名字偏女孩子一点儿,男生叫这个名字那可能就尴尬癌都犯了,相反也是!

当然,送大家一句经典台词抢救一下:“你不尴尬——尴尬的就是别人!“

哈哈哈!那下面就说到正题了哈:今天小编教大家编写一款根据中文名能猜测性别的一款界面化的小程序呢~

一、准备环节

本文是基于Pyqt5的界面化小程序啦~

1.1 安装环境

Python3、Pycharm、pyqt5以及一些自带滴。

模块安装: pip install -i https://pypi.douban.com/simple/ +模块名

二、准备素材

素材的话就是界面化小程序的头像标志以及之前自己爬取准备的一份百家姓的数据csv数据。

三、开始敲代码

3.1 导入模块

import os
import csv
import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

3.2 定义界面

self.setWindowTitle('诸子百家——姓名猜性别小程序')
        self.setWindowIcon(QIcon('data/3.png'))
        self.setFixedSize(400, 200)
        self.name_label = QLabel('中文姓名:')
        self.male_label = QLabel('男生概率:')
        self.female_label = QLabel('女生概率:')
        self.button = QPushButton('预测')
        self.name_edit = QLineEdit()
        self.male_edit = QLineEdit()
        self.female_edit = QLineEdit()
        self.grid = QGridLayout()
        self.grid.setSpacing(12)
        self.grid.addWidget(self.name_label, 0, 0)
        self.grid.addWidget(self.male_label, 1, 0)
        self.grid.addWidget(self.female_label, 2, 0)
        self.grid.addWidget(self.name_edit, 0, 1)
        self.grid.addWidget(self.male_edit, 1, 1)
        self.grid.addWidget(self.female_edit, 2, 1)
        self.grid.addWidget(self.button, 0, 2)
        self.setLayout(self.grid)
        self.button.clicked.connect(lambda: self.predict(self.name_edit.text()))

3.3 预测性别

​def predict(self, name):
        def genderprob(name, probs, type_='male'):
            assert type_ in ['male', 'female']
            if type_ == 'male':
                p = self.male_total / self.total
                for c in name:
                    p *= probs.get(c, (0, 0))[0]
            else:
                p = self.female_total / self.total
                for c in name:
                    p *= probs.get(c, (0, 0))[1]
            return p
        for c in name:
            assert u'\u4e00' <= c <= u'\u9fa0'
        male_prob = genderprob(name, self.name_probs, 'male')
        female_prob = genderprob(name, self.name_probs, 'female')
        result = {'male': male_prob / (male_prob + female_prob), 'female': female_prob / (male_prob + female_prob)}
        self.male_edit.setText(str(result['male']))
        self.female_edit.setText(str(result['female']))
        return result

3.4 读取数据

    def readCSV(self, csvpath='freqs.csv'):
        fp = open(csvpath, 'r', encoding='utf-8')
        csv_reader = csv.reader(fp)
        name_freqs = {}
        for idx, row in enumerate(csv_reader):
            if idx == 0: continue
            name_freqs[row[0]] = (row[1], row[2])
        return name_freqs

3.5 附完整的源码

'''
程序名称:
    根据中文名字推断性别
    源码基地:#806965976#
    csdn账号:顾木子吖
'''
import os
import csv
import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

'''根据中文名字判断性别'''
class GenderPredictor(QWidget):
    def __init__(self, parent=None, **kwargs):
        super(GenderPredictor, self).__init__(parent)
        # 定义界面
        self.setWindowTitle('诸子百家——姓名猜性别小程序')
        self.setWindowIcon(QIcon('data/3.png'))
        self.setFixedSize(500, 500)
        self.name_label = QLabel('中文姓名:')
        self.male_label = QLabel('男生概率:')
        self.female_label = QLabel('女生概率:')
        self.button = QPushButton('预测')
        self.name_edit = QLineEdit()
        self.male_edit = QLineEdit()
        self.female_edit = QLineEdit()
        self.grid = QGridLayout()
        self.grid.setSpacing(12)
        self.grid.addWidget(self.name_label, 0, 0)
        self.grid.addWidget(self.male_label, 1, 0)
        self.grid.addWidget(self.female_label, 2, 0)
        self.grid.addWidget(self.name_edit, 0, 1)
        self.grid.addWidget(self.male_edit, 1, 1)
        self.grid.addWidget(self.female_edit, 2, 1)
        self.grid.addWidget(self.button, 0, 2)
        self.setLayout(self.grid)
        self.button.clicked.connect(lambda: self.predict(self.name_edit.text()))
        # 模型初始化
        self.name_freqs = self.readCSV(os.path.join(os.getcwd(), 'data/freqs.csv'))
        self.male_total = 0
        self.female_total = 0
        for key, value in self.name_freqs.items():
            self.male_total += int(value[0])
            self.female_total += int(value[1])
        self.total = self.male_total + self.female_total
        self.name_probs = {}
        for key, value in self.name_freqs.items():
            self.name_probs[key] = (int(value[0])/self.male_total, int(value[1])/self.female_total)
    '''预测性别'''
    def predict(self, name):
        def genderprob(name, probs, type_='male'):
            assert type_ in ['male', 'female']
            if type_ == 'male':
                p = self.male_total / self.total
                for c in name:
                    p *= probs.get(c, (0, 0))[0]
            else:
                p = self.female_total / self.total
                for c in name:
                    p *= probs.get(c, (0, 0))[1]
            return p
        for c in name:
            assert u'\u4e00' <= c <= u'\u9fa0'
        male_prob = genderprob(name, self.name_probs, 'male')
        female_prob = genderprob(name, self.name_probs, 'female')
        result = {'male': male_prob / (male_prob + female_prob), 'female': female_prob / (male_prob + female_prob)}
        self.male_edit.setText(str(result['male']))
        self.female_edit.setText(str(result['female']))
        return result
    '''读取数据集'''
    def readCSV(self, csvpath='freqs.csv'):
        fp = open(csvpath, 'r', encoding='utf-8')
        csv_reader = csv.reader(fp)
        name_freqs = {}
        for idx, row in enumerate(csv_reader):
            if idx == 0: continue
            name_freqs[row[0]] = (row[1], row[2])
        return name_freqs

'''run'''
if __name__ == '__main__':
    app = QApplication(sys.argv)
    client = GenderPredictor()
    client.show()
    sys.exit(app.exec_())

四、效果展示

4.1  姓名:顾雪 效果Part 1

是不是听这个名字就知道是女生吖~测一测之后果然女生取这个名字的概率高出一截儿哈!

4.2 姓名:李志 效果Part 2

总结

好啦!一款简单的猜猜猜小程序就出炉了,偷偷拿自己的名字试试看吧~哈哈哈 不告诉别人.jpg

以上就是基于Python编写一个根据姓名测性别的小程序的详细内容,更多关于Python姓名测性别的资料请关注我们其它相关文章!

(0)

相关推荐

  • python中合并两个文本文件并按照姓名首字母排序的例子

    前段时间前在网上看到一段面试题,要求如下: employee文件中记录了工号和姓名 复制代码 代码如下: cat employee.txt: 100 Jason Smith 200 John Doe 300 Sanjay Gupta 400 Ashok Sharma bonus文件中记录工号和工资 复制代码 代码如下: cat bonus.txt: 100 $5,000 200 $500 300 $3,000 400 $1,250 要求把两个文件合并并输出如下, 处理结果: 复制代码 代码如下:

  • Python简单生成随机姓名的方法示例

    本文实例讲述了Python简单生成随机姓名的方法.分享给大家供大家参考,具体如下: 用到random.choice(序列) 在一个序列中随机选取一个值 # coding:utf-8 import random as r a1=['张','金','李','王','赵'] a2=['玉','明','龙','芳','军','玲'] a3=['','立','玲','','国',''] print("我们测试结果:") for i in range(15): name=r.choice(a1)+

  • Python实现手机号自动判断男女性别(实例解析)

    本文性别判断主要依靠airtest中的自动化测试实现 通过自动对比支付宝页面男女图像,从而实现男女判断 代码如下: 男女判断函数: // An highlighted block def numbe(): if exists(Template(r"tpl1574867500094.png", threshold=0.85, rgb=True, target_pos=0, record_pos=(0.779, 0.382), resolution=(960, 540))): sex =

  • python 通过手机号识别出对应的微信性别(实例代码)

    python 通过手机号识别出对应的微信性别,具体代码如下所述: def getGender(self,tel): self.d(resourceId="com.tencent.mm:id/kh").clear_text() self.d(resourceId="com.tencent.mm:id/kh").set_text(tel) self.d(resourceId="com.tencent.mm:id/mf").click() time.s

  • Python turtle画图库&&画姓名实例

    *****看一下我定义的change()和run()函数****** 绘图坐标体系: 作用:设置主窗体的大小和位置 turtle.setup(width, height, startx, starty) #width : 窗口宽度,若值是整数,表示像素值:若是小数,表示窗口宽度与屏幕的比例. #height : 窗口高度,若值是整数,表示像素值:若是小数,表示窗口高度与屏幕的比例. #startx : 窗口左侧与屏幕左侧的像素距离,若值是None,窗口位于屏幕水平中央. #starty : 窗口

  • 基于Python编写一个根据姓名测性别的小程序

    目录 导语 一.准备环节 1.1安装环境 二.准备素材 三.开始敲代码 3.1导入模块 3.2定义界面 3.3预测性别 3.4读取数据 3.5附完整的源码 四.效果展示 总结 导语 以前上英语课老师都会教哪些名字一听就知道是男生的,比如David.Tom.Jerry,然后Angela.Sophia一听就是女生的名字.当你以为所有名字一听就可以辨别男女的时候,你就想错了~就像中文里面“贾凡”,你以为是男生,其实是女生也说不定.这种难分性别的名字 其实很多呢~为了避免宝宝的性别和提前取好的名字冲突,

  • 基于Python编写一个B站全自动抽奖的小程序

    目录 导语 开发工具 环境搭建 原理简介 导语 应好友邀请,帮他写了个小程序,功能类似于实时监控自己关注的UP主,如果关注的UP主中有人发布了抽奖的动态,就自动参与这个抽奖.这样就能不错过任何一个可以暴富的机会了.写完之后感觉这个想法还是挺有意思的,于是上来分享一波. 废话不多说,让我们愉快地开始吧~ 开发工具 Python版本:3.7.8 相关模块: DecryptLogin模块: 以及一些python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 原

  • 基于Python编写一个点名器的示例代码

    目录 前言 主界面 添加姓名 查看花名册 使用指南 名字转动功能 完整代码 前言 想起小学的时候老师想点名找小伙伴回答问题的时候,老师竟斥巨资买了个点名器.今日无聊便敲了敲小时候老师斥巨资买的点名器. 本人姓白,就取名小白点名器啦,嘿嘿 代码包含:添加姓名.查看花名册.使用指南.随机抽取名字的功能(完整源码在最后) 主界面 定义主界面.使用“w+”模式创建test.txt文件(我添加了个背景图片,若不需要可省略) #打开时预加载储存在test.txt文件中的花名册 namelist = [] w

  • 基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算

    方法一: 结合lambda表达式.函数调用运算符.标准库函数对象.C++11标准新增的标准库function类型,编写一个简单的计算器,可实现简单的加.减.乘.除.取余二元运算.代码如下: #include "pch.h" #include <iostream> #include <functional> #include <map> #include <string> using namespace std; int add(int i

  • 基于Python编写一个宝石消消乐小游戏

    目录 开发工具 环境搭建 原理简介 开发工具 python版本:3.6.4 相关模块: pygame:以及一些python自带的模块. 环境搭建 安装python并添加到环境变量,pip安装需要的相关模块即可. 原理简介 游戏规则: 玩家通过鼠标交换相邻的拼图,若交换后水平/竖直方向存在连续三个相同的拼图,则这些拼图消失,玩家得分,同时生成新的拼图以补充消失的部分,否则,交换失败,玩家不得分.玩家需要在规定时间内获取尽可能高的得分. 实现过程: 首先加载一些必要的游戏素材: 加载背景音乐: py

  • 基于Python编写一个自动关机程序

    目录 1.实现效果 2.实现步骤 3.全部代码 1.实现效果 2.实现步骤 模块导入 import os,sys,time from PyQt5 import QtCore,QtWidgets,QtGui 窗口设置 def pageShow(self,page): #设置窗口的位置和大小 page.setGeometry(400,400,400,200) #设置窗口的标题 page.setWindowTitle('Window shutdown') #设置窗口的图标 #page.setWindo

  • 基于Python编写一个语音合成系统

    目录 背景 语音合成系统 准备工作 步骤 代码实现 背景 一直对语音合成系统比较感兴趣,总想能给自己合成一点内容,比如说合成小说,把我下载的电子书播报给我听等等. 语音合成系统 其实就是一个基于语音合成的工具,但是这个东西由于很多厂家都提供了API的形式,因此开发难度大大降低,只需要调用几个API即可实现属于自己的语音合成工具:麻雀虽小,五脏俱全.往大了说,这就是一个小型的语音合成系统. 准备工作 首先我们电脑上需要安装 Anaconda Python 3.7 visual studio cod

  • 基于Python编写一个简单的端口扫描器

    目录 1.需要的库 2.获取一个 host 地址 3.循环所有的端口 4.完整脚本 端口扫描是非常实用的,不止用在信息安全方面,日常的运维也用得到.这方面的工具也不要太多,搞过 CTF 的朋友会告诉你有多少端口扫描工具,那为什么还要用 Python 再自己实现一遍?这个问题就像饭店里的菜已经很好吃了,为什么还要自己烧菜一样,主要还是为了适合自己的口味,添加自己需要的个性功能. 今天我们将用 20 行代码编写一个简单的端口扫描器.让我们开始吧! 1.需要的库 都是标准库,因此内网环境也不影响: i

  • 基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算

    方法一: 结合lambda表达式.函数调用运算符.标准库函数对象.C++11标准新增的标准库function类型,编写一个简单的计算器,可实现简单的加.减.乘.除.取余二元运算.代码如下: #include "pch.h" #include <iostream> #include <functional> #include <map> #include <string> using namespace std; int add(int i

  • 基于Python编写一个微博抽奖小程序

    目录 导语 开发工具 环境搭建 先睹为快 原理简介 导语 带大家写个微博自动抽奖小程序吧,motivation和之前的B站自动抽奖小程序一样: 不想内卷了,整个B站全自动抽奖的小程序吧,万一不小心暴富了呢~ 废话不多说,让我们愉快地开始吧~ 开发工具 Python版本:3.7.8 相关模块: DecryptLogin模块: DecryptLoginExamples模块: 以及一些python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 先睹为快 首先,

随机推荐