中企动力 > 头条 > python源码是什么

网站性能检测评分

注:本网站页面html检测工具扫描网站中存在的基本问题,仅供参考。

python源码是什么

给自己辛苦编写的Python源代码带个保护套,避免泄露! 企业视频课程

img

三月

关注

Python的创始人为Guido van Rossum在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。

免费、开源的Python是FLOSS(自由/开放源码软件)之一。可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。这是为什么Python如此优秀的原因之一,它是由一群希望看到一个更加优秀的Python的人创造并经常改进着的。

所以现在的Python开源社区这么多,学习资料也有许多。但是开发商业软件,代码加密保护就是必须的了。

道理都懂,就不解释了。那么如何把Python代码进行加密呢?

相信大家一定对pyc后缀的文件不陌生,其实这类文件就是由py后缀的文件经过编译后生成的二进制文件,以此影藏源代码。pyc文件拥有更快的加载速度,执行速度没有区别。

pyc是一种跨平台的字节码,pyc的内容与python的版本息息相关,不同版本编译后的pyc文件也不同,例如2.4编译的pyc文件,2.5版本的python就不能够运行。

要实现代码加密这个操作就必须要用到py_compile模块!

生成单个pyc文件

批量生成pyc文件

Python源码剖析之整数对象 互联网视频课程

img

杰克

关注

今天在微信公众号看到一个案例,感觉确实不错,自己试了一下。没毛病。好了,不多bb。分享给各位。

但是这篇文章分享之前我还是要推荐下我自己的python群:595266089,不管你是小白还是大牛,小编我都挺欢迎,不定期分享干货,包括我自己整理的一份2017最新的python资料和零基础入门教程,欢迎初学和进阶中的小伙伴。

在《Python源码剖析》中,Python的版本为2.5,而在Python3中,前面提到,int类型的底层实现是Python2中的long类型。所以,我会在本章中,先介绍Python2源码中int类型的实现,再在最后介绍一下Python3.6中int(也就是以前的long)在底层的实现。之所以这样做的原因后面会解释。

在此之前,我们先来看一个有趣但没什么卵用的现象:

想知道为什么?看完这章就知道了。

初识PyIntObject对象

Python中对整数的概念的实现是通过PyIntObject来完成的。我们曾经说过它是一个定长对象,与之相对的还有变长对象。这样的分法对我们理解Python源码有帮助,但在Python语言的层面上,我们通常还使用一种二分法,即根据对象维护数据的可变性将对象分为可变对象(mutable)和不可变对象(immutable)。Python2中的PyIntObject是一个定长对象,而PyLongObject是一个变长对象,但它们都是不可变对象。也就是说,一旦创建了它们之后,就不能改变它们的值了。

我们来看一下在Python2.7中,PyIntObject的实现:

Python2中的整数对象PyIntObject实际上就是对C原生类型long的一个包装。

我们知道关于一个Python对象的大多数元信息是保存在它的类型对象中的,对于PyIntObject是PyInt_Type:

PyInt_Type中保存了关于PyIntObject的许多元信息,它定义了一个PyIntObject支持的操作,占用的内存大小等等。其中重要的内容我们会在下面叙述。

PyIntObject的创建和维护

创建对象的途径

在intobject.h中,Python提供了几种创建PyIntObject的途径:

事实上,前两种方法都是先将字符串转换为浮点数,再调用PyInt_FromFloat来实现的。

小整数对象

我们来思考一下,在Python内部,整数对象是如此广泛地被使用,尤其是那些比较小的整数。短短几秒之间,我们可能就要用的它们成千上万次,如果我们在创建它们的时候使用malloc来请求分配内存,删除它们时再调用free来释放内存。显然,这样的性能水平是不可能达到我们的要求的,而且也会造成极大的不必要的浪费。

于是,在Python内部,对于小整数使用了对象池技术。

我们可以看出,在Python2.7中,“小整数”的定义是[-5,256],而这个指向一个整数对象数组的指针small_ints就是这个对象池机制的核心。如果我们想要重新定义“小整数”怎么办?简单,我们可以修改源代码并重新编译。

对于小整数对象,Python直接把它们缓存在小整数对象池中,用于共享。那么大整数呢?肯定不可能都缓存在内存中,但是说不定某些大整数在某个时刻会变得十分常用,不过谁也不知道究竟是哪个数字。这时候,Python选择了另一种策略。

