条件循环:while,语法以下node
while 条件: # 循环体 # 若是条件为真,那么循环体则执行,执行完毕后再次循环,从新判断条件。。。 # 若是条件为假,那么循环体不执行,循环终止
#打印0-10 count=0 while count <= 10: print('loop',count) count+=1 #打印0-10之间的偶数 count=0 while count <= 10: if count%2 == 0: print('loop',count) count+=1 #打印0-10之间的奇数 count=0 while count <= 10: if count%2 == 1: print('loop',count) count+=1
死循环python
import time num=0 while True: print('count',num) time.sleep(1) num+=1
循环嵌套与tag浏览器
tag=True while tag: ...... while tag: ........ while tag: tag=False
break与continue服务器
#break用于退出本层循环 while True: print "123" break print "456" #continue用于退出本次循环,继续下一次循环 while True: print "123" continue print "456"
5 while+else网络
#与其它语言else 通常只与if 搭配不一样,在Python 中还有个while ...else 语句,while 后面的else 做用是指,当while 循环正常执行完,中间没有被break 停止的话,就会执行else后面的语句 count = 0 while count <= 5 : count += 1 print("Loop",count) else: print("循环正常执行完啦") print("-----out of while loop ------") 输出 Loop 1 Loop 2 Loop 3 Loop 4 Loop 5 Loop 6 循环正常执行完啦 -----out of while loop ------ #若是执行过程当中被break啦,就不会执行else的语句啦 count = 0 while count <= 5 : count += 1 if count == 3:break print("Loop",count) else: print("循环正常执行完啦") print("-----out of while loop ------") 输出 Loop 1 Loop 2 -----out of while loop ------
这就用到了占位符,如:%s、%d编辑器
#%s字符串占位符:能够接收字符串,也可接收数字 print('My name is %s,my age is %s' %('egon',18)) #%d数字占位符:只能接收数字 print('My name is %s,my age is %d' %('egon',18)) print('My name is %s,my age is %d' %('egon','18')) #报错 #接收用户输入,打印成指定格式 name=input('your name: ') age=input('your age: ') #用户输入18,会存成字符串18,没法传给%d print('My name is %s,my age is %s' %(name,age)) #注意: #print('My name is %s,my age is %d' %(name,age)) #age为字符串类型,没法传给%d,因此会报错 name = 'fangqiang' msg = f'姓名:{name}' print(msg) # 只适用python3.6以上的程序
了解字符编码的知识储备oop
打开编辑器就打开了启动了一个进程,是在内存中的,因此在编辑器编写的内容也都是存放与内存中的,断电后数据丢失,于是须要保存到硬盘上,点击保存按钮,就从内存中把数据刷到了硬盘上。在这一点上,咱们编写一个py文件(没有执行),跟编写其余文件没有任何区别,都只是在编写一堆字符而已。ui
即:在没有点击保存时,咱们所写的内容都是写入内存。注意这一点,很重要!!当咱们点击保存,内容才被刷到硬盘。编码
上面作了两件事:写内容到内存,从内存将内存刷到硬盘。这是两个过程。翻译
第一阶段:python解释器启动,此时就至关于启动了一个文本编辑器
第二阶段:python解释器至关于文本编辑器,去打开test.py文件,从硬盘上将test.py的文件内容读入到内存中
第三阶段:python解释器解释执行刚刚加载到内存中test.py的代码
python解释器执行py文件分为两个步骤:1.将文件读到内存,2.解释执行内容。
*字符编码简介
编码/解码本质上是一种映射(对应关系),好比‘a’用ascii编码则是65,计算机中存储的就是00110101,可是显示的时候不能显示00110101,仍是要显示'a',但计算机怎么知道00110101是'a'呢,这就须要解码,当选择用ascii解码时,当计算机读到00110101时就到对应的ascii表里一查发现是'a',就显示为'a'
编码:真实字符与二进制串的对应关系,真实字符→二进制串
解码:二进制串与真实字符的对应关系,二进制串→真实字符
要搞清楚字符编码,首先要解决的问题是:什么是字符编码?
咱们都知道,计算机要想工做必须通电,也就是说‘电’驱使计算机干活,而‘电’的特性,就是高低电平(高低平即二进制数1,低电平即二进制数0),也就是说计算机只认识数字(010101).若是咱们想保存数据,首先得将咱们的数据进行一些处理,最终得转换成010101才能让计算机识别。
因此必须通过一个过程:
字符--------(翻译过程)------->数字
这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码。
那么问题就来了?做为一种编码方案,还得解决两个问题:
a.字节是怎么分组的,如8 bits或16 bits一组,这也被称做编码单元。
b.编码单元和字符之间的映射关系。例如,在ASCII码中,十进制65映射到字母A上。
ASCII码是上个世纪最流行的编码体系之一,至少在西方是这样。下图显示了ASCII码中编码单元是怎么映射到字符上的。
随着计算机愈来愈流行,厂商之间的竞争更加激烈,在不一样的计算机体系间转换数据变得十分蛋疼,人们厌烦了这种自定义形成的混乱。最终,计算机制造商一块儿制定了一个标准的方法来描述字符。他们定义使用一个字节的低7位来表示字符,而且制做了如上图所示的对照表来映射七个比特的值到一个字符上。例如,字母A是65,c是99,~是126等等, ASCII码就这样诞生了。原始的ASCII标准定义了从0到127 的字符,这样正好能用七个比特表示。
为何选择了7个比特而不是8个来表示一个字符呢?我并不关心。可是一个字节是8个比特,这意味着1个比特并无被使用,也就是从128到255的编码并无被制定ASCII标准的人所规定,这些美国人对世界的其它地方一无所知甚至彻底不关心。其它国家的人趁这个机会开始使用128到255范围内的编码来表达本身语言中的字符。例如,144在阿拉伯人的ASCII码中是گ,而在俄罗斯的ASCII码中是ђ。ASCII码的问题在于尽管全部人都在0-127号字符的使用上达成了一致,但对于128-255号字符却有不少不少不一样的解释。你必须告诉计算机使用哪一种风格的ASCII码才能正确显示128-255号的字符。
总结:ASCII,一个Bytes表明一个字符(英文字符/键盘上的全部其余字符),1Bytes=8bit,8bit能够表示0-2**8-1种变化,便可以表示256个字符,ASCII最初只用了后七位,127个数字,已经彻底可以表明键盘上全部的字符了(英文字符/键盘的全部其余字符),后来为了将拉丁文也编码进了ASCII表,将最高位也占用了。
阶段二:为了知足中文,中国人定制了GBK
GBK:2Bytes表明一个字符;为了知足其余国家,各个国家纷纷定制了本身的编码。日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里
阶段三:万国码Unicode编码
后来,有人开始以为太多编码致使世界变得过于复杂了,让人脑壳疼,因而你们坐在一块儿拍脑壳想出来一个方法:全部语言的字符都用同一种字符集来表示,这就是Unicode。
Unicode统一用2Bytes表明一个字符,2**16-1=65535,可表明6万多个字符,于是兼容万国语言.但对于通篇都是英文的文原本说,这种编码方式无疑是多了一倍的存储空间(英文字母只须要一个字节就足够,用两个字节来表示,无疑是浪费空间).因而产生了UTF-8,对英文字符只用1Bytes表示,对中文字符用3Bytes.UTF-8是一个很是惊艳的概念,它漂亮的实现了对ASCII码的向后兼容,以保证Unicode能够被大众接受。
在UTF-8中,0-127号的字符用1个字节来表示,使用和US-ASCII相同的编码。这意味着1980年代写的文档用UTF-8打开一点问题都没有。只有128号及以上的字符才用2个,3个或者4个字节来表示。所以,UTF-8被称做可变长度编码。因而下面字节流以下:
0100100001000101010011000100110001001111
这个字节流在ASCII和UTF-8中表示相同的字符:HELLO
至于其余的UTF-16,这里就再也不叙述了。
总结一点:unicode:简单粗暴,全部字符都是2Bytes,优势是字符----->数字的转换速度快,缺点是占用空间大。
utf-8:精准,对不一样的字符用不一样的长度表示,优势是节省空间,缺点是:字符->数字的转换速度慢,由于每次都须要计算出字符须要多长的Bytes才可以准确表示。
所以,内存中使用的编码是unicode,用空间换时间(程序都须要加载到内存才能运行,于是内存应该是尽量的保证快);硬盘中或者网络传输用utf-8,网络I/O延迟或磁盘I/O延迟要远大与utf-8的转换延迟,并且I/O应该是尽量地节省带宽,保证数据传输的稳定性。
全部程序,最终都要加载到内存,程序保存到硬盘不一样的国家用不一样的编码格式,可是到内存中咱们为了兼容万国(计算机能够运行任何国家的程序缘由在于此),统一且固定使用unicode,这就是为什么内存固定用unicode的缘由,你可能会说兼容万国我能够用utf-8啊,能够,彻底能够正常工做,之因此不用确定是unicode比utf-8更高效啊(uicode固定用2个字节编码,utf-8则须要计算),可是unicode更浪费空间,没错,这就是用空间换时间的一种作法,而存放到硬盘,或者网络传输,都须要把unicode转成utf-8,由于数据的传输,追求的是稳定,高效,数据量越小数据传输就越靠谱,因而都转成utf-8格式的,而不是unicode。
不论是哪一种类型的文件,只要记住一点:文件以什么编码保存的,就以什么编码方式打开.
下面咱们来看看python中关于编码出现的问题:
若是不在python文件指定头信息#--coding:utf-8--,那就使用默认的python2中默认使用ascii,python3中默认使用utf-8
读取已经加载到内存的代码(unicode编码的二进制),而后执行,执行过程当中可能会开辟新的内存空间,好比x="hello"
内存的编码使用unicode,不表明内存中全都是unicode编码的二进制,在程序执行以前,内存中确实都是unicode编码的二进制,好比从文件中读取了一行x="hello",其中的x,等号,引号,地位都同样,都是普通字符而已,都是以unicode编码的二进制形式存放与内存中的.可是程序在执行过程当中,会申请内存(与程序代码所存在的内存是俩个空间),能够存听任意编码格式的数据,好比x="hello",会被python解释器识别为字符串,会申请内存空间来存放"hello",而后让x指向该内存地址,此时新申请的该内存地址保存也是unicode编码的hello,若是代码换成x="hello".encode('utf-8'),那么新申请的内存空间里存放的就是utf-8编码的字符串hello了.
浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器
若是服务端encode的编码格式是utf-8, 客户端内存中收到的也是utf-8编码的二进制
Python3 除了把字符串的编码改为了unicode, 还把str 和bytes 作了明确区分, str 就是unicode格式的字符, bytes就是单纯二进制。
在py3里看字符,必须得是unicode编码,其它编码一概按bytes格式展现。
#在python3中也有两种字符串类型str和bytes #str类型变为unicode类型 #coding:utf-8 s='林' #当程序执行时,无需加u,'林'也会被以unicode形式保存新的内存空间中, #s能够直接encode成任意编码格式 s.encode('utf-8') s.encode('gbk') print(type(s)) #<class 'str'> #bytes类型 #coding:utf-8 s='林' #当程序执行时,无需加u,'林'也会被以unicode形式保存新的内存空间中, #s能够直接encode成任意编码格式 s1=s.encode('utf-8') s2=s.encode('gbk') print(s) #林 print(s1) #b'\xe6\x9e\x97' 在python3中,是什么就打印什么 print(s2) #b'\xc1\xd6' 同上 print(type(s)) #<class 'str'> print(type(s1)) #<class 'bytes'> print(type(s2)) #<class 'bytes'>