简单的python
① 干货分享!python基础教程
1.解释Python
_编译语言_是指使用编译器事先将源代码编译为可执行指令的_语言_(例如Java)。以后,这些合规指令可以由运行时环境执行。
_解释语言_是指不应用中间编译步骤并且可以将源代码直接提供给运行时环境的语言。在此,_源代码到机器代码的转换_是在程序执行的同时发生的。意味着,任何用python编写的源代码都可以直接执行而无需编译。
2. Python很简单
Python主要是为了强调代码的可读性而开发的,它的语法允许程序员用更少的代码行来表达概念。
根据语言中可用关键字的简单性粗略衡量,Python 3有33个关键字,Python 2有31个关键字。相比之下,C ++有62个关键字,Java有53个关键字。Python语法提供了一种易于学习和易于阅读的简洁结构。
3.与其他语言比较
· Python使用_换行符来完成一条语句_。在其他编程语言中,我们经常使用分号或括号。
· Python依靠缩进(使用空格)来定义范围,例如循环,函数和类。为此,其他编程语言通常使用花括号。
4.用途和好处
Python可用于快速原型制作或可用于生产的软件开发。以下列表列出了python的一些流行用法。
· Python有一个庞大而健壮的标准库,以及许多用于开发应用程序的有用模块。这些模块可以帮助我们添加所需的功能,而无需编写更多代码。
· 由于python是一种解释型高级编程语言,它使我们无需修改即可在多个平台上运行相同的代码。
· Python可用于以程序样式,面向对象样式或功能样式编写应用程序。
· Python具有分析数据和可视化等功能,可帮助创建用于_大数据分析,机器学习和人工智能的_自定义解决方案。
· Python还用于机器人技术,网页抓取,脚本编写,人脸检测,颜色检测和3D应用程序中。我们可以使用python构建基于控制台的应用程序,基于音频的应用程序,基于视频的应用程序,企业应用程序等。
以上就是关于Python基础教程的相关分享,希望对大家有所帮助,想要了解更多相关内容,欢迎及时关注本平台!
② 如何入门 Python 爬虫
“入门”是良好的动机,但是可能作用缓慢。如果你手里或者脑子里有一个项目,那么实践起来你会被目标驱动,而不会像学习模块一样慢慢学习。
另外如果说知识体系里的每一个知识点是图里的点,依赖关系是边的话,那么这个图一定不是一个有向无环图。因为学习A的经验可以帮助你学习B。因此,你不需要学习怎么样“入门”,因为这样的“入门”点根本不存在!你需要学习的是怎么样做一个比较大的东西,在这个过程中,你会很快地学会需要学会的东西的。当然,你可以争论说需要先懂python,不然怎么学会python做爬虫呢?但是事实上,你完全可以在做这个爬虫的过程中学习python :D看到前面很多答案都讲的“术”——用什么软件怎么爬,那我就讲讲“道”和“术”吧——爬虫怎么工作以及怎么在python实现。
先长话短说总结一下。你需要学习:
基本的爬虫工作原理
基本的http抓取工具,scrapy
Bloom Filter: Bloom
如果需要大规模网页抓取,你需要学习分布式爬虫的概念。其实没那么玄乎,你只要学会怎样维护一个所有集群机器能够有效分享的分布式队列就好。最简单的实现是python-rq: https: //github.com /nvie/rqrq和Scrapy的结合:darkrho/scrapy-redis · GitHub后续处理,网页析取(grangier/python-goose · GitHub),存储(Mongodb)以下是短话长说。说说当初写的一个集群爬下整个豆瓣的经验吧。
1)首先你要明白爬虫怎样工作
想象你是一只蜘蛛,现在你被放到了互联“网”上。那么,你需要把所有的网页都看一遍。怎么办呢?没问题呀,你就随便从某个地方开始,比如说人民日报的首页,这个叫initial pages,用$表示吧。
在人民日报的首页,你看到那个页面引向的各种链接。于是你很开心地从爬到了“国内新闻”那个页面。太好了,这样你就已经爬完了俩页面(首页和国内新闻)!暂且不用管爬下来的页面怎么处理的,你就想象你把这个页面完完整整抄成了个html放到了你身上。
突然你发现, 在国内新闻这个页面上,有一个链接链回“首页”。作为一只聪明的蜘蛛,你肯定知道你不用爬回去的吧,因为你已经看过了啊。所以,你需要用你的脑子,存下你已经看过的页面地址。这样,每次看到一个可能需要爬的新链接,你就先查查你脑子里是不是已经去过这个页面地址。如果去过,那就别去了。
好的,理论上如果所有的页面可以从initial page达到的话,那么可以证明你一定可以爬完所有的网页。
那么在python里怎么实现呢?很简单:
Python
import Queue
initial_page = "http:/ /www. renminribao. com"url_queue = Queue.Queue()seen = set()
seen.insert(initial_page)
url_queue.put(initial_page)
while(True): #一直进行直到海枯石烂
if url_queue.size()>0:
current_url = url_queue.get() #拿出队例中第一个的urlstore(current_url) #把这个url代表的网页存储好for next_url in extract_urls(current_url): #提取把这个url里链向的urlif next_url not in seen:
seen.put(next_url)
url_queue.put(next_url)
else:
break
import Queue
initial_page = "http:/ / www.renminribao .com"url_queue = Queue.Queue()seen = set()
seen.insert(initial_page)
url_queue.put(initial_page)
while(True): #一直进行直到海枯石烂
if url_queue.size()>0:
current_url = url_queue.get() #拿出队例中第一个的urlstore(current_url) #把这个url代表的网页存储好for next_url in extract_urls(current_url): #提取把这个url里链向的urlif next_url not in seen:
seen.put(next_url)
url_queue.put(next_url)
else:
break
写得已经很伪代码了。
所有的爬虫的backbone都在这里,下面分析一下为什么爬虫事实上是个非常复杂的东西——搜索引擎公司通常有一整个团队来维护和开发。
2)效率
如果你直接加工一下上面的代码直接运行的话,你需要一整年才能爬下整个豆瓣的内容。更别说Google这样的搜索引擎需要爬下全网的内容了。
问题出在哪呢?需要爬的网页实在太多太多了,而上面的代码太慢太慢了。设想全网有N个网站,那么分析一下判重的复杂度就是N*log(N),因为所有网页要遍历一次,而每次判重用set的话需要log(N)的复杂度。OK,OK,我知道python的set实现是hash——不过这样还是太慢了,至少内存使用效率不高。
通常的判重做法是怎样呢?Bloom Filter。简单讲它仍然是一种hash的方法,但是它的特点是,它可以使用固定的内存(不随url的数量而增长)以O(1)的效率判定url是否已经在set中。可惜天下没有白吃的午餐,它的唯一问题在于,如果这个url不在set中,BF可以100%确定这个url没有看过。但是如果这个url在set中,它会告诉你:这个url应该已经出现过,不过我有2%的不确定性。注意这里的不确定性在你分配的内存足够大的时候,可以变得很小很少。一个简单的教程:Bloom Filters by Example注意到这个特点,url如果被看过,那么可能以小概率重复看一看(没关系,多看看不会累死)。但是如果没被看过,一定会被看一下(这个很重要,不然我们就要漏掉一些网页了!)。 [IMPORTANT: 此段有问题,请暂时略过]
好,现在已经接近处理判重最快的方法了。另外一个瓶颈——你只有一台机器。不管你的带宽有多大,只要你的机器下载网页的速度是瓶颈的话,那么你只有加快这个速度。用一台机子不够的话——用很多台吧!当然,我们假设每台机子都已经进了最大的效率——使用多线程(python的话,多进程吧)。
3)集群化抓取
爬取豆瓣的时候,我总共用了100多台机器昼夜不停地运行了一个月。想象如果只用一台机子你就得运行100个月了…那么,假设你现在有100台机器可以用,怎么用python实现一个分布式的爬取算法呢?
我们把这100台中的99台运算能力较小的机器叫作slave,另外一台较大的机器叫作master,那么回顾上面代码中的url_queue,如果我们能把这个queue放到这台master机器上,所有的slave都可以通过网络跟master联通,每当一个slave完成下载一个网页,就向master请求一个新的网页来抓取。而每次slave新抓到一个网页,就把这个网页上所有的链接送到master的queue里去。同样,bloom filter也放到master上,但是现在master只发送确定没有被访问过的url给slave。Bloom Filter放到master的内存里,而被访问过的url放到运行在master上的Redis里,这样保证所有操作都是O(1)。(至少平摊是O(1),Redis的访问效率见:LINSERT – Redis)考虑如何用python实现:
在各台slave上装好scrapy,那么各台机子就变成了一台有抓取能力的slave,在master上装好Redis和rq用作分布式队列。
代码于是写成:
Python
#slave.py
current_url = request_from_master()
to_send = []
for next_url in extract_urls(current_url):
to_send.append(next_url)
store(current_url);
send_to_master(to_send)
#master.py
distributed_queue = DistributedQueue()
bf = BloomFilter()
initial_pages = "www. renmingribao .com"
while(True):
if request == 'GET':
if distributed_queue.size()>0:
send(distributed_queue.get())
else:
break
elif request == 'POST':
bf.put(request.url)
#slave.py
current_url = request_from_master()
to_send = []
for next_url in extract_urls(current_url):
to_send.append(next_url)
store(current_url);
send_to_master(to_send)
#master.py
distributed_queue = DistributedQueue()
bf = BloomFilter()
initial_pages = "www. renmingribao .com"
while(True):
if request == 'GET':
if distributed_queue.size()>0:
send(distributed_queue.get())
else:
break
elif request == 'POST':
bf.put(request.url)
好的,其实你能想到,有人已经给你写好了你需要的:darkrho/scrapy-redis · GitHub4)展望及后处理虽然上面用很多“简单”,但是真正要实现一个商业规模可用的爬虫并不是一件容易的事。上面的代码用来爬一个整体的网站几乎没有太大的问题。
但是如果附加上你需要这些后续处理,比如
有效地存储(数据库应该怎样安排)
有效地判重(这里指网页判重,咱可不想把人民日报和抄袭它的大民日报都爬一遍)有效地信息抽取(比如怎么样抽取出网页上所有的地址抽取出来,“朝阳区奋进路中华道”),搜索引擎通常不需要存储所有的信息,比如图片我存来干嘛…及时更新(预测这个网页多久会更新一次)如你所想,这里每一个点都可以供很多研究者十数年的研究。虽然如此,“路漫漫其修远兮,吾将上下而求索”。
③ python鐢╳hile寰鐜姹俷镄勯桩涔
浠ヤ笅鏄涓涓绠鍗旷殑Python绋嫔簭锛岀敤浜庤$畻7镄勯桩涔桡细num=7factorial=1foriinrange(1锛宯um+1)锛歠actorial*=iprint(7镄勯桩涔树负锛氾纴factorial)鍦ㄨ繖涓绋嫔簭涓锛屾垜浠棣栧厛瀹氢箟鍙橀噺num骞跺皢鍏惰剧疆涓7銆
链棰樿佹眰缂栧啓绋嫔簭锛岃$畻N镄勯桩涔樸傝緭鍏ユ牸寮忥细杈揿叆鍦ㄤ竴琛屼腑缁椤嚭涓涓姝f暣鏁癗銆傝緭鍑烘牸寮忥细鍦ㄤ竴琛屼腑鎸夌収钬减roct=F钬濈殑镙煎纺杈揿嚭阒朵箻镄勫糉锛岃锋敞镒忕瓑鍙风殑宸﹀彸钖勬湁涓涓绌烘牸銆傞樼洰淇濊瘉璁$畻缁撴灉涓嶈秴杩囧弻绮惧害锣冨洿銆
阒朵箻涓鑸閮界敤阃掑綊𨱒ュ疄鐜帮纴鍏蜂綋濡备笅锛氭晥鏋滆繖涓鍑芥暟鍙鑳借瘑鍒鏁存暟锛屽嵆浣胯緭鍏0涔熶细鎶ラ敊銆
浠ヤ笅鏄涓涓绠鍗旷殑Python绋嫔簭锛岀敤浜庤$畻骞惰緭鍑鸿〃杈惧纺y=1+5/1锛+5^2/2锛+5^3/3锛+...+5^n/n锛佺殑缁撴灉锛屽叾涓璶鏄鐢ㄦ埛杈揿叆镄勬暣鏁般
涓涓姝f暣鏁扮殑阒朵箻锛坒actorial锛夋槸镓链夊皬浜庡强绛変簬璇ユ暟镄勬f暣鏁扮殑绉锛屽苟涓0镄勯桩涔树负1銆傝嚜铹舵暟n镄勯桩涔桦啓浣渘锛併1808骞达纴锘烘柉椤柯峰崱镟煎紩杩涜繖涓琛ㄧず娉曘备害鍗硁锛=1脳2脳3脳...脳(n-1)脳n銆
浜﹀嵆n锛=1脳2脳3脳...脳(n-1)脳n銆傞桩涔树害鍙浠ラ掑綊鏂瑰纺瀹氢箟锛0锛=1锛宯锛=(n-1)锛伱枭銆
鏂规硶涓锛氢娇鐢ㄥ惊鐜璁$畻阒朵箻鍜屽湪寰鐜涓绱锷犳疮涓鏁扮殑阒朵箻锛屽傛灉阒朵箻鍜岃秴杩9999锛屽垯阃鍑哄惊鐜锛岃繑锲炰笂涓娆$殑缁撴灉銆
鎴戜滑棣栧厛浣跨敤input()鍑芥暟浠庣敤鎴烽偅閲岃幏鍙栦竴涓姝f暣鏁帮纴骞跺皢鍏跺瓨鍌ㄥ埌鍙橀噺n涓銆傜劧钖庯纴鎴戜滑灏嗗洜瀛愪釜鏁板埯濮嫔寲涓1锛屽洜涓1链韬鏄痭镄勫洜瀛愩
鍒濆嫔寲鍙橀噺sum涓0sum=0浣跨敤for寰鐜姹傚拰foriinrange(1锛宯+1)锛歴um+=iprint(1+2+3+...+n镄勫拰涓猴细锛宻um)鍦ㄤ笂闱㈢殑浠g爜涓锛屾垜浠棣栧厛杈揿叆涓涓姝f暣鏁皀锛岀劧钖庝娇鐢╢or寰鐜姹1+2+3+...+n镄勫拰銆
foriinrange(1锛宯+1锛2)锛歳esult*=i#绱涔樻疮涓椤筽rint(鏁板垪1*3*5*5*n镄勭Н涓猴细锛宺esult)浠g爜镓ц岃繃绋嬩腑锛岄栧厛阃氲繃input鍑芥暟銮峰彇鏁板垪镄勬渶钖庝竴椤筺镄勫硷纴铹跺悗鍒濆嫔寲缁撴灉result涓1銆
鍙浠ヤ娇鐢≒ython镄刦or寰鐜璇鍙ユ潵瀹炵幇銆备唬镰佺ず渚嫔备笅锛歯=int(input(Pleaseinputanumber锛))sum=0foriinrange(1锛宯+1)锛歴um+=i*iprint(sum)杩欐典唬镰佺殑浣灭敤鏄姹1+4+9+16+...+nn镄勫拰銆
浜﹀嵆n锛=1脳2脳3脳...脳(n-1)脳n銆傞桩涔树害鍙浠ラ掑綊鏂瑰纺瀹氢箟锛0锛=1锛宯锛=(n-1)锛伱枭銆
鐢╠ef浠g爜鍒涘缓涓涓鍑芥暟锛屽悕绉颁负func锛屽弬鏁颁负ndeffunc(n)锛氩垱寤轰竴涓鍙橀噺res锛岃祴鍊间负鍑芥暟镄勫弬鏁皀锛屼唬镰佸备笅锛歳es=n銆
阒朵箻涓鑸閮界敤阃掑綊𨱒ュ疄鐜帮纴鍏蜂綋濡备笅锛氭晥鏋滆繖涓鍑芥暟鍙鑳借瘑鍒鏁存暟锛屽嵆浣胯緭鍏0涔熶细鎶ラ敊銆
链棰樿佹眰缂栧啓绋嫔簭锛岃$畻N镄勯桩涔樸傝緭鍏ユ牸寮忥细杈揿叆鍦ㄤ竴琛屼腑缁椤嚭涓涓姝f暣鏁癗銆傝緭鍑烘牸寮忥细鍦ㄤ竴琛屼腑鎸夌収钬减roct=F钬濈殑镙煎纺杈揿嚭阒朵箻镄勫糉锛岃锋敞镒忕瓑鍙风殑宸﹀彸钖勬湁涓涓绌烘牸銆傞樼洰淇濊瘉璁$畻缁撴灉涓嶈秴杩囧弻绮惧害锣冨洿銆
1銆乫or(ans=1锛沶1锛沶--)ans*=n锛况eturnans锛泒娉ㄦ剰锛歱rintf(链链猴细ULLONG_MAX=%llu 锛孶LLONG_MAX)锛涙槸妫娴嬫湰链哄彲浠ュ圭撼镄勬渶澶ф棤绗﹀彿鏁存暟锛屾墍浠n镄勯桩涔树笉鑳借秴杩囨ゆ暟鍊笺傜紪璇戝櫒蹇呴’婊¤冻c99瑙勮寖銆
2銆佹濊矾锛氭墍璋搉镄勯桩涔桦氨鏄浠1鍒皀镄勭疮绉锛屾墍浠ュ彲浠ラ氲繃涓涓猣or寰鐜锛屼粠1鍒皀渚濇℃眰绉鍗冲彲銆
3銆佹帴镌鏄阒朵箻recv鍑芥暟阃昏緫锛岃ュ嚱鏁版湁涓涓褰㈠弬n鐢ㄦ潵鎺ユ敹杈揿叆镄勬暟銆
4銆佷笅鏋勬濅笅绋嫔簭镄勫熀纭锛岃╃敤鎴疯嚜瀹氢箟杈揿叆涓涓鏁颁綔涓洪桩涔樻暟锛屽綋瓒呰繃20镞讹纴杈揿嚭钬淣istoobig钬.闇瑕佺敤鍒癐F鍑芥暟锛屼互涓嬩负璇︾粏杩囩▼銆
1銆佷害鍗硁锛=1脳2脳3脳...脳(n-1)脳n銆傞桩涔树害鍙浠ラ掑綊鏂瑰纺瀹氢箟锛0锛=1锛宯锛=(n-1)锛伱枭銆
2銆佷竴涓鏁存暟镄勯桩涔桦氨鏄镓链夊皬浜庣瓑浜庤ユ暟瀛楃殑姝f暣鏁扮殑绉銆备妇渚嬭存槑3镄勯桩涔桦氨鏄3*2*1銆
3銆乸ythonrange()鍑芥暟鍙鍒涘缓涓涓鏁存暟鍒楄〃锛屼竴鑸鐢ㄥ湪for寰鐜涓銆傚嚱鏁拌娉时ange(start锛宻top[锛宻tep])鍙傛暟璇存槑锛歴tart锛氲℃暟浠巗tart寮濮嬨傞粯璁ゆ槸浠0寮濮嬨
1銆侀栧厛瀹氢箟涓涓猲s鏁扮粍鐢ㄦ潵瀛桦偍n锛佺殑钖勪釜浣嶆暟涓婄殑鏁板硷纴鍒╃敤for寰鐜缁档s锷犲叆10000涓0鍊硷纴浠ユ柟渚垮悗闱㈢洿鎺ユ牴鎹甶ndex瀵规暟缁勮繘琛屾搷浣溿傜劧钖庡畾涔塴ength浣滀负钬沧暟缁勭殑闀垮害钬濓纸链夌湡瀹炴暟鍊肩殑钥岄潪镊锷ㄦ坊锷犵殑0锛変篃鍗硁锛佺殑缁撴灉镄勪綅鏁般
2銆乺es=n銆傜劧钖庡啓鍏forrange寰鐜锛屽叿浣扑唬镰佸备笅锛歠oriinrange(1锛宯)锛氭帴涓嬫潵鍦╢or寰鐜褰扑腑杩涜岃$畻骞朵笖杩斿洖res锛屽叿浣扑唬镰佸备笅锛歳es*=ireturnres銆
3銆佽$畻N镄勯桩涔樸傝緭鍏ユ牸寮忥细杈揿叆鍦ㄤ竴琛屼腑缁椤嚭涓涓姝f暣鏁癗銆傝緭鍑烘牸寮忥细鍦ㄤ竴琛屼腑鎸夌収钬减roct=F钬濈殑镙煎纺杈揿嚭阒朵箻镄勫糉锛岃锋敞镒忕瓑鍙风殑宸﹀彸钖勬湁涓涓绌烘牸銆傞樼洰淇濊瘉璁$畻缁撴灉涓嶈秴杩囧弻绮惧害锣冨洿銆
4銆佸墠涓や釜閮藉皝瑁呮垚浜嗗嚱鏁般傛渶钖庝竴涓鐩存帴杩愯岀殑銆傛病链夊畾涔夊嚱鏁般备腑闂撮偅涓闂棰桡纴鏄锲犱负浣犲缮璁板仛绫诲瀷杞鎹锛屼綘璇旷潃杩愯岃繖涓猲umber=int(number)銆傚簲璇ュ氨瀵逛简銆
④ python简单的编程代码
输入两个数字,比较大小,然后按照大小输出
def cmpNum():
a = input("请输入一个数字:")
b = input("请输入一个数字:")
if a >= b:
print(a, b)
else:
print(b, a)
cmpNum()
结果一:
请输入一个数字:159
请输入一个数字:456
456 159
结果二:
请输入一个数字:9568
请输入一个数字:1452
9568 1452
⑤ 简单强大的Python库!Schele—实用的周期任务调度工具
如果你想在Linux服务器上周期性地执行某个 Python 脚本,最出名的选择应该是 Crontab 脚本,但是 Crontab 具有以下缺点:
1.不方便执行 秒级的任务 。
2.当需要执行的定时任务有上百个的时候,Crontab的 管理就会特别不方便 。
另外一个选择是 Celery,但是 Celery 的配置比较麻烦,如果你只是需要一个轻量级的调度工具,Celery 不会是一个好选择。
在你想要使用一个轻量级的任务调度工具,而且希望它尽量简单、容易使用、不需要外部依赖,最好能够容纳 Crontab 的所有基本功能,那么 Schele 模块是你的不二之选。
使用它来调度任务可能只需要几行代码,感受一下:
上面的代码表示每10分钟执行一次 job 函数,非常简单方便。你只需要引入 schele 模块,通过调用 scele.every(时间数).时间类型.do(job) 发布周期任务。
发布后的周期任务需要用 run_pending 函数来检测是否执行,因此需要一个 While 循环不断地轮询这个函数。
下面具体讲讲Schele模块的安装和初级、进阶使用方法。
1.准备
请选择以下任一种方式输入命令安装依赖 :
1. Windows 环境 打开 Cmd (开始-运行-CMD)。
2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。
3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.
2.基本使用
最基本的使用在文首已经提到过,下面给大家展示更多的调度任务例子:
可以看到,从月到秒的配置,上面的例子都覆盖到了。不过 如果你想只运行一次任务 的话,可以这么配:
参数传递
如果你有参数需要传递给作业去执行,你只需要这么做:
获取目前所有的作业
如果你想获取目前所有的作业:
取消所有作业
如果某些机制触发了,你需要立即清除当前程序的所有作业:
标签功能
在设置作业的时候,为了后续方便管理作业,你可以给作业打个标签,这样你可以通过标签过滤获取作业或取消作业。
设定作业截止时间
如果你需要让某个作业到某个时间截止,你可以通过这个方法:
截止日期之后,该作业将无法运行。
立即运行所有作业,而不管其安排如何
如果某个机制触发了,你需要立即运行所有作业,可以调用 schele.run_all :
3.高级使用
装饰器安排作业
如果你觉得设定作业这种形式太啰嗦了,也可以使用装饰器模式:
并行执行
默认情况下,Schele 按顺序执行所有作业。其背后的原因是,很难找到让每个人都高兴的并行执行模型。
不过你可以通过多线程的形式来运行每个作业以解决此限制:
日志记录
Schele 模块同时也支持 logging 日志记录,这么使用:
效果如下:
异常处理
Schele 不会自动捕捉异常,它遇到异常会直接抛出,这会导致一个严重的问题: 后续所有的作业都会被中断执行 ,因此我们需要捕捉到这些异常。
你可以手动捕捉,但是某些你预料不到的情况需要程序进行自动捕获,加一个装饰器就能做到了:
这样, bad_task 在执行时遇到的任何错误,都会被 catch_exceptions 捕获,这点在保证调度任务正常运转的时候非常关键。
⑥ python入门教程
python入门教程如下:
准备材料:windows电脑、python
1、这里简单告用python软件编写的一个关于货物售价折扣方面的一个计算程序,首先打开python软件。
⑦ 怎么用python简单的制作一个网页
1、打开sublime text 3,新建一个PY文件。