大整数对象

Python的设计者的策略是:对于小整数对象,直接把它们全部缓存在对象池中。对于其他整数,Python运行环境将会提供一块内存空间,这块内存空间由这些对象轮流使用。

在Python中,有一个PyIntBlock结构,它被用来实现这个机制。

PyIntBlock的单向列表通过block_list维护,每一个block中都维护了一个PyIntObject数组——objects,这就是真正用于存储被缓存的PyIntObject对象的内存。我们可以想象,在运行的某个时刻,这块内存中一定有一部分被使用,而有一部分是空闲的。这些空闲状态的内存需要被组织起来,以供Python在需要存储新的整数对象时使用。Python使用一个单向链表来管理全部block的objects中的空闲内存,这个链表的表头就是free_list。在一开始,block_list和free_list都指向NULL。

添加和删除

我们来看一下PyIntObject是如何从无到有地产生,又是如何消失的。

使用小整数对象池

如果NSMALLNEGINTS + NSMALLPOSINTS >0成立,说明小整数对象池机制被激活了,然后Python会检查传入的long值是否是小整数。如果是,就直接返回对象池中的小整数对象就可以了。如果不是,那么会转向通用整数对象池。Python会在block的objects中寻找一块可用于存储新的PyIntObject的内存,这个任务需要free_list来完成。

创建通用整数对象池

显然,当首次调用PyInt_FromLong时,free_list必定为NULL,这时Python会调用fill_free_list创建新的block。在Python运行期间,只要所有block的空闲内存被使用完了,也就是free_list指向NULL,那么下一次调用PyInt_FromLong时就会再次激活对fill_free_list的调用。

在这个函数中,会首先申请一个新的PyIntBlock结构,这时block中的objects还只是一个PyIntObject对象数组。接下来,Python将objects中的所有PyIntObject对象通过指针依次连接起来从而将数组转变成一个单向链表。z在整个链接过程中,Python使用PyObject的ob_type指针作为连接指针。当链表转换完成后,free_list也就出现在出现在它该出现的位置了。从free_list开始,沿着ob_type指针,就可以遍历刚刚创建的所有为PyIntObject准备的内存了。

说完了PyIntObject的创建,我们再来看看它的删除。在Python中,当一个对象引用计数变为0 时,Python就会着手将这个对象销毁。不同类型的对象在销毁时执行的动作也是不同的,其在与对象对应的类型对象中被定义——也就是tp_dealloc。

首先,Python会检查传入的对象是否真的是一个PyIntObject对象,如果是的话,那么将其链入free_list所维护的自由内存链表中,以供将来别的PyIntObject使用。如果只是整数对象的派生类型,那么简单地调用派生类型中指定的tp_free。

使用通用整数对象池

在Python运行的过程中,会不只有一个PyIntBlock存在于同一个链表中,但是它们维护的objects却是分离的,之间没有联系。我们设想一下,有两个PyIntBlock对象,PyIntBlock1和PyIntBlock2,前者已经被填满,后者还有空闲的空间。所以此时free_list指向的是PyIntBlock2.objects中的空闲的内存块。当前者维护的objects中有PyIntObject被删除了,这时前者出现了一块空闲的内存。那么下次创建新的PyIntObject对象时应该使用这块空闲内存。否则就意味着所有的内存只能使用一次,这和内存泄漏没什么两样。

怎么才能将空闲的内存再交由Python使用呢?关键就在于前面我们分析的PyIntObject的删除操作,通过int_dealloc中的操作,所有的PyIntBlock的objects中的空闲内存块都被链接在一起了。它们形成了一个单向链表,表头正是free_list。

小整数对象池的初始化

现在关于Python的整数对象机制还剩最后一个问题。小整数对象池是在什么时候被初始化的呢?

我们可以看到,通过_PyInt_Init的调用,Python创建了这些小整数对象,然后它们就会在整个运行周期中一直存在,直至解释器毁灭。

Python3中int的实现

int即long

我们在之前提到,在Python3中int底层实现就是以前Python2中的long类型。空口无凭,我们来看代码:

我们可以看到,PyLong_Type类型对象的tp_name就是int,也就是说,在Python内部,它就是int类型。

