1.字符串

字符串基本有两种类型,str和bytes

>>> s="a"

>>> type(s)

<class 'str'>                    #字符串 -- > Unicode(日常编程中的内容使用的是这个)

>>> s="中国"

>>> s.encode("utf-8")

b'\xe4\xb8\xad\xe5\x9b\xbd'     #b代表类型是bytes

>>> type(s.encode("utf-8"))

<class 'bytes'>                 #str encode后是bytes类型(会用在网络传输上)

>>> s.encode("utf-8").decode("utf-8")

'中国'

>>> type(s.encode("utf-8").decode

("utf-8"))                      #bytes decode后是str

<class 'str'>

注意:编码方式与解码方式前后应该保持一致,否则在需要编解码的内容为非英文时,会因为字符集对应不上,报错。

>>> s="a"                     #s是英文

>>> s.encode("utf-8")

b'a'

>>> s.encode()                #encode()中不写编码方式,默认是utf-8

b'a'

>>> s.encode("gbk")           #由于s是英文,所以gbk编码与utf-8编码的输出一样

b'a'

>>> s.encode("gbk").decode("utf-8")           #编码方式gbk,解码方式utf-8,不会报错

'a'

>>> s="中"                    #s是中文

>>> s.encode()                #encode()中不写编码方式,默认是utf-8

b'\xe4\xb8\xad'

>>> s.encode("utf-8")

b'\xe4\xb8\xad'                #与不写编码方式的结果输出一致

>>> s.encode("gbk")

b'\xd6\xd0'                    #由于s是中文,所以utf-8与gbk编码方式的输出不一致

>>> s.encode("gbk")

b'\xd6\xd0'

>>> s.encode("gbk").decode("utf-8")           #编码方式gbk,解码方式utf-8,会报错

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position 0: invalid continuation byte

utf-8不能解码,

2.random(随机):获得随机的东西。

1)    引入random包

>>> import random

2)    查看random

>>> dir(random)

['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_BuiltinMethodType', '_MethodType', '_Sequence', '_Set', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_acos', '_bisect', '_ceil', '_cos', '_e', '_exp', '_inst', '_itertools', '_log', '_pi', '_random', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', '_warn', 'betavariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'normalvariate', 'paretovariate', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']

>>> dir()

['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'random']

#dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表

3)    random.random()          #随机生成0-1之间的小数,[0,1)

>>> random.random()

0.3169229105176976

>>> random.random()

0.0717880522606662

>>> help(random.random)

random(...) method of random.Random instance

random() -> x in the interval [0, 1).

4)    random.randint(a,b)           #随机生成范围内的整数[a,b]

>>> random.randint(1,1000)

902

>>> random.randint(1,1000)

62

>>> help(random.randint)

randint(a, b) method of random.Random instance

Return random integer in range [a, b], including both end points.

5)    random.choice(列表名)       #随机取出列表中的某一元素

>>> s=[1,1.2,"早上好",{1:2}]

>>> random.choice(s)

{1: 2}

>>> random.choice(s)

'早上好'

6)    random.shuffle(列表名)       #打乱列表参数顺序

>>> s

[1, 1.2, '早上好', {1: 2}]               #s列表当前的顺序

>>> random.shuffle(s)

>>> s                              #并未直接返回值,需要输入s再次查看

[1, '早上好', {1: 2}, 1.2]

>>> random.shuffle(s)                #再次洗牌

>>> s

[1.2, {1: 2}, 1, '早上好']

7) random.uniform(a,b)           #在a,b范围内随机生成一个小数

>>> random.uniform(7,80)

58.444125752076054

>>> random.uniform(7,80)

72.05529541894796

3.ord()                            #返回字符对应的ASCII值或unicode数值

>>> ord("严")

20005                             #汉字“严”的unicode编码是20005

4.chr()                           #整数作参数,返回一个对应的字符。

>>> chr(20005)

'严'

5.string

1)    引入string包

>>> import string

2)    查看string

>>> dir(string)

['Formatter', 'Template', '_ChainMap', '_TemplateMetaclass', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_re', '_string', 'ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 'capwords', 'digits', 'hexdigits', 'octdigits', 'printable', 'punctuation', 'whitespace']

3)    string.ascii_letters              #查看所有大小写字母

>>> string.ascii_letters

'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

4)    string.ascii_lowercase          #查看所有小写字母

>>> string.ascii_lowercase

'abcdefghijklmnopqrstuvwxyz'

5)    string.ascii_uppercase          #查看所有大写字母

>>> string.ascii_uppercase

'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

6.字串转换为列表list

>>> list(string.ascii_letters)

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']

7.切片                            #列表中取几个元素

>>> a=list(string.ascii_letters)

>>> a

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']

>>> a[:10]                          #只取列表a前10个元素

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

8.join                                        #将列表转换为一个字符串

>>> "".join(a[:10])                             #空字符串与列表元素组合

'abcdefghij'

注意:

一个字符串转换为列表可以使用list,但是列表转换成字符串不能使用str

>>> a="alkjdhfgkadg"

>>> list(a)

['a', 'l', 'k', 'j', 'd', 'h', 'f', 'g', 'k', 'a', 'd', 'g']

>>> s=['a', 'l', 'k', 'j', 'd', 'h', 'f', 'g', 'k', 'a', 'd', 'g']

>>> str(s)

"['a', 'l', 'k', 'j', 'd', 'h', 'f', 'g', 'k', 'a', 'd', 'g']"            #仅仅是在列表外加了“”

9.代码过长换行

1)    回车

>>> a=(1,3,

... 4,5

... ,7,9)

>>> a

(1, 3, 4, 5, 7, 9)

2)    \

>>> a=(1,2,\

...  3,4)

>>> a

(1, 2, 3, 4)

>>> a=10

>>> if a==\

... 10\

... :

...     print(True)

...

True

小练习:

声明一个中文的字符串,查看一下类型,然后转换为bytes类型,在type一下,然后bytes类型转换为str类型

>>> s="早上好"
>>> type(s)
<class 'str'>
>>> s.encode("gbk")
b'\xd4\xe7\xc9\xcf\xba\xc3'
>>> type(s.encode("gbk"))
<class 'bytes'>
>>> b'\xd4\xe7\xc9\xcf\xba\xc3'.decode('gbk')
'早上好'

# b'\xd4\xe7\xc9\xcf\xba\xc3'可以直接接decode,不用加括号

小练习:

随机生成100-·101之间的数字

>>> 100+random.random()

100.44705467177177

>>> 100+random.random()

100.76812721548731

小练习:

随机生成一个小写字母

>>> ord("a")

97

>>> chr(97+random.randint(1,25))

'g'

>>> chr(97+random.randint(1,25))

'y'

小练习:

随机生成一个大写字母

>>> ord("A")

65

>>> chr(65+random.randint(1,25))

'Q'

>>> chr(65+random.randint(1,25))

'F'

>>> chr(ord("A")+random.randint(1,25))

'J'                                              #不查ASCII表实现的方法

小练习:

随机生成10个小写字母

>>> result=""

>>> for i in range(10):                                #循环

...     result+=chr(ord("a")+random.randint(0,25))       #拼字符串与随机生成小写字母

...

>>> print(result)

lnqzhedffg

小练习:

随机生成10个大写字母

>>> result=""

>>> for i in range(10):

...     result+=chr(ord("A")+random.randint(0,25))

...

>>> print(result)

GYZDQUFHZL

小练习:

随机生成5个小写字母,5个大写字母

>>> result=""

>>> for i in range(10):

...     if i<=5:         # i的取值是0,1,2,3,4,5,共6个

...         result+=chr(ord("a")+random.randint(0,25))

...     else:

...         result+=chr(ord("A")+random.randint(0,25))

...

>>> print(result)

duzceiKLLB            #输出的结果为6+4,错误。注意range是从0开始的!!

更改后的程序是:

>>> result=""

>>> for i in range(10):

...     if i<5:

...         result+=chr(ord("a")+random.randint(0,25))

...     else:

...         result+=chr(ord("A")+random.randint(0,25))

...

>>> print(result)

tzkyhWXKTB

随机生成不限定固定大小个数的10个字母

>>> result=""

>>> import random

>>> result=""

>>> lower_case_letter_num=random.randint(1,10)

>>> upper_case_letter_num=10-random.randint(1,10)

>>> for i in range(10):

...     if i < lower_case_letter_num:

...         result+=chr(ord("a")+random.randint(0,25))

...     else:

...         result+=chr(ord("A")+random.randint(0,25))

...

>>> print(result)

ujvdhdwpoM

#注意:该解法是在一开始就限定了小写字母几个,大写字母几个,而不是随着计算的过程,,,慢慢进行分配

小练习:

随机生成10个包含大小写字母混拼的字符串

方法一:

1)    生成全部的大小写字母

>>> a=string.ascii_letters

>>> a

'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

2)    将字符串转换为list

>>> s=list(a)

>>> s

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']

3)    将list洗牌

