注册 我的社团

全部社团 > Python> 帖子

Python学习记录

他不爱我
4479 0 0
发表于:06月10日 08:59 [ 只看楼主]

 把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间


UTF-8编码有一个额外的好处,就是ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。


 我觉得这里应该指的是 英语的吧,中文的是“x“,好像不符合。

现在计算机系统通用的字符编码工作方式:


在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。


用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:


 浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器:


 网页的源码上会有类似<meta charset="UTF-8" />的信息,表示该网页正是用的UTF-8编码。


在最新的Python 3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言

例如:>>> print('包含中文的str')

包含中文的str

 ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符:

 知道字符的整数编码,还可以用十六进制这么写str


>>> '\u4e2d\u6587'

'中文'


 Python对bytes类型的数据用带b前缀的单引号或双引号表示:

 x = b'ABC'

 要注意区分'ABC'和b'ABC',前者是str,后者虽然内容显示得和前者一样,但bytes的每个字符都只占用一个字节。

以Unicode表示的str通过encode()方法可以编码为指定的bytes,例如:


 >>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
>>> '中文'.encode('ascii')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)


 string的缩写字符串的意思


 str的用法是这样的:str(n,st)
其中n为数字,st为字符串,功能为讲n转换为字符串放入st中
与其对应的就是val用法为:
val(st,n,x)
其中st为字符串,n为整型变量(好像实型也行,不确定),功能为将字符串st转换为数字,x为成功或否变量(整型)成功为0,不成功为首个出问题的字符。
(至于为什么不成功,因为如果碰到除数字外的字符如abcd就不能转换了)


纯英文的str可以用ASCII编码为bytes,内容是一样的,含有中文的str可以用UTF-8编码为bytes。含有中文的str无法用ASCII编码,因为中文编码的范围超过了ASCII编码的范围,Python会报错。


在bytes中,无法显示为ASCII字符的字节,用\x##显示。


反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法:


 >>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'


 len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数:


>>> len(b'ABC')

3

>>> len(b'\xe4\xb8\xad\xe6\x96\x87')

6

>>> len('中文'.encode('utf-8'))

6


 #!/usr/bin/env python3
# -*- coding: utf-8 -*-


第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;


第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。


申明了UTF-8编码并不意味着你的.py文件就是UTF-8编码的,必须并且要确保文本编辑器正在使用UTF-8 without BOM编码:


常见的占位符有:


%d 整数

%f 浮点数

%s 字符串

%x 十六进制整数


 %运算符就是用来格式化字符串的。在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。


>>> 'Hello, %s' % 'world'

'Hello, world'

>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)

'Hi, Michael, you have $1000000.'


if <条件判断1>: 
   <执行1>

elif <条件判断2>:  
    <执行2>

elif <条件判断3>:  
      <执行3>

else:    <执行4>


 

age = 3if age >= 18:
    print('adult')elif age >= 6:
    print('teenager')else:
    print('kid')

 if判断条件还可以简写,比如写:

if x:
    print('True')
只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False。


 input()返回的数据类型是str,str不能直接和整数比较,必须先把str转换成整数。Python提供了int()函数来完成这件事情:


s = input('birth: ')
birth = int(s)if birth < 2000:    print('00前')else:    print('00后')

int()函数发现一个字符串并不是合法的数字时就会报错,程序就退出了。

练习

小明身高1.75,体重80.5kg。请根据BMI公式(体重除以身高的平方)帮小明计算他的BMI指数,并根据BMI指数:

  • 低于18.5:过轻

  • 18.5-25:正常

  • 25-28:过重

  • 28-32:肥胖

  • 高于32:严重肥胖

if-elif判断并打印结果:

# -*- coding: utf-8 -*-
height = 1.75
weight = 80.5


Python的循环有两种,一种是for...in循环,依次把list或tuple中的每个元素迭代出来,看例子:


names = ['Michael', 'Bob', 'Tracy']
for name in names:
   print(name)

for x in ...循环就是把每个元素代入变量x,然后执行缩进块的语句。

sum变量做累加:

range()函数,可以生成一个整数序列,再通过list()函数可以转换为list。比如range(5)生成的序列是从0开始小于5的整数:


  • 点赞  0
  • 收藏
  • 扫一扫分享朋友圈

    二维码

  • 分享

全部回复 (0) 倒向排序

课程推荐

社团热门帖