之所以我们在一开始不介绍Python3中的整数实现,是因为在Python3中没有了通用的整数对象池(至少我没有找到),不过还保留着小整数对象池。同时对于那些比较小也就是对于之前Python2中的long类型大材小用的整数来说,也有一个更加快速且节省资源的创建方式。

而且我还发现了一个彩蛋,就是在longobject.c中第二行的注释:

哈哈哈,官方吐槽,最为致命。而且这个注释在Python2.7版本中也有,看来是一段陈年往事。

如何抓取这些网站数据?python源码大全,包括微信,知乎。QQ,豆瓣,天猫京东等 流量视频课程

img

Odele

关注

WechatSogou[1]- 微信公众号爬虫。基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典。[1]: https://github/Chyroc/WechatSogou

DouBanSpider[2]- 豆瓣读书爬虫。可以爬下豆瓣读书标签下的所有图书,按评分排名依次存储,存储到Excel中,可方便大家筛选搜罗,比如筛选评价人数>1000的高分书籍;可依据不同的主题存储到Excel不同的Sheet ,采用User Agent伪装为浏览器进行爬取,并加入随机延时来更好的模仿浏览器行为,避免爬虫被封。[2]: https://github/lanbing510/DouBanSpider

zhihu_spider[3]- 知乎爬虫。此项目的功能是爬取知乎用户信息以及人际拓扑关系,爬虫框架使用scrapy,数据存储使用mongodb。[3]: https://github/LiuRoy/zhihu_spider

bilibili-user[4]- Bilibili用户爬虫。总数据数:20119918,抓取字段:用户id,昵称,性别,头像,等级,经验值,粉丝数,生日,地址,注册时间,签名,等级与经验值等。抓取之后生成B站用户数据报告。[4]: https://github/airingursb/bilibili-user

SinaSpider[5]- 新浪微博爬虫。主要爬取新浪微博用户的个人信息、微博信息、粉丝和关注。代码获取新浪微博Cookie进行登录,可通过多账号登录来防止新浪的反扒。主要使用 scrapy 爬虫框架。[5]: https://github/LiuXingMing/SinaSpider

distribute_crawler[6]- 小说下载分布式爬虫。使用scrapy,redis, mongodb,graphite实现的一个分布式网络爬虫,底层存储mongodb集群,分布式使用redis实现,爬虫状态显示使用graphite实现,主要针对一个小说站点。[6]: https://github/gnemoug/distribute_crawler

CnkiSpider[7]- 中国知网爬虫。设置检索条件后,执行src/CnkiSpider.py抓取数据,抓取数据存储在/data目录下,每个数据文件的第一行为字段名称。[7]: https://github/yanzhou/CnkiSpider

LianJiaSpider[8]- 链家网爬虫。爬取北京地区链家历年二手房成交记录。涵盖链家爬虫一文的全部代码,包括链家模拟登录代码。[8]: https://github/lanbing510/LianJiaSpider

scrapy_jingdong[9]- 京东爬虫。基于scrapy的京东网站爬虫,保存格式为csv。[9]: https://github/taizilongxu/scrapy_jingdong

QQ-Groups-Spider[10]- QQ 群爬虫。批量抓取 QQ 群信息,包括群名称、群号、群人数、群主、群简介等内容,最终生成 XLS(X) / CSV 结果文件。[10]: https://github/caspartse/QQ-Groups-Spider

wooyun_public[11]-乌云爬虫。 乌云公开漏洞、知识库爬虫和搜索。全部公开漏洞的列表和每个漏洞的文本内容存在mongodb中,大概约2G内容;如果整站爬全部文本和图片作为离线查询,大概需要10G空间、2小时(10M电信带宽);爬取全部知识库,总共约500M空间。漏洞搜索使用了Flask作为web server,bootstrap作为前端。[11]: https://github/hanc00l/wooyun_public

QunarSpider[12]- 去哪儿网爬虫。 网络爬虫之Selenium使用代理登陆:爬取去哪儿网站,使用selenium模拟浏览器登陆,获取翻页操作。代理可以存入一个文件,程序读取并使用。支持多进程抓取。[12]: https://github/lining0806/QunarSpider