>>> random.shuffle(s)

>>> s

['H', 'j', 'z', 'L', 'p', 'i', 'O', 'C', 'q', 'y', 'u', 'd', 'c', 'Z', 'w', 'm', 'F', 'P', 's', 't', 'Q', 'a', 'S', 'g', 'h', 'G', 'f', 'U', 'n', 'V', 'Y', 'J', 'R', 'K', 'o', 'k', 'b', 'N', 'v', 'I', 'M', 'e', 'A', 'r', 'W', 'X', 'E', 'D', 'l', 'B', 'T', 'x']

注意: random.shuffle(s)执行后,需要查看s的变化,而不能将random.shuffle赋值给j.执行完成后查看j的输出,否则无所出

>>> j=random.shuffle(s)

>>> j

>>>

4)    切片,取出洗牌后的10个元素

>>> h=s[:10]

>>> h

['j', 'o', 'I', 'm', 'p', 'Z', 'O', 'B', 'G', 's']

5)    将列表转换成字符串,输出最终结果

>>> "".join(h)

'joImpZOBGs'

最终的程序就是:

>>> import random

>>> import string

>>> a=list(string.ascii_letters)

>>> random.shuffle(a)

>>> "".join(a[:10])

'CwWPqEuvgy'

注意:random.shuffle()括号中必须是一个list的变量名,而不能直接写运算后是list的过程。random.shuffle()的使用方法是,将一个list存到变量里,在传到shuffle里才能用。

方法二:

1)    生成全部的大小写字母

>>> a=string.ascii_letters

>>> a

'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

2)    将字符串转换为list

>>> s=list(a)

>>> s

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']

3)    随机取出10个元素

>>> for i in range(10):

...     random.choice(s)

...

'D'

'z'

'l'

'c'

'A'

'O'

'R'

'j'

'v'

'w'

>>>

4)    将10个元素转换为str

>>> "".join(random.choice(s) for i in range(10))

'TMlaOCofkd'

最终的程序就是:

>>> import random

>>> import string

>>> "".join(random.choice(list(string.ascii_letters)) for i in range(10))

'fAMsFctpKq'

小知识:

1.bytes类型都是gbk?

no!gbk与utf-8是编码集,bytes类型是经过编码产生的。但是编码方式有好几种:utf-8,iso,8259,拉丁1等。

2.>>> type(早上好.encode("gbk").decode("gbk"))

<class 'str'>

注意,此处的早上好是一个变量名字,并不是一个字符串,如果是一个字符串,会提示报错(not defined),不会输出结果

>>> 早上好="早上好"

3.python 2与python 3的区别

1)    python2的默认字符串类型也是str,但是是bytes类型

所以,str经过decode是unicode

python3的默认字符串类型也是str,但是是unicode类型

所以,str经过encode是bytes类型

2)    python2默认使用gbk编码,所以解码时也是要gbk

python3默认使用utf-8编码,所以解码时要用utf-8

总结:

encode: 都是用来得到非unicode类型字符串

decode:都是用来得到unicode类型

4.gbk,utf-8,unicode之间的差别

Unicode编码(str类型):包含了全世界所有字符。但是只是用来在内存中使用。一旦需要存储到文件,或者需要在网络中传输,需要转换成bytes, 服务器之间传递的数字,必须是bytes.API的调用也必须是bytes

默认计算机系统不支持unicode。

查看网页的编码方式:

网页源码 -- > charset -- >设定字符集

打开某个网页->右键->查看网页源代码Ctrl+U->必有“<meta charset="utf-8">”字样。

基本中国的网站,编码方式是gbk或utf-8,但是绝对没有unicode

bytes类型:存储到文件(硬盘)或是网络传输

不同国家使用的编码不同,中国使用gbk,欧洲使用iso8859,台湾使用big5(繁体)

没有全世界统一使用的编码

所以,编码方式选择gbk,utf-8还是其他的编码方式呢?

取决于你的应用程序是针对所有的处理都是utf-8,那么数据就要是utf-8.使用utf-8编码。

通过gbk或utf-8编码的bytes类型字符串,就是为了能够存储与传输。

python入门(四):字符串、编码、random的更多相关文章

  1. Python入门之字符编码

    一.字节编码的基础知识 一.计算机基础知识 #1 我们的程序都是运行在特定的操作系统内,例如window,linux,mac等等#2 运行应用程序,需要要操作系统发出请求,我们双击运行的时候会向操作系 ...

  2. 关于python中的字符串编码理解

    python2.x 中中间编码为unicode,一个字符串需要decode为unicode,再encode为其它编码格式(gbk.utf8等) 以gbk转utf8为例: s = "我是字符串 ...

  3. python中的字符串编码问题——1.理解编码和解码问题

    理解编码与解码(python2.7):1)编码 是根据一个想要的编码名称,把一个字符串翻译为其原始字节形式.>>> u_str=u'字符串编码aabbbcccddd'>> ...

  4. Python入门-再谈编码

    一.小数据池 在说小数据池之前. 我们先看一个概念. 什么是代码块: 根据提示我们从官方文档找到了这样的说法: A Python program is constructed from code bl ...

  5. python入门7 字符串操作

    字符串操作 #coding:utf-8 #/usr/bin/python """ 2018-11-03 dinghanhua 字符串操作 ""&quo ...

  6. python入门6 字符串拼接、格式化输出

    字符串拼接方式    1  使用 + 拼接字符串 2 格式化输出:%s字符串 %d整数 %f浮点数 %%输出% %X-16进制 %r-原始字符串 3 str.format() 代码如下: #codin ...

  7. python中的字符串编码

    获取字符串的编码类型: encodingdate = chardet.detect(str) chardet用于实现字符串的编码类型检测 chardet的下载地址:https://pypi.pytho ...

  8. Python自学笔记-字符串编码(来自廖雪峰的官网Python3)

    感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看.   1.理解变 ...

  9. Python入门-模块2(random模块、os模块)

    >>> random.randomrange(1,10) #返回1-10之间的一个随机数,不包括10 >>> random.randint(1,10) #返回1-1 ...

  10. Python入门 —— 04字符串解析

    字符串 -字符串是 Python 中最常用的数据类型.(可以说是大多数语言都常用) 1. 创建字符串 ( '' 或 "" 和 '''''')(单,双和三引号)(字符串可以为空) - ...

随机推荐

  1. 转发 C# Win32 API程序控制鼠标的操作

    命名空间:using System.Runtime.InteropServices; 在程序中添加: [DllImport("User32")]public extern stat ...

  2. Python学习笔记(day23更新)

    第一章 计算机基础 1.1 硬件 计算机基本的硬件由:CPU / 内存 / 主板 / 硬盘 / 网卡 / 显卡 等组成,只有硬件但硬件之间无法进行交流和通信. 1.2 操作系统 作用:操作系统用于协同 ...

  3. Parsing with Compositional Vector Grammars--paper

    这篇和2012年的区别: 1)Max-Margin Training Objective J中RNN变为了CVG 2012-两个词向量合并并打分,这个-两个(词向量,POS)合并并打分 2012年: ...

  4. 使用Blend设计出符合效果的WPF界面

    之前不会用blend,感觉好难的,但美工给出的效果自己有没办法实现,所以研究了一下blend,感觉没有想象中的那么难 废话不多说,开始界面设计 今天拿到美工给的一个界面效果图 这个界面说实话,还可以吧 ...

  5. shell(1)

    1:实现shell脚本中循环调用函数 #!/bin/bash output(){ ; num1 <= ; num1++ )) do echo -n "$num1 " done ...

  6. NumPy-快速处理数据--ndarray对象--数组的创建和存取

    本文摘自<用Python做科学计算>,版权归原作者所有. NumPy为Python提供了快速的多维数组处理的能力,而SciPy则在NumPy基础上添加了众多的科学计算所需的各种工具包,有了 ...

  7. 高性能mysql 第五章 索引部分总结

    高性能索引 1.索引基础:索引的作用类似'目录'帮助Query来快速定位数据行. 1.1索引类型: 1.1.1 b-tree索引 b-tree(balance tree)索引:使用平衡树(非平衡二叉树 ...

  8. MFC/VC CxImage 编译问题 (VS2013)

    最近在搞CxImage,幸好看到一些前辈的积累,避免了很多坑,CxImage默认是VC6.0编译的,因为我用的VS2013,所以从新编译一下,参考前辈博客https://www.cnblogs.com ...

  9. Runtime 解读

    首先,第一个问题, 1>runtime实现的机制是什么,怎么用,一般用于干嘛? 这个问题我就不跟大家绕弯子了,直接告诉大家, runtime是一套比较底层的纯C语言API, 属于1个C语言库, ...

  10. 403 Forbidden是什么意思?403 Forbidden错误解决方法

    大家平常在访问不同网站的时候,偶尔会遇到出现403 Forbidden错误的情况,浏览器会给出403 Forbidden错误提示.那么,403 forbidden是什么意思呢?出现403 Forbid ...