while 格式化输出 字符编码

流程控制之while循环

条件循环: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以上的程序

python 编码转换

了解字符编码的知识储备oop

  1. 文本编辑器存取文件的原理(nodepad++,pycharm,word)

   打开编辑器就打开了启动了一个进程,是在内存中的,因此在编辑器编写的内容也都是存放与内存中的,断电后数据丢失,于是须要保存到硬盘上,点击保存按钮,就从内存中把数据刷到了硬盘上。在这一点上,咱们编写一个py文件(没有执行),跟编写其余文件没有任何区别,都只是在编写一堆字符而已。ui

  即:在没有点击保存时,咱们所写的内容都是写入内存。注意这一点,很重要!!当咱们点击保存,内容才被刷到硬盘。编码

  上面作了两件事:写内容到内存,从内存将内存刷到硬盘。这是两个过程。翻译

  1. python解释器执行py文件的原理 ,例如python test.py

​ 第一阶段: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'>

python3 文件默认编码是utf-8,字符串编码是unicode,以utf-8或者gbk等代码,加载到内存,会自动转为unicode正常显示。

相关文章
相关标签/搜索