findtrip[13]- 机票爬虫(去哪儿和携程网)。Findtrip是一个基于Scrapy的机票爬虫,目前整合了国内两大机票网站(去哪儿 + 携程)。[13]: https://github/fankcoder/findtrip

163spider[14] - 基于requests、MySQLdb、torndb的网易客户端内容爬虫。[14]: https://github/leyle/163spider

doubanspiders[15]- 豆瓣电影、书籍、小组、相册、东西等爬虫集。[15]: https://github/dontcontactme/doubanspiders

QQSpider[16]- QQ空间爬虫,包括日志、说说、个人信息等,一天可抓取 400 万条数据。[16]:https://github/LiuXingMing/QQSpider

baidu-music-spider[17]- 百度mp3全站爬虫,使用redis支持断点续传。[17]: https://github/Shu-Ji/baidu-music-spider

tbcrawler[18]- 淘宝和天猫的爬虫,可以根据搜索关键词,物品id来抓去页面的信息,数据存储在mongodb。[18]: https://github/pakoo/tbcrawler

stockholm[19]- 一个股票数据(沪深)爬虫和选股策略测试框架。根据选定的日期范围抓取所有沪深两市股票的行情数据。支持使用表达式定义选股策略。支持多线程处理。保存数据到JSON文件、CSV文件。[19]https://github/benitoro/stockholm

Python大牛分分钟成功爬取电影天堂网站!厉害了!「附源码」 公司视频课程

img

安天德

关注

准备工具:requests与xpath

思路:获取爬取入口,后面的工作就容易多了。我通过测试发现这几个栏目除了页面的 url地址不一样之外,提取信息的xpath路径是一样的!所以,我们把五个栏目当做一个类,然后该类进行遍历爬取!

2.2爬虫构架的设计

2.3代码

#截止到2017-08-08,最新电影一共才有 164个页面LASTEST_MOIVE_TOTAL_SUM = 6 #164#请求网络线程总数,线程不要调太好,不然会返回很多 400THREAD_SUM = 5def startSpider: #实例化对象 #获取【最新电影】有多少个页面 LASTEST_MOIVE_TOTAL_SUM = dytt_Lastest.getMaxsize print('【最新电影】一共 ' + str(LASTEST_MOIVE_TOTAL_SUM) + '有个页面') dyttlastest = dytt_Lastest(LASTEST_MOIVE_TOTAL_SUM) floorlist = dyttlastest.getPageUrlList floorQueue = TaskQueue.getFloorQueue for item in floorlist: floorQueue.put(item, 3) # print(floorQueue.qsize) for i in range(THREAD_SUM): workthread = FloorWorkThread(floorQueue, i) workthread.start while True: if TaskQueue.isFloorQueueEmpty: break else: pass

源码:

免费干货分享!Python爬虫源代码-pycharm激活码-几十套小程序源码 小程序视频课程

img

王惮

关注

Spider又叫WebCrawler或者Robot,是一个沿着链接漫游Web 文档集合的程序。它一般驻留在服务器上,通过给定的一些URL,利用HTTP等标准协议读取相应文档,然后以文档中包括的所有未访问过的URL作为新的起点,继续进行漫游,直到没有满足条件的新URL为止。WebCrawler的主要功能是自动从Internet上的各Web 站点抓取Web文档并从该Web文档中提取一些信息来描述该Web文档,为搜索引擎站点的数据库服务器追加和更新数据提供原始数据,这些数据包括标题、长度、文件建立时间、HTML文件中的各种链接数目等。

...

作为一种便捷地收集网上信息并从中抽取出可用信息的方式,网络爬虫技术变得越来越有用。使用Python这样的简单编程语言,你可以使用少量编程技能就可以爬取复杂的网站。

《用Python写网络爬虫》作为使用Python来爬取网络数据的杰出指南,讲解了从静态页面爬取数据的方法以及使用缓存来管理服务器负载的方法。此外,本书还介绍了如何使用AJAX URL和Firebug扩展来爬取数据,以及有关爬取技术的更多真相,比如使用浏览器渲染、管理cookie、通过提交表单从受验证码保护的复杂网站中抽取数据等。本书使用Scrapy创建了一个高级网络爬虫,并对一些真实的网站进行了爬取。

。。。

