目录
[(18)ASCII 编码、ord函数和chr函数](#(18)ASCII 编码、ord函数和chr函数)
[(21)用%或 format 在字符串里面插入变量值](#(21)用%或 format 在字符串里面插入变量值)
[(22)用 format 函数格式化数字和字符串](#(22)用 format 函数格式化数字和字符串)
[bytes 函数](#bytes 函数)
[decode 和 encode 函数](#decode 和 encode 函数)
[codecs 模块](#codecs 模块)
(1)print函数
打印一个段落:用三个双引号
python
print("""锄禾日当午,
汗滴禾下锄。
谁知盘中餐,
粒粒皆辛苦。
""")
end参数:参数 end 的默认值是换行符"\n",即打印内容后自动换行,也可以指定为其它内容
python
print("AAA", end="x")
print("BBB", end=' ')
print("CCC", end='***')
# AAAxBBB CCC***
sep参数:print传入多个变量打印时,变量之间用什么符号进行间隔,默认是空格
python
print(1, 2, 3) # 1 2 3
print(1, 2, 3, sep="###") # 1###2###3
(2)注释
注释行
python
# 这里是注释内容
注释段,三个单引号
python
''' 注释内容
注释内容
注释内容
'''
注释多行也可以用三个双引号
python
"""
注释内容
注释内容
"""
快速给多行代码添加和取消注释:ctrl + /。它会给多行代码每行添加#。
(3)input函数
作用:从控制台读取输入。参数为提示内容,返回值为字符串。
python
string = input("请输入内容:")
radius = eval(input("请输入半径:"))
print(string)
print(radius)
(4)同时赋值和连续赋值
python
# 1.同时赋值
# 重要应用:交换变量值
x, y, z = 1, 2, 5
print(x, y, z)
x, y = y, x
print(x)
print(y)
a, b, c = eval(input("请用英文逗号隔开输入三个数字:")) # 2, 4, 7
print(a, b, c)
# 2.连续赋值
x = y = 1
print(x, y)
(5)type函数和id函数
type函数:查看变量的类型
id函数:查看变量的内存地址
python
a = 1
print(type(a)) # <class 'int'>
print(id(a)) # 1387529267504
if type(a) == int: # 类型判断
print("a is int")
b = 1.0
print(type(b)) # <class 'float'>
if type(b) == float: # 类型判断
print("b is float")
c = complex(1, 2) # python自带复数类型
print(type(c)) # <class 'complex'>
if type(c) == complex: # 类型判断
print("c is complex")
d = None
print(type(d)) # <class 'NoneType'>
if d is None: # 类型判断
print("d is None")
e = [1, 2, 3]
print(type(e)) # <class 'list'>
if type(e) == list:
print("e is list")
f = {"ZhangSan": 18, "Tom": 19}
print(type(f)) # <class 'dict'>
if type(f) == dict:
print("f is dict")
(6)python赋值是地址赋值
以x=y为例,地址赋值的意思就是将y的值赋值x,x的地址值为y的地址
python
x = 3
y = 3
print(id(x), id(y))
# 2471996909936 2471996909936 # 地址相同
value = 100
m = value
n = value
print(id(value), id(m), id(n))
# 2471997101520 2471997101520 2471997101520 # 地址相同
lst = [1, 2, 3]
lst1 = lst
lst2 = lst
print(id(lst), id(lst1), id(lst2))
# 2472002138432 2472002138432 2472002138432 # 地址相同
(7)基本运算符和增强型赋值运算符
基本运算符
|------|----|--------------|
| 符号 | 含义 | 举例 |
| + | 加法 | 34+1 |
| - | 减法 | 34-1 |
| * | 乘法 | 300*10 |
| / | 除法 | 1/2,返回0.5 |
| // | 整除 | 1//2,返回0 |
| ** | 幂 | 4**0.5,返回2 |
| % | 取余 | 20%3,返回2 |
增强型赋值运算符,由算术运算符和=组成
以*=为例,i*=8就是i=i*8的简写
python
x = 1
x += 3
print(x) # 4
y = 2
y *= 3
print(y) # 6
(8)科学记数法
浮点数可以用 a × 10**b 形式的科学计数法来编写
比如 123.456 的科学计数法为 1.23456 × 10** 2 , 0.0123 的科学计数法为 1.23 × 10**( −2)
在 python 中 1.23456 × 10** 2 被写作 1.23456E+2 或者 1.23456E2 ,而 1.23 ×10**( −2) 被写作 1.23E-2
python
x = 1.23456E+2
print(x) # 123.456
y = 1.23456E2
print(y) # 123.456
z = 1.23E-2
print(z) # 0.0123
(9)类型转换
要转化为什么类型就用什么类型的函数
int函数:取浮点数的整数部分
float 函数:整数变浮点数
python
print(int(5.6)) # 5
print(float(5)) # 5.0
int 函数也可以将整数字符串转换为整数,比如 int("34")返回 34
注意的是 int 函数只能是整数字符串的转换,比如 int("3.4") 会报错
int 函数将整数字符串转换为整数时还可以有第二个参数,第二个参数表示这个整数的进制,返回对应 10 进制的整数
python
print(int("10", 8)) # 8
print(int("12", 8)) # 10
str函数:转化为字符串
python
x = 123
ret = str(x)
print(type(ret)) # <class 'str'>
print(ret) # 123
list函数:转化为list
python
x = (1, 2, 3)
ret = list(x)
print(ret) # [1, 2, 3]
y = "abc"
ret = list(y)
print(ret) # ['a', 'b', 'c']
(10)eval函数
eval函数十分强大,参数传入python类型数据的字符串,能主动识别字符串以应该返回什么数据
python
a = "123"
ret = eval(a)
print(type(ret)) # <class 'int'>
print(ret) # 123
b = "3 + 4"
ret = eval(b)
print(type(ret)) # <class 'int'>
print(ret) # 7
c = "[5, 6, 7]"
ret = eval(c)
print(type(ret)) # <class 'list'>
print(ret) # [5, 6, 7]
d = "{'a': 1, 'b': 'xxxxx'}"
ret = eval(d)
print(type(ret)) # <class 'dict'>
print(ret) # {'a': 1, 'b': 'xxxxx'}
(11)删除变量
语法:del varName
作用:内存回收
python
num = 1
print(num) # 1
del num
print(num) # NameError: name 'num' is not defined
(12)一条语句多行显示和多条语句一行显示
python
# 一行变多行
# 法一,加反斜号
x = 2
if x % 2 == 1 and \
x > 50:
print(x)
# 法二,加括号
x = 2
if ( x % 2 == 1 and
x > 50):
print(x)
# 多行变一行,用分号
num1 = 1 ; num2 = 4 ; num3 = 5 ; print(num1, num2, num3)
(13)dir函数
作用:查看一个模块或者一个类的所有属性和方法
python
import math
print(dir(math))
"""
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc', 'ulp']
"""
(14)help函数
作用:查看一个函数或者方法的详细用法
python
import os
help(os.path.join)
"""
Help on function join in module ntpath:
join(path, *paths)
#
(15)os.system函数
作用:运行系统的命令
以windows为例
python
import os
os.system("calc") # 打开计算器
os.system("notepad") # 打开记事本
os.system("echo mystrxxx") # 打印文本
os.system("task kill /f /im notepad.exe") # 关闭记事本
os.system("task kill /f /im QQ.exe") # 关闭 QQ
# 用代码打开软件
os.system("\"C:\\Program Files (x86)\\Tencent\\WeChat\\WeChat.exe\"")
(16)输入输出重定向
输出:以print函数为例,默认输出到输出设备比如屏幕上
输入:以input函数为例,默认手动从键盘获取输入
输入输出重定向的意思就是改变输出或者输入源
现在我们进行"输入输出重定向"
输入重定向
从 txt 文本文件中输入
python
python 文件名.py < 输入文件名.txt
每次读取一行(只读取一次的话,就是读取第一行的文本/数据)
输出重定向
将输出显示在 txt 文本文件中
bash
python 文件名.py > 输出文件名.txt
# 写入文本覆盖 # 若文件不存在则创建一个新文件
bash
python 文件名.py >> 输出文件名.txt
# 追加模式
方便的句式
bash
python 文件名.py < 输入文件名.txt >> 输出文件名.txt
(17)round函数
round(x):将x这个浮点数四舍五入为整数
round(x, n):浮点数小数位四舍五入保留n位
(18)ASCII 编码、ord函数和chr函数
ASCII 编码
-
字符编码的方式有很多
-
流行的编码标准是 ASCII 编码(美国信息交换标准代码),使用 0 到 127 来表示字符,ASCII 一共 128 个
-
对应键盘上的128个符号,每个符号对应一个ASCII值,从0 到 127
-
十进制中,数字 0 的 ASCII 码是 48,字母 A 的 ASCII 码是 65,字母 a 的 ASCII 码是 97
-
任何小写字母的 ASCII 码减去其大写字母的 ASCII 码都是 32
ord函数
ord(ch)来返回字符 ch 的 ASCII 码
chr函数
chr(ASCII值)来返回该 ASCII 码所代表的字符
python
x = ord('a')
print(x) # 97
s = chr(x)
print(s) # a
y = ord('A')
print(x - y) # 32
(19)统一码
python 也支持统一码,unicode
统一码是一种编码表, ASCII 码是统一码的子集
统一码由统一码协会建立, 支持世界上各种语言所写的文本进行交换、处理和展示
统一码以 "\u" 开始,从 "\u0000" 到 "\uFFFF"
python
print("\u6B22") # 欢
print("\u8FCE") # 迎
print("\u3434") # 㐴
汉字 Unicode 编码范围:中文字符集 Unicode 编码范围
(20)转义序列
由\和紧跟着单双引号斜线或者字母的组合被称为转义序列
常用的转移序列有:
- \t 是制表符,就是一个 tab 键,相当于缩进四个空格
- \b 是退格符,在打印时向后退一个空格,作用是将后面那个字符给消除掉了
- \n 是换行符,换行符后的内容将在下一行打印出来
- \"、\'、\\,表示将双引号、单引号或斜线不具有其它的含义,单纯只是符号,而不像字符串双引号具有作用
- 其它转义序列
python
print("He said, \"John's program is easy to read\"")
# 同时使用单引号和双引号,也可起到转义序列的作用
sayHello = '他说:"你好啊"。'
print(sayHello)
print("ab\bcd") # "acd"
print("\tabcd") # " abcd"
print("ab\ncd") # cd 在 ab 的下一行
print(r"C:\Users\xxxx\Desktop\tools") # 用 r 解决时,不用输入转义字符
# \t 是制表符,默认占 4 个空格大小的位置
s = "11\t2\t3"
print(len(s))
print(s)
print("11xx2xxx3")
'''
6
11 2 3
11xx2xxx3
'''
(21)用%或 format 在字符串里面插入变量值
%用法
% 语法
%c 字符,%d 整数,%s 字符串,%f 浮点数,%e 科学计数形式
python
a = 100
b = 297.364
c = 15487.275
mystr1 = "我卖了%d 个商品,每个卖%.2f 元,利润是%.2f 元" % (a, b, c)
print(mystr1)
print("hello %% %f" %(10.5)) #
# %%代表输出一个%,为了区别
mystr3 = "我卖了%d 个商品,每个卖%-10.2f 元,利润是%10.2f 元"%(a, b, c)
# 默认右对齐,-表示左对齐
print(mystr3)
# 我卖了 100 个商品,每个卖 297.36 元,利润是 15487.27 元
mystr4 = "我卖了%d 个商品,每个卖%010.2f 元,利润是%010.2f 元"%(a, b, c)
# 宽度为 10,默认填充空格,设置填充 0
print(mystr3)
# 我卖了 100 个商品,每个卖 0000297.36 元,利润是 0015487.27 元
format用法
format 语法(巧记:冒号 4.2)
python
a = 100
b = 297.364
c = 15487.275
mystr2 = "我卖了{}个商品,每个卖{:.2f}元,利润是{:.2f}元".format(a, b, c)
print(mystr2)
将整数 5 格式化 05 的方法: {:02d}
python
mystr1 = "中间{:02d}是个数".format(5)
mystr2= "中间{:03d}是个数".format(5)
mystr3= "中间{:0003d}是个数".format(5)
print(mystr1) # 05
print(mystr2) # 005
print(mystr3) # 005
第二种方法:
python
ret = format(5, "02d")
print(type(ret)) # <class 'str'>
print(ret) # 05
format简化用法:
python
num = 5
ret = f"这里有{num}个公司"
print(type(ret)) # <class 'str'>
print(ret) # 这里有5个公司
(22)用 format 函数格式化数字和字符串
调用这个函数的语法是: format(item, format-specifier)
此函数返回的是一个字符串
对浮点数保留两位小数
python
interest = 16.404674
interest = round(interest,2)
print(interest) # 16.4
然而我们想要的是 16.40 这种效果
python
interest = format(interest, ".2f")
print(interest) # 16.40
1.格式化浮点数
示例
python
interest = 16.404674 # interest 是要格式化的浮点数
interest = format(interest, "^10.3f")
print(interest) # " 16.405 "
用法讲解:
- <表示左对齐,>表示右对齐,^表示居中对齐,不设置时默认为右对齐
- 10 表示整个字符串占的宽度,不设置时默认为浮点数本身的宽度。如果字符串超过设置的宽度则默认为字符串的宽度,如果不够则自动填充空格。
- 3 表示保留的小数位数
- f表示是格式化浮点数
2.格式化为科学计数法形式
f 换成了 e
python
s1 = format(14.6273, "10.2e")
s2 = format(0.0146273, "<10.3e")
print(s1) # " 1.46e+01"
print(s2) # "1.463e-02 "
3.格式化为百分数形式
f 换成了%
python
s1 = format(14.6, "<10.2%")
s2 = format(0.0142, "10.3%")
print(s1) # "1460.00% "
print(s2) # " 1.420%"
4.格式化整数
b 表示转换为二进制,o 是八进制,d 是十进制,x 是十六进制
python
s1 = format(111, "<10b")
s2 = format(111, ">10o")
s3 = format(111, "^10d")
s4 = format(111, ">10x")
print(s1) # "1101111 "
print(s2) # " 157"
print(s3) # " 111 "
print(s4) # " 6f"
将整数 5 格式化 05 的方法
python
ret = format(5, "02d")
print(type(ret)) # <class 'str'>
print(ret) # 05
5.格式化字符串
有时用来统一宽度进而对齐打印很好用
只有字符串默认对齐方式左对齐
格式最后面的参数是 s
python
string = "Python is fun"
s1 = format(string, "<20s")
s2 = format(string, ">20s")
s3 = format(string, "^20s")
s4 = format(string, "20s")
print(s1) # "Python is fun "
print(s2) # " Python is fun"
print(s3) # " Python is fun "
print(s4) # "Python is fun "
(23)整数不同进制之间的转化
python
# 在赋值的时候确定进制,在数字前面加 0x,0o,0b
a = 0x10 # 16 进制的 10,就是 10 进制的 10
b = 10 # 10 进制的 10
c = 0o10 # 8 进制的 10
d = 0b10 # 2 进制的 10
print(a, b, c, d, sep = " || ") # 16 || 10 || 8 || 2
print(0b101 + 6) # 11
print(0b101 + 0x12) # 23
# 10 进制转为其他进制
print(hex(100)) # 10 进制转换为 16 进制 # 0x64
print(oct(10)) # 10 进制转换为 8 进制 # 0o12
print(bin(10)) # 10 进制转换为 2 进制 # 0b1010
(24)汉字和英文字符比较
长度比较
一个汉字是一个字符
一个英文字母是一个字符
python
s1 = "你好"
print(len(s1)) # 2
s2 = "ab"
print(len(s2)) # 2
占用字符个数比较
以存储到txt文为例
一个汉字占用 3 个字节的内存(utf-8编码时),或者占用2个字节的内存(gbk编码时)
一个英文字母占用 1 个字节的内存
python
print(bytes("我", "utf-8")) # b'\xe6\x88\x91'
print(bytes("我", "gbk")) # b'\xce\xd2'
print(bytes("x", "gbk")) # b'x'
print(bytes("x", "gbk")) # b'x'
(25)python2和python3区别
字符串编码区别
在 python2 中,普通字符串是以 8 位 ASCII 编码进行存储的
在 python3 中,所有字符串都是 Unicode 编码
Unicode 字符串则存储 16 位 unicode 字符串,这样就能够表示更多的字符集,使用的语法是在字符串前面加前缀 u
unicode 有若干种格式:utf-8,unicode-8,unicode16,gbk
python3 默认字符串是 unicode 中的 utf-8 格式
除法符号/区别
python2中类似c语言是取整,返回除法结果的整数位
python2中就是数学上的除法,返回浮点数
(26)python设置代码编码方式
在代码最方面的第一行加上以下语句
python
# -*- coding: utf-8 -*-
或者
python
#coding=utf-8
(27)字符串编码处理
bytes 函数
byte 转化为二进制编码,1 个字节
python
b = bytes(1) # byte 转化为二进制编码,1 个字节
print("bytes(1) = ", b) # b'\x00'
# \x16 进制 2^4=16 一位数的 16 进制相当于 4 位
# 所以 2 位数 16 进制相当于 8 位 (1 个字节)
utf-8 和 gbk :不同的编码大小不一样内容不一样
python
print("-"*10)
a = bytes("你 abc", "utf-8")
print(a)
a = bytes("你 abc", "gbk")
print(a)
# utf-8 一个汉字占 3 个字符,前面两个字符表示汉字,最后那个字符表示结束
print("-"*10)
print(bytes("我", "utf-8"))
print(bytes("我的", "utf-8"))
print(bytes("我的喔", "utf-8"))
# GBK 一个汉字用两个字符表示,没有结束
print("-"*10)
print(bytes("我", "gbk"))
print(bytes("我的", "gbk"))
print(bytes("我的喔", "gbk"))
运行结果
bash
----------
b'\xe4\xbd\xa0 abc'
b'\xc4\xe3 abc'
----------
b'\xe6\x88\x91'
b'\xe6\x88\x91\xe7\x9a\x84'
b'\xe6\x88\x91\xe7\x9a\x84\xe5\x96\x94'
----------
b'\xce\xd2'
b'\xce\xd2\xb5\xc4'
b'\xce\xd2\xb5\xc4\xe0\xb8'
decode 和 encode 函数
decode:解码
encode:编码
python
print(b'\xce\xd2\xb5\xc4\xe0\xb8')
print(b'\xce\xd2\xb5\xc4\xe0\xb8'.decode("gbk"))
# decode 方法,将二进制转化为文本字符串,制定编码格式
print("你好中国".encode("utf-8"))
print(b'\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\xad\xe5\x9b\xbd'.decode("utf-8"))
# decode, encode:编码一致,编码不一致时会乱码或者编码出错
# print(b'\xce\xd2\xb5\xc4\xe0\xb8'.decode("utf-8")) # 这里会报错
# encode 方法,文本字符串编码为二进制编码
print(type("hello".encode("utf-8")))
print(type(b'\xce\xd2\xb5\xc4\xe0\xb8'.decode("gbk")))
# 英文字母,两种编码都可以
# 汉字注意编码的格式
# "ignore",解码失败,强行解码
# b 开头是 bytes
print(b'\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\xad\xe5\x9b\xbd'.decode("gbk", "ignore"))
# 第一个参数:设置编码
# encoding = "utf-8"
# 第二个参数:默认是'strict',其他有'replace','ignore'
# errors = "ignore"
codecs 模块
打开文件时对编码的处理更为精细
python
import codecs
filename = r"./data/record.txt"
file = codecs.open(filename, "rb", "gbk", "ignore")
name = input("输入要查询的负心人:")
n = 0
i = 0
for line in file:
n += 1
if line.find(name) != -1:
i += 1
print(line)
print(f"一共{i}/{n}条")
(28)排列和组合
python
from itertools import combinations, permutations
# 组合 combinations
# 排列 permutations
s = "ABCD"
lst = list(s)
# 排列
list1 = list(permutations(lst, len(lst))) # 第二个参数为要选取的个数
print(list1)
# 组合
list2 = list(combinations(lst, 2))
print(list2)
end