python定义一个学生类姓名,年龄,性别,成绩,你成绩评价,用python编程输入姓名和性别
本文主要介绍如何使用Python编写一个可以根据中文姓名猜测性别的界面小程序。文章中的样例代码解释的很详细,感兴趣的朋友可以看看。
00-1010简介一、准备工作1.1安装环境二。准备材料三。开始输入代码3.1导入模块3.2定义接口3.3预测性别3.4读取数据3.5附上完整源代码四。效果展示总结。
目录
以前在英语课上,老师会教一些他们知道是男生名字的名字,比如大卫,汤姆,杰瑞,然后安吉拉和索菲亚是女生的名字。当你以为所有的名字都可以区分男女的时候,你就错了~就像中国的“贾凡”这个词,你以为是男生,其实是女生。这种中性的名字
其实很多~为了避免宝宝的性别和事先选择的名字冲突,很多准妈妈都会给孩子取一个中性的名字。男女皆可用哈哈哈~两全其美。
每个女生都希望自己的名字好听,不想一直撞见男生的名字~想想一个男生和一个女生在一个班撞见对方的名字有多尴尬。如果名字稍微偏女生一点,叫这个名字的男生可能会犯尴尬癌,反之亦然!
当然,我会送你一句经典台词来解救你:“不被你为难的是别人!”
哈哈哈!言归正传:今天边肖教你写一个能根据中文名猜出性别的界面小程序~
导语
本文是一个基于Pyqt5的界面小程序~
一、准备环节
Python3,Pycharm,pyqt5,还有一些自带的滴滴。
设置:pip install-I https://pypi.douban.com/simple/模块名称
1.1 安装环境
素材是界面小程序的头像logo和我之前抓取准备的一个百家姓的csv数据。
二、准备素材
三、开始敲代码
导入操作系统
导入csv
导入系统
来自PyQt5。QtGui导入*
来自PyQt5。QtWidgets导入*
3.1 导入模块
Self.setWindowTitle(百家争鸣——猜名字小程序)
self . setwindowicon(QIcon( data/3 . png ))
self.setFixedSize(400,200)
Self.name_label=QLabel(中文名3360 )
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 . add widget(self . name _ label,0,0)
self . grid . add widget(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姓名测性别的资料请关注盛行IT软件开发工作室其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。