首先从互联网页面中精心选择一部分网页,以这些网页的链接地址作为种子URL,将这些种子URL放入待抓取URL队列中,爬虫从待抓取URL队列依次读取,并将URL通过DNS解析,把链接地址转换为网站服务器对应的IP地址。

然后将其和网页相对路径名称交给网页下载器,网页下载器负责页面内容的下载。对于下载到本地的网页,一方面将其存储到页面库中,等待建立索引等后续处理;另一方面将下载网页的URL放入已抓取URL队列中,这个队列记载了爬虫系统已经下载过的网页URL,以避免网页的重复抓取。对于刚下载的网页,从中抽取出所包含的所有链接信息,并在已抓取URL队列中检查,如果发现链接还没有被抓取过,则将这个URL放入待抓取URL队列末尾,在之后的抓取调度中会下载这个URL对应的网页。如此这般,形成循环,直到待抓取URL队列为审,这代表着爬虫系统已将能够抓取的网页尽数抓完,此时完成了一轮完整的抓取过程。

Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。

Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。

Scrap,是碎片的意思,这个Python的爬虫框架叫Scrapy。

小刮刮是一个为遍历爬行网站、分解获取数据而设计的应用程序框架,它可以应用在广泛领域:数据挖掘、信息处理和或者历史片(历史记录)打包等等

Even though Scrapy was originally designed for screen scraping (more precisely, web scraping), it can also be used to extract data using APIs (such as Amazon Associates Web Services) or as a general purpose web crawler.

尽管小刮刮原本是设计用来屏幕抓取(更精确的说,是网络抓取)的目的,但它也可以用来访问API来提取数据,比如Amazon的AWS或者用来当作通常目的应用的网络蜘蛛

The purpose of this document is to introduce you to the concepts behind Scrapy so you can get an idea of how it works and decide if Scrapy is what you need.

如何开始

当你准备启动一个项目时,可以从这个教程开始

折叠选择网站

选择一个网站

如果你需要从某个网站提取一些信息,但是网站不提供API或者其他可编程的访问机制,那么小刮刮可以帮助你(提取信息)

让我们看下Mininova网站,需要提取的网址,名称,描述和torrent文件的大小、添加日期

下面这个列表是所有今天新增的torrents文件的页面:参考扩展阅读1

备注:torrent是洪流的意思,这里指bit torrent,比特洪流,就是我们常说的BT文件

折叠定义数据

定义你要抓取的数据

第一件事情就是定义你要抓取的数据,在小刮刮这个是通过定义Scrapy Items来实现的(本例是BT文件)

这就是要定义的Item

折叠撰写蜘蛛

撰写一个蜘蛛来抓取数据

Urllib 模块提供了读取web页面数据的接口,我们可以像读取本地文件一样读取www和ftp上的数据。首先,我们定义了一个getHtml()函数:

urllib.urlopen()方法用于打开一个URL地址。

read()方法用于读取URL上的数据,向getHtml()函数传递一个网址,并把整个页面下载下来。执行程序就会把整个网页打印输出。

下一步是写一个指定起始网址的蜘蛛(参考扩展阅读1),包含follow链接规则和数据提取规则

如果你看一眼页面内容,就会发现所有的torrent网址都是类似:参考扩展阅读2的样子,其中Number是一个整数,我们将用正则表达式,例如/tor/d+.来提取规则

我们将使用Xpath,从页面的HTML Source里面选取要要抽取的数据,选取众多数据页面中的一个,例如参考阅读3

根据页面HTML 源码,建立XPath,选取:torrent name, description , size,这些数据。

运行蜘蛛来抓取数据

最后,我们运行蜘蛛来爬取这个网站,输出为json格式scraped_data.json

scrapy crawl 参考阅读4 -o scraped_data.json -t json

这个使用了feed exports,来生成json格式,当然,你可以很简单的更改输出格式为csv,xml,或者存储在后端(ftp或者Amazon S3)

你也可以写一段item pipeline,把数据直接写入数据库,很简单

Review一下抓取的数据

查看一下数据:scraped_data.json,内容大致如下

