python入门(四):字符串、编码、random
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的更多相关文章
- Python入门之字符编码
一.字节编码的基础知识 一.计算机基础知识 #1 我们的程序都是运行在特定的操作系统内,例如window,linux,mac等等#2 运行应用程序,需要要操作系统发出请求,我们双击运行的时候会向操作系 ...
- 关于python中的字符串编码理解
python2.x 中中间编码为unicode,一个字符串需要decode为unicode,再encode为其它编码格式(gbk.utf8等) 以gbk转utf8为例: s = "我是字符串 ...
- python中的字符串编码问题——1.理解编码和解码问题
理解编码与解码(python2.7):1)编码 是根据一个想要的编码名称,把一个字符串翻译为其原始字节形式.>>> u_str=u'字符串编码aabbbcccddd'>> ...
- Python入门-再谈编码
一.小数据池 在说小数据池之前. 我们先看一个概念. 什么是代码块: 根据提示我们从官方文档找到了这样的说法: A Python program is constructed from code bl ...
- python入门7 字符串操作
字符串操作 #coding:utf-8 #/usr/bin/python """ 2018-11-03 dinghanhua 字符串操作 ""&quo ...
- python入门6 字符串拼接、格式化输出
字符串拼接方式 1 使用 + 拼接字符串 2 格式化输出:%s字符串 %d整数 %f浮点数 %%输出% %X-16进制 %r-原始字符串 3 str.format() 代码如下: #codin ...
- python中的字符串编码
获取字符串的编码类型: encodingdate = chardet.detect(str) chardet用于实现字符串的编码类型检测 chardet的下载地址:https://pypi.pytho ...
- Python自学笔记-字符串编码(来自廖雪峰的官网Python3)
感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看. 1.理解变 ...
- Python入门-模块2(random模块、os模块)
>>> random.randomrange(1,10) #返回1-10之间的一个随机数,不包括10 >>> random.randint(1,10) #返回1-1 ...
- Python入门 —— 04字符串解析
字符串 -字符串是 Python 中最常用的数据类型.(可以说是大多数语言都常用) 1. 创建字符串 ( '' 或 "" 和 '''''')(单,双和三引号)(字符串可以为空) - ...
随机推荐
- MacBook使用笔记2 - 安装windows虚拟机攻略
转载请标注原链接:http://www.cnblogs.com/xczyd/p/5498878.html 5月初从阿里滚粗,然后失去了公司发的Mac Air.说实话Mac机器确实比windows好用一 ...
- lua经典问题
lua是一门比较简单的脚本语言,但是有些问题经常碰到,在这里总结一下: 1 lua 传参,如果参数是table,则相当于传引用 2 lua中只有nil和false返回假 3 lua and 和 or ...
- Gym - 100796I:Shell Game(圆台的最大内接球半径)
pro:如题.给定上圆半径r,下圆半径R,高度h.问最大内接球半径. sol:由对称性,我们放到二维来看,即给这么一个梯形,问最大内接圆半径. 证明:如果是一个三角形的内接圆C,他内切于三边. 现在这 ...
- LINUX文件删除,但磁盘空间未释放
最近在进行系统压测,由于服务器节点太多,便写了个简单的脚本,在执行过程中发现,日志文件删除后,磁盘空间只释放了一小部分,任有大部分磁盘空间未释放. 使用lsof | grep delete命令,发现已 ...
- (33)关于django中路由自带的admin + 建表关系的讲解
admin是django自带的后台管理,在初始的时候就默认配置好了 当输入ip地址的时候后面跟admin,就会登陆管理员的后台,这个是django自带的,可以快速管理数据表(增删改查) PS:ip地址 ...
- 基于tensorflow的逻辑分类
#!/usr/local/bin/python3 ##ljj [2] ##logic classify model import tensorflow as tf import matplotlib. ...
- 记录 spf13-vim 遇到的问题
一.spf13-vim 常用快捷键: https://blog.csdn.net/BjarneCpp/article/details/80608706 https://www.cnblogs.com/ ...
- Spring/Spring MVC
90.为什么要使用 spring? 答:spring是一个开源框架,是个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架 方便结构简化开发 AOP编码的支持 声明式事物的支持 方便程序的测试 ...
- Day 08 文件操作模式,文件复制,游标
with open:将文件的释放交给with管理 with open('文件', '模式', encoding='utf-8') as f: # 操作 pass a模式:追加写入 # t ...
- java代码------charAt()的用法
总结:你看这个方法的用处真的蛮多比如这个计算器小项目,用这个charAt()方法来装运算符 package com.mmm; import java.util.Scanner; public clas ...