python定义一个学生类姓名,年龄,性别,成绩,你成绩评价,用python编程输入姓名和性别

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: