偶尔在刷微博的时候,发现自己多了几个粉丝,满心激动,结果点开一看,都是“加我微信”“同城交友”的虚假粉丝,这些粉丝是从哪里来的呢,具体要怎么实现呢,我尝试用Python写了一个简易的批量制作虚假粉丝的小程序。


1  首先创建一个姓名的数据库

first_name.txt中保存一些常见的姓氏,last_name.txt中保存一些常见的名称,如图所示。

Windows中强烈建议不要使用记事本进行编辑,建议使用notepad或者sublime text等软件进行编辑,否则会出现意想不到的错误。

2  把数据库用文件读写到内存中

接着,我们把它读入到数组中 ,读完之后转换成元组tuple数据类型,防止被篡改。

import string
last_name_path = 'C:/Users/xiaokai/Documents/210 - Learning - 编程/Python练习/last_name.txt'
first_name_path = 'C:/Users/xiaokai/Documents/210 - Learning - 编程/Python练习/first_name.txt'
first_name = []
last_name1 = []
last_name2 = []# 开始读取姓氏
# 注意在open()函数中加入encoding = 'utf-8'
with open(first_name_path, 'r', encoding = 'utf-8') as f:# 每次读取一行for line in f.readlines():    # line.split('\n')看到回车就分词,分词结束返回的是一个数组# 所以line是这样的['刘','\0'],line[0]就是'刘'first_name.append(line.split('\n')[0]) first_name = tuple(first_name)    # 转换成元组
print(first_name)# 开始读取名字
with open(last_name_path, 'r', encoding = 'utf-8') as f:for line in f.readlines():# line.split('\n')是这样的:['凯','\n'],len()==1,说明名字只有一个字if (1 == len(line.split('\n')[0])):    last_name1.append(line.split('\n')[0])# line.split('\n')是这样的:['友朋','\n'],len()==2,说明名字有两个字elif (2 == len(line.split('\n')[0])):last_name2.append(line.split('\n')[0])last_name1 = tuple(last_name1)
last_name2 = tuple(last_name2)
print(last_name1)
print(last_name2)
print('='*70)    # 打印分隔符

运行效果如下:

('刘', '姚', '王', '周', '赵', '钱', '孙', '李')
('凯', '才', '龙', '飞', '超', '宇', '勇', '甜')
('友朋', '正强', '国庆', '俊男', '佳伟', '小虎', '世荣', '福建')
======================================================================

3  定义虚假用户的父类,自动生成姓名和性别

接着我们定义一个类,叫虚假用户,其中包含两个函数,一个函数生成名字,一个函数生成性别。生成名字的函数在姓氏和名称两个元组各自随机选择一个字符串连接在一起,生成性别的函数直接从男女中间随机选择,需要引入random模块。

# 定义一个父类
import random
class FakeUser:# num表示虚假用户的个数def fake_name(self, num, one_word = False, two_word = False):for i in range(0, num):if one_word:full_name = random.choice(first_name) + random.choice(last_name1)elif two_word:full_name = random.choice(first_name) + random.choice(last_name2)else:full_name = random.choice(first_name) + random.choice(last_name1 + last_name2)# full_name = random.choice(first_name) + random.choice(last_name)# i += 1yield full_namedef fake_gender(self, num):for i in range(0, num):gender = random.choice(['男','女'])yield gender

4  定义一个子类,继承父类FakeUser,自动生成粉丝数量

然后我们定义个子类继承父类,去描述粉丝数量:

# 定义一个继承FakeUser的子类SnsUser
class SnsUser(FakeUser):# 在定义的同时初始化,被调用的时候会传一个num进来def __init__(self, num):    SnsUser.amount = num# few和a_lot都是预先定义好的默认值,传递进来的符号会替换掉默认值def get_followers(self, few = True, a_lot = False):j = 0while (j <= SnsUser.amount):if few:# random.randrange(1,50)在1~50之间随机生成数followers = random.randrange(1,50)elif a_lot:followers = random.randrange(200,10000)j += 1yield followers

5  批量制造虚假粉丝

我们在程序中使用了循环loop和yield函数,可以批量生成大量的虚假粉丝,最后来到生成部分的实现:

num = int(input('请问你想创建多少个虚假账号?'))# 开始生成账号
users_a = SnsUser(num)# zip()函数,同时可以循环两个,或两个以上变量
for name,gender,followers in zip(users_a.fake_name(num),users_a.fake_gender(num),users_a.get_followers()):print('用户: {}\t的性别是:\t{}, 拥有{}粉丝'.format(name,gender,followers))

运行结果如下:

('刘', '姚', '王', '周', '赵', '钱', '孙', '李')
('凯', '才', '龙', '飞', '超', '宇', '勇', '甜')
('友朋', '正强', '国庆', '俊男', '佳伟', '小虎', '世荣', '福建')
======================================================================
请问你想创建多少个虚假账号?20
用户: 赵飞  的性别是:   女, 拥有49粉丝
用户: 刘俊男 的性别是:   女, 拥有23粉丝
用户: 赵飞  的性别是:   男, 拥有3粉丝
用户: 赵福建 的性别是:   男, 拥有30粉丝
用户: 钱超  的性别是:   男, 拥有32粉丝
用户: 孙龙  的性别是:   女, 拥有34粉丝
用户: 钱正强 的性别是:   女, 拥有3粉丝
用户: 赵佳伟 的性别是:   男, 拥有26粉丝
用户: 孙正强 的性别是:   女, 拥有48粉丝
用户: 刘正强 的性别是:   女, 拥有22粉丝
用户: 孙俊男 的性别是:   男, 拥有24粉丝
用户: 钱小虎 的性别是:   男, 拥有7粉丝
用户: 王甜  的性别是:   女, 拥有4粉丝
用户: 赵龙  的性别是:   女, 拥有39粉丝
用户: 刘世荣 的性别是:   男, 拥有46粉丝
用户: 赵福建 的性别是:   男, 拥有16粉丝
用户: 周甜  的性别是:   男, 拥有1粉丝
用户: 李正强 的性别是:   女, 拥有46粉丝
用户: 周龙  的性别是:   男, 拥有18粉丝
用户: 钱正强 的性别是:   女, 拥有26粉丝Process finished with exit code 0

6  完整代码附录

最后附上完整代码,如果没有运行成功,请检查两个txt目录是否正确,encoding = 'utf-8'是否加上:

import string
last_name_path = 'C:/Users/xiaokai/Documents/210 - Learning - 编程/Python练习/last_name.txt'
first_name_path = 'C:/Users/xiaokai/Documents/210 - Learning - 编程/Python练习/first_name.txt'
first_name = []
last_name1 = []
last_name2 = []# 开始读取姓氏
with open(first_name_path, 'r', encoding = 'utf-8') as f:for line in f.readlines():first_name.append(line.split('\n')[0])
first_name = tuple(first_name)
print(first_name)# 开始读取名字
with open(last_name_path, 'r', encoding = 'utf-8') as f:for line in f.readlines():if (1 == len(line.split('\n')[0])):last_name1.append(line.split('\n')[0])elif (2 == len(line.split('\n')[0])):last_name2.append(line.split('\n')[0])
last_name1 = tuple(last_name1)
last_name2 = tuple(last_name2)
print(last_name1)
print(last_name2)
print('='*70)# 定义一个父类
import random
class FakeUser:def fake_name(self, num, one_word = False, two_word = False):for i in range(0, num):if one_word:full_name = random.choice(first_name) + random.choice(last_name1)elif two_word:full_name = random.choice(first_name) + random.choice(last_name2)else:full_name = random.choice(first_name) + random.choice(last_name1 + last_name2)# full_name = random.choice(first_name) + random.choice(last_name)# i += 1yield full_namedef fake_gender(self, num):for i in range(0, num):gender = random.choice(['男','女'])yield genderclass SnsUser(FakeUser):def __init__(self, num):SnsUser.amount = numdef get_followers(self, few = True, a_lot = False):j = 0while (j <= SnsUser.amount):if few:followers = random.randrange(1,50)elif a_lot:followers = random.randrange(200,10000)j += 1yield followersnum = int(input('请问你想创建多少个虚假账号?'))
users_a = SnsUser(num)
for name,gender,followers in zip(users_a.fake_name(num),users_a.fake_gender(num),users_a.get_followers()):print('用户: {}\t的性别是:\t{}, 拥有{}粉丝'.format(name,gender,followers))

用Python和类的方法模拟新浪微博的批量虚假粉丝相关推荐

  1. python——class类和方法的用法详解

    因为一直不太清楚面向对象的类和方法的编程思想,所以特地补了一下python-class的知识,在这里记录和分享一下. 文章目录 类和方法的概念和实例 1.python类:`class` 2.类的构造方 ...

  2. Python自定义类调用方法

    自定义类调用方法:文件名字小写,类名字大写,从文件名导入类名就行,保证文件名字和要调用的文件在一个文件夹. 类保存在类文件里面,在新文件里面调用类 比如 from alien import Alien ...

  3. Python通过类的组合模拟街道红绿灯

    一,红绿灯揭示板案例思路 1. 创建Traffic_light红绿灯类 (1)静态属性 : <1> 绿灯时间,<2> 黄灯时间 , <3> 红灯时间, <4& ...

  4. python访问类的方法_python如何调用类方法

    Python类方法和静态方法都可以被类和类实例调用,类实例方法仅可以被类实例调用.类方法的隐含调用参数是类,而类实例方法的隐 含调用参数是类的实例,静态方法没有隐含调用参数. 要想调用类中的方法,首先 ...

  5. python引用类 魔法方法_Python 学习笔记 -- 类的魔法方法

    常用魔法方法 含义 __new__(cls[,...]) 1.__new__在对象被实例化时调用 2.第一个参数是类本身,其他参数传入__init__中 3.__new__如果没有返回值,则不会调用_ ...

  6. python final 类 和 方法

    final类: 参考连接 这里 class FinalMeta(type):def __new__(mcls, name, bases, dict):for base in bases:if isin ...

  7. python redis pipeline使用方法_python使用pipeline批量读写redis的方法

    用了很久的redis了.随着业务的要求越来越高.对redis的读写速度要求也越来越高.正好最近有个需求(需要在秒级取值1000+的数据),如果对于传统的单词取值,循环取值,消耗实在是大,有小伙伴可能考 ...

  8. Python基础项目实践之:面向对象方法模拟简单计算器

    Python课堂基础实践系列: Python基础项目实践之:学生信息管理系统 python基础项目实践之: 学生通讯录管理系统 Python基础项目实践之:面向对象方法模拟简单计算器 Python基础 ...

  9. python新式类c3算法_Python新式类的方法解析顺序MRO与Super

    新式类与经典类的方法解析顺序 MOR(方法解析顺序) 经典类:深度优先 DFS python3以前 新式类:广度优先 python2.2 新式类:广度优先的C3算法实现(拓扑排序) BFS pytho ...

最新文章

  1. python cx_oracle 有超时的设置吗_python cx_Oracle的基础使用方法(连接和增删改查)
  2. Adaboost原理与推导
  3. genymotion报错Your CPU is incompatible with virtualization technologies
  4. CSS中使用flex弹性布局实现上下左右垂直居中排列并设置子元素之间的间距
  5. 操作系统【四】分页存储管理
  6. php获取linux是几核的,linux下怎么查看机器cpu是几核的
  7. wx.checkjsapi 一直显示ok_Python下调用json.dumps中文显示问题及解决办法
  8. 【认证课程】NP理论复习之IS-IS
  9. miinCMP企业网站系统,正开发新浪SAE云应用版
  10. 什么是弱网测试?为什么要进行弱网测试?怎么进行弱网测试?
  11. 二路归并排序C++实现
  12. C语言中写保护的作用,C语言考试试题练习
  13. spring mvc 的ajax传参详解
  14. 安装oracle 11g,先决条件检查失败问题解决方法
  15. 手机显示DNS服务器异常,DNS服务器异常?
  16. SQLServer 2008以上误操作数据库恢复方法——日志尾部备份
  17. 推送系统从0到1(八):个性化精准推送的实现
  18. GOF23设计模式-创建型模式4-原型模式
  19. 如果想入手软路由我推荐友善官方出品的NanoPi-R2S和NanoPi-R5S
  20. 图形学基础|泛光(Bloom)

热门文章

  1. TabLayout修改文字间距
  2. KNN+MFCC实现方言识别
  3. python实现数据可视化软件_基于Python实现交互式数据可视化的工具
  4. git解决The authenticity of host ‘github.com (192.30.255.112)‘ can‘t be established问题
  5. openssl x509 证书命令
  6. 贝叶斯公式/朴素贝叶斯分类器及python自实现
  7. Python - 文本处理模块
  8. fluent并行 linux_Fluent17.2在基于Linux下PC集群的并行计算.pdf
  9. Unity 基础常用的脚本(一)
  10. 《当当网2017首页》