[{"url": "参考阅读2", "name": ["Home[2009][Eng]XviD-ovd"], "description": ["HOME - a documentary film by ..."], "size": ["699.69 megabyte"]}, # ... other items ... ]

关注一下数据,你会发现,所有字段都是lists(除了url是直接赋值),这是因为selectors返回的就是lists格式,如果你想存储单独数据或者在数据上增加一些解释或者清洗,可以使用Item Loaders

折叠更多

你也看到了如何使用小刮刮从一个网站提取和存储数据,但,这只是表象,实际上,小刮刮提供了许多强大的特性,让它更容易和高效的抓取:

1>内建 selecting and extracting,支持从HTML,XML提取数据

2>内建Item Loaders,支持数据清洗和过滤消毒,使用预定义的一个过滤器集合,可以在所有蜘蛛间公用

3>内建多格式generating feed exports支持(JSON, CSV, XML),可以在后端存储为多种方式(FTP, S3, local filesystem)

4>针对抓取对象,具有自动图像(或者任何其他媒体)下载automatically downloading images的管道线

5>支持扩展抓取extending Scrap,使用signals来自定义插入函数或者定义好的API(middlewares, extensions, and pipelines)

所有文件已经打包,直接提取。

至于所谓的关注问题,随大家的便,想关注加就关注。我不需要说关注后才给大家连接,现在的头条根本不能赚钱,除非有几十万的粉丝。

我只是分享一些自认为有用的干货,满足一下知识传播者的成就感。

—————————————————————————————————————

欢迎大家一起留言讨论和交流,谢谢!

python实现简单的用户注册程序(含源代码) 推广视频课程

img

徐盼芙

关注

1.系统实现要求

1.实现用户手机注册,且对手机号码输入进行校对2. 实现用户密码输入且校对。控制在8位密码。3. 实现用户重复密码输入校验。4. 将用户成功注册的账号和密码存储到文本中。待下次登陆账号使用。

模仿的客户端注册程序

2.系统源代码

# coding=utf-8mobile_str = raw_input("请输入您要注册的手机号码")try: mobile_num = int(mobile_str)except ValueError: print '您好,你输入的手机有非数字字符,请重新输入'else: if (len(mobile_str) != 11): print '您的手机号码位数不正确' else: print '您的手机正确,正在获取验证码' password_str_0 = raw_input("请输入您的密码") try: password_num_0 = int(password_str_0) except ValueError: print '您好,你输入的密码不是纯数字,请重新输入' else: if (len(password_str_0) != 8): print '您的密码位数不正确' else: password_str_1 = raw_input("请再次输入您的密码") try: password_num_1 = int(password_str_1) except ValueError: print '您好,你输入的密码不是纯数字,请重新输入' else: if (password_num_0 != password_num_1): print '您好,你输入的密码与前一次不同,请重新输入' else: print '您已成功注册' fo = open("foo.txt", "wb") fo.write('用户账号:' + mobile_str + ' ' + '用户密码:' + password_str_0);

3.系统运行结果输出

运行结果截图

python实现简单的用户注册程序(含源代码) 流量视频课程

img

天天

关注

1.系统实现要求

1.实现用户手机注册,且对手机号码输入进行校对2. 实现用户密码输入且校对。控制在8位密码。3. 实现用户重复密码输入校验。4. 将用户成功注册的账号和密码存储到文本中。待下次登陆账号使用。

模仿的客户端注册程序

2.系统源代码

# coding=utf-8mobile_str = raw_input("请输入您要注册的手机号码")try: mobile_num = int(mobile_str)except ValueError: print '您好,你输入的手机有非数字字符,请重新输入'else: if (len(mobile_str) != 11): print '您的手机号码位数不正确' else: print '您的手机正确,正在获取验证码' password_str_0 = raw_input("请输入您的密码") try: password_num_0 = int(password_str_0) except ValueError: print '您好,你输入的密码不是纯数字,请重新输入' else: if (len(password_str_0) != 8): print '您的密码位数不正确' else: password_str_1 = raw_input("请再次输入您的密码") try: password_num_1 = int(password_str_1) except ValueError: print '您好,你输入的密码不是纯数字,请重新输入' else: if (password_num_0 != password_num_1): print '您好,你输入的密码与前一次不同,请重新输入' else: print '您已成功注册' fo = open("foo.txt", "wb") fo.write('用户账号:' + mobile_str + ' ' + '用户密码:' + password_str_0);

3.系统运行结果输出

运行结果截图

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP