目录
一、python类别
CPython、JPython、IronPython(为了和java,.net更好的调用,所以才有JPython、IronPython)
# 输出:AaBb...Zz
>>> result=""
>>> for i in range(26):
... result += chr(65+i)+chr(97+i)
...
>>> print(result)
AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz
>>> import string
>>> dir(string)
['Formatter', 'Template', '_ChainMap', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_re', '_sentinel_dict', '_string', 'ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 'capwords', 'digits', 'hexdigits', 'octdigits', 'printable', 'punctuation', 'whitespace']
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'
>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.digits
'0123456789'
>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
# 输出:ACEGIKMOQSUWY
>>> result =""
>>> for i in range(0,26,2):
... result += chr(65+i)
...
>>> print(result)
ACEGIKMOQSUWY
# 输出:1a2b...26z
>>> result =""
>>> for i in range(26):
... result += str(i+1)+chr(97+i)
...
>>> print(result)
1a2b3c4d5e6f7g8h9i10j11k12l13m14n15o16p17q18r19s20t21u22v23w24x25y26z
二、python编码
2.1 编码类型
2.1.1 ASCII编码
美国信息交换标准代码(American Standard Code for Information Interchange,简称 ASCII)是一种用于信息交换的
美国标准
代码,它的作用是给
英文字母
、数字、标点、
字符
转换成计算机能识别的
二进制数
规定了一个大家都认可并遵守的标准。
2.1.2 GB2312编码
适用于汉字处理、汉字通信等系统之间的信息交换
2.1.3 GBK编码
是汉字编码标准之一,是在 GB2312-80 标准基础上的内码扩展规范,使用了双字节编码。
2.1.4 ANSI(扩展的ASCII编码)
与你使用的windows操作系统的语言有关系的,向windows 7 简体中文版就是GBK(用一个字节表示英文,用两个字节表示一个中文)。
2.1.5 Unicode编码
这是一种世界上所有字符的编码,但是它没有规定的存储方式。
Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。
现代操作系统和大多数编程语言都直接支持Unicode。
Unicode在内存中使用
2.1.6 UTF-8编码
是 Unicode Transformation Format - 8bit 的缩写, UTF-8 是 Unicode 的一种实现方式。它是可变长的编码方式,可以使用 1~4 个字节表示一个字符,可根据不同的符号而变化字节长度。
utf-8在文件传输和存储时使用
2.2 python的编码问题
2.2.1 Python2.7
版本
需要专门考虑中文字符的输出问题,字符串无法完全地支持国际字符集和Unicode编码,因为Python2中 普通字符串实际上就是已经编码(非Unicode)的字节字符串,即str类型,转化为unicode需要进行解码(decode)
2.2.2 Python3版本
所有的字符串默认已经是Unicode编码了,即unicode类型。如果你想使用非Unicode字符串,需要对字符串内容再做编码(encode),编码为你需要得编码格式,编码好的类型为 bytes 类型
总结一句话:
因为Unicode把所有语言都统一到一套编码里,所以Python3几乎已经不需要考虑中文等字符不兼容得问题
>>> s="中国" # Unicode类型(默认类型),可以用于计算机内存中,不能用于文件存储和网络传输
>>> type(s)
<class 'str'>
>>> s=s.encode("utf-8") # 编码成bytes类型,可用于文件存储和网络传输
>>> type(s)
<class 'bytes'>
>>> s
b'\xe4\xb8\xad\xe5\x9b\xbd'
>>> s+"中国"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't concat str to bytes
>>> s+s
b'\xe4\xb8\xad\xe5\x9b\xbd\xe4\xb8\xad\xe5\x9b\xbd'
>>> s=s+s
>>> s.decode("utf-8")
'中国中国'
# Unicode(str类型)===>encode()===>bytes类型
# bytes类型===>decode()===>Unicode(str类型)
>>> s="中国" # str类型
>>> s.decode("utf-8")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'decode'. Did you mean: 'encode'?
>>> s.encode("utf-8")
b'\xe4\xb8\xad\xe5\x9b\xbd'
>>> s=s.encode("utf-8")
>>> s
b'\xe4\xb8\xad\xe5\x9b\xbd'
>>> s.encode("gbk")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'bytes' object has no attribute 'encode'. Did you mean: 'decode'?
>>> s.decode("utf-8")
'中国'
解决py文件中文乱码的问题:
1、把程序文件,保存为utf-8编码
2、程序文件头不声明编码,或者声明#encoding=utf-8
2.3 字符编码检测-chardet
注意: chardet检测时,被检测的字符必须足够多,过少的话会不准
C:\Users\asus>pip install chardet
Collecting chardet
Downloading chardet-4.0.0-py2.py3-none-any.whl (178 kB)
|████████████████████████████████| 178 kB 285 kB/s
Installing collected packages: chardet
Successfully installed chardet-4.0.0
>>> import chardet
>>> s="今天星期一,天气晴!"
>>> s=s.encode()
>>> s
b'\xe4\xbb\x8a\xe5\xa4\xa9\xe6\x98\x9f\xe6\x9c\x9f\xe4\xb8\x80\xef\xbc\x8c\xe5\xa4\xa9\xe6\xb0\x94\xe6\x99\xb4\xef\xbc\x81'
>>> chardet.detect(s)
{'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}
2.4 判断是否是字符串-isinstance()
>>> s="中国"
>>> s
'中国'
>>> isinstance(s,str)
True
>>> a=s.encode()
>>> isinstance(a,bytes)
True
>>> isinstance(a,str)
False
2.5 进制转换
2.5.1 bin( number ):
内置函数,接收一个数字,可以是二进制数、八进制数、十进制数和十六进制数,返回以0b开头的二进制字符串表示
>>> bin(0b111)
'0b111'
>>> bin(111)
'0b1101111'
>>> bin(0o11)
'0b1001'
>>> bin(0xA1)
'0b10100001'
>>> type(bin)
<class 'builtin_function_or_method'>
2.5.2 oct( number ):
内置函数,接收一个数字,可以是二进制数、八进制数、十进制数和十六进制数,返回以0o开头的八进制字符串表示
>>> type(oct)
<class 'builtin_function_or_method'>
>>> oct(0b1111)
'0o17'
>>> oct(0o167)
'0o167'
>>> oct(16)
'0o20'
>>> oct(0xFFF)
'0o7777'
2.5.3 hex(number ):
内置函数,接收一个数字,可以是二进制数、八进制数、十进制数和十六进制数,返回以0x开头的十六进制字符串表示
>>> type(hex)
<class 'builtin_function_or_method'>
>>> hex(0b1001)
'0x9'
>>> hex(16)
'0x10'
>>> hex(15)
'0xf'
>>> hex(0o100)
'0x40'
>>> hex(0xAF11)
'0xaf11'
2.5.4 int():
是一个类,构造函数如下:
int(x=0) -> integer
int(x, base=10) -> integer
函数作用:把一个数字或者字符组转换为一个整数,
参数说明:
如果没有指定任何参数返回的是数字0;
如果输入的是浮点数返回的只有整数部分,相当于向下取整;
如果给定了参数base那么x必须是字符串或bytes或bytearray instance ;
base有效的取值是0,或2-36,默认值是10,代表x是十进制;base为0表示x按照字面意思进行解析
>>> int(12.98) #将浮点数向下取整
12
>>> int('0o10',base=0) #0o代表八进制,此语句等价于int('0o10',base=8)
8
>>> int('10',base=0) #默认为十进制,此语句等价于int('10',base=10)
10
>>> int('0b1010',base=0) #0b代表二进制,等价于int('0b1010',base=2)
10
>>> int('0x10',base=0) #0o代表十六进制,等价于 int('0x10',base=16)
16
>>> int('0b1010',base=2) #表示将二进制的0b1010转换成10进制数
10
>>> int(0b10) #直接将输入的二进制转换为十进制数
2
>>> int(0o10) #直接将输入的八进制转换为十进制数
8
>>> int(0x10) #直接将输入的十六进制转换为十进制数
16
>>> int(10) #返回的数据和输入的一致
10
>>> int('15',base=16) #表示将16进制的0x15转换成10进制数
21
>>> int('15',base=8) #表示将8进制的0o15转换成10进制数
13
>>> int('15',base=10) #表示将10进制的15转换成10进制数
15
>>> int('15',base=2) #将2进制的0x15转换成10进制数,二进制只有0、1,所以会抛出ValueError异常
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 2: '15'
十进制转二进制并进行加减运算:
>>> bin(3)+bin(2) #bin()返回的是字符串,直接相加的话相当于字符串的连接
'0b110b10'
>>> int(bin(3),base=2)
3
>>> int(bin(3),base=2)+int(bin(2),base=2)
5
>>> bin(int(bin(3),base=2)+int(bin(2),base=2))
'0b101'
>>> a=9
>>> bin(a)
'0b1001'
>>> type(bin(a))
<class 'str'>
>>> bin(a)[2:]
'1001'
>>> "00"+bin(a)[2:]
'001001'
>>> bin(a)[2:].zfill(len(bin(9)))
'001001'
# 格式化字符
>>> "abc".zfill(8)
'00000abc'
>>> "abc".ljust(8,"*")
'abc*****'
>>> "abc".rjust(8,"*")
'*****abc'
>>> "abc".center(8,"*")
'**abc***'
三、python基础
3.1 help()
help
命令可以查看语句或对象的使用方法