0%

python笔记

开发环境IDLE

exit() quit()
shift + 右键打开命令行
ctrl + o
ctrl + n #交互界面下
ctrl + q
alt + 3/4 注释与解除 注释:##
f5 run
pypi.org 库网址


pip 命令

pip list
pip install package1 package2
pip install --upgrade package
pip uninstall package


模块导入

  • 三种导入方式:
    • 导入整个模块 import模块名as模块的别名(自定义)
    • 明确导入模块中的特定对象 from模块名import对象名as别名
    • 导入特定模块中的所有对象 from 模块名 import * (不建议)

变量及数据类型

命名规范

  1. 变量名必须以字母或下划线开头,不能以数字开头。·但下划线开头的变量在Python中有特殊含义。

  2. 变量名中不能有空格或标点符号。(括号、引号、逗号、斜线、反斜线、冒号、句号、问号等)。”

  3. 不能使用关键字作为变量名。关键字( keyword,也称为保留字,Python3版本中共有33个)。

  4. 不建议使用系统内置的模块名、类型名或函数名以及已导入的模块名及其成员名作为变量名,这会改变其类型和含义,甚至会导致4 其他代码无法正常执行。

  5. 变量名对英文字母的大小写敏感绶即要区分大小写。例如:a与A是不同的变量。

  6. Python3版本可以使用中文。

  7. 变量的值是可以变化的,类型也随之发生改变。比如:a = 3 ; a = "3"
    小结:Python采用大、小写字母,数字,下划线,汉字等字符及其组合进行命名,长度没有限制,但是首字符不能是数字 ,不能出现空格与标点符号,大小写敏感,不能与关键字相同。(不建议使用中文等非英语语言字符)。

查看已有关键字

import keyword
keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

查看已有内置对象名

dir(__builtins__)

数字类型

整数

10 2 8 16进制转换:int() bin() oct() hex(),其中0b 0o 0x 代表2 8 16进制。
int('111',6)

浮点数

float("3.5") = 3.5

复数

complex(3,5) = (3+5j)
complex('3+5j') = (3+5j)

相关函数

abs()
divmond()
pow()
round()

运算符

算数运算符

+ - * / // % **

字符串相加即为拼接,集合相减为差集,字符串*3即为重复3次

优先级

  1. **
  2. * / % //
  3. + -

比较运算符

== != > < >= <=
返回值为boolean

赋值运算符(加强赋值操作符)

= += -= *= /= //= %= **=
中间不能出现空格
b *= 3+2 先算=右侧

逻辑运算符

and or not

x and y
x or y
not x

比较运算符优先于逻辑运算符

运算符优先级

成员运算符

in | not in
返回boolean

1 in (1,2)
true

身份运算符

is | is not
x is y等价于id(x) == id(y)

集合运算符

&|-^
交集并集差集对称差集

对称差集即为(a | b) - (a & b)


组合数据

字符串

str():将其他序列转化为字符串,会把集合完全转化为字符串
比如
a = str(set1)
a[0]
‘(‘
把字典转化成str的时候好像冒号后面会多个空格

字符串的创建

  1. 交互式aprint(a)的区别是少个‘’
  2. 多行字符串内敲入回车会换行,可以加\防止换行。\n表示换行。
  3. 多行字符串用'''三单'''或者"""三双"""具体可参考:《Python中单引号,双引号,3个单引号及3个双引号的区别》
  4. 反斜杠\的用处
    1. 续行符
    2. 转义符: \n表示换行符
  5. str = """他说:"你好。" """ 后面四个"必须分成1+3

字符串的索引与切片

  1. 索引index
  2. 切片slice,适用于字符串、列表、元组
    • 格式字符串名[开始索引:结束索引:方向与步长]
    • 注意:
      • 结束索引不包括在内,即左闭右开;步长默认为一。
      • 从头开始:str[:3:2]
      • 到末尾结束: str[2::3]
  3. 由字符到索引
    str.index('A')查询的是首次出现的index

字符串的运算符

+: 拼接*: 重复成员运算符:in/not in比较运算符:> < >=…

字符串的比较标准:ASCII码,Unicode编码值

  • 升序 A—Z—a—z
  • 数字从小到大
  • 若混合排序: 数字 < 大写字母<小写字母
  • 多个字符串比较时,从首位开始逐步比较。
  • chr() 返回Unicode编码值对应的字符
    ord() 返回编码值,如ord('1')

字符串格式化(format())

'你好,我是{},是{}的爸爸。'.format('Linda','Mia')
'你好,我是{1},是{0}的爸爸。'.format('Linda','Mia')

{}里面可以填写index,用来匹配format()里的参数,从0开始。
'你好,我是{},{{是{}的爸爸。}}'.format('Linda','Mia')
当想输出{}的时候,需要写成{{}},此处{}用来转义。

此处有待补充

字符串函数汇总

  1. 参考:字符串常用方法汇总
  2. eval()去掉最外侧的引号并以Python语句输出
  3. 一些图片




元组

(元组)[列表]{字典}{集合}
不可更改可更改可更改可更改,元素不可重复
  1. 元组是不能修改的,只能再生成新的元组
    tuple = ()
  2. 两个类型不一样
    tuple = (1)
    tuple = (1,)
  3. 取值
    tuple[1]
    tuple[2:5]
  4. 拼接
    tuple[1:3]+ tuple[3:5]
    注意单个元组如:tuple[2]不是元组,是不能用来和元组拼接的。
  5. 方法
    len()
    max()
    min()
    tuple(seq)
    .count()
    .index() 查第一次出现的数据的索引
  6. 比较
    元组内部的元素一般为同一种,如果不统一的话在进行某些操作的时候会报错。
  7. 遍历
    <!-- for -->
    for i in range(len(tuple)):
    print(i)
    for i in tuple:
    print(tuple[i])
    <!-- while -->
    i = 0
    while i<len(tuple):
    print(tuple[i])>

    列表

  8. 创建列表
    1. 普通创建
      list = ['','',''...]
      list = [1,2,3...]
    2. 由字符串创建
      list1 = list('abcde')
  9. 方法
    1. 增加
      .insert(索引,数据) 指定位置插入
      .append(数据) 末尾追加数据
      .extend(列表2) 拼接列表,即为list1 + list2
    2. 删除
      del list[索引] 删除指定元素
      .remove(数据) 删除第一次出现的数据
      .pop() 删除末尾的数据
      .pop(索引) 删除指定数据
      .clear() 清空
    3. 修改
      list[索引] = 数据
    4. 查询
      list[索引]
      .index(数据) 第一次出现的索引
      len() 长度
      .count(数据) 统计次数
    5. 排序
    6. 相加相乘
      list1 + list2 拼接
      list2 = list1 * 3 复制三次
    7. 复制
    【有待补充】

字典

del()
pop
if '' in d:
for key in d.keys():
for value in d.values():
.clear

list(dic) = list(dic.keys()) 只有keys
list(dic.values())
list(dic.items())
tuple 一样
for x in dic:
print(x) #输出只有keys
for x in dic.items(): #输出键值对

while不能直接遍历字典 需要转化为tuple/列表,这样才有索引,才能通过索引遍历。

集合

集合中间只能包含不可变的数据:如数字、字符串、元组。(唯一性)

set1 = {1,2,3,4}
set2 = {1,2,1,2} #自动去重
set3 = {[3,4],1,2} #报错
<!-- 空集合 空字典 空元组的创建 -->
元组名 = ()
字典名 = {}
集合名 = set()

字符串转化为集合会拆分字母,且自动去重,无序。字典转化为集合只会呈现keys。

>>> set(range(1,9))
{1, 2, 3, 4, 5, 6, 7, 8}
<!-- 声明列表 -->
s = set('python')
s = frozenset('python')
<!-- 方法 -->
.add('0')
.update([update])
.remove()
.clear
if 2 in s:
for e in s:
表示含义方法
s = s1 | s2并集s1.union(s2)
s = s1 & s2交集s1.intersection(s2)
s = s1 - s2差集s1.difference(s2)
s = s1 ^ s2两集合中不重复的元素s1.symmetric_difference(s2)

参考1:python 集合比较(交集、并集,差集)
参考2:集合方法参考


函数

杂碎知识点

return多个返回值:
return sum,product
返回值默认显示为元组(1,2)
还可以按需求为其它的形式如:
列表:return[sum,product]

基础操作

def fun1(x):
help(fun1)
dir(fun1)
fun1.

作用域

LEGB
局部闭包外全局内建

函数内部声明global a
if elif else try except for while不会引入新的作用域,其中定义的变量外部也可以访问。

基本函数

斐波那契数列的递归函数
input() | age = input('your age:')
raw_input()只存在于python2,不管输入什么的都是字符串
print()
int()
print(value1,value2,value3...,step = '\t',end = '\n', file = 'sys.stdout')

for i in range(1,5)
print(i,end='') #输出不换行

写入文件

with open ('test.txt','w') as file01:
print('hello',file = file01)
with open ('test02.txt','w') as file02:
file02.write('hello')

内置函数

工厂函数:list() tuple() dict() set() int() str()

数学函数


模拟笔记

杂碎知识点记忆

eval('代码') 执行其中的代码,并返回值
str.split() 分割,返回列表,默认以空格分割
{:->25,}.format() 格式化输出,注意->一起使用
python3.x input() 返回值是str,如需格式化输出等,可用int()eval()转换为整数 ,eval()就是去掉引号
<填充><对齐/<宽度><,><.精度><类型>等六个字段,
for i in range() i从0开始
b = 1,2,3
type(b) = tuple
type(eval('1,2,3')) = tuple
jieba.lcut() 返回值是列表
list.reverse() 会改变原来的列表,而且没有返回值
参考1:print(s[::-1])
参考2同时给多个变量赋值
a, b = 0, 1
random 之能生成0.0-1.1之间的数,randint可以指定(1,2)经过实测,是[1,2]

ifxxx:
elif xxx:
elif xxx:
else:

print("{:+^11}".format(chr(n-1)+chr(n)+chr(n+1)))字符串直接相加就行
输入多个数 a,b,c = eval(input())
try except
int(a) == a
turtle.seth
turtle.left
str.split不改变原来值
python3排序 sorted(key=lambda)
常用的用字典统计个数
d[i] = d.get[i]+1
如果是readlines读写进来的列表,其中的元素含有\n字符,算作一个字符,素以向字典添加的时候需要去掉,即为d[i][:-1] = d.get[i][:-1]+1
if len(name.split()) == 1: 记录一行有两个名字的有效票数问题
判断数据是否在字典里,不管是key还是value都可以用if data in d:
print输出多个数据的时候,可以用format格式化输出 print('{}{}{}'.format(a,b,c))
文件内容的遍历:

file = open('xxx.txt','rb')
for line in file:
print(line)

盲点

  • 位运算符
  • 优先级
  • 可变长参数
  • 格式化输出
  • 序列的方法
  • 用字典统计数目
  • 字符串中的数字怎么比较
  • format参数
  • 字符串的一些函数

软件技术基础

软件 = 程序+ 文档 = 数据结构+算法+文档

选择题笔记

x*y的作用是计算x的y次幂。
x//y的作用是计算x与y的整数商,即不大于x与y之商的最大整数。
x%y的作用是计算x与y之商的余数。
表达式中的运算符中,\
*的运算级最高,所以先计算4**2,即3*4**2//8%7=3*16//8%7=48//8%7=6%7=6。
C语言是静态编译语言,Python语言是脚本语言 静态语言和脚本语言,静态语言采用编译方式执行,脚本语言采用解释方式执行。
Python语言中的浮点数类型必须带有小数部分,小数部分可以是0。
一般代码不需要缩进,顶行编写且不留空白。当表示分支、循环、函数、类等程序含义时,在if、while、for、def、class等保留字所在完整语句后通过英文冒号结尾并在之后进行缩进,表明后续代码与紧邻无缩进语句的所属关系。
代码编写中,缩进可以用Tab键实现,也可以用多个空格(一般是4个空格)实现,但两者不混用。不会增加编程难度。
Python采用大写字母、小写字母、数字、下划线和汉字等字符及其组合进行命名,但首字符不能是数字。
Python保留字是大小写敏感的,True是保留字,true不是。
sum不是保留字,可以被当做变量使用。finally是保留字。
id()函数是Python内置函数之一,作用是获取对象的内存地址,返回对象的内存地址(是一个正整数)。
Python语言的三个重要特点:
(1)通用性:Python语言可以用于几乎任何与程序设计相关应用的开发,不仅适合训练编程思维,更适合诸如数据分析、机器学习、人工智能、Web开发等具体的技术区域。
(2)语法简洁。
(3)生态高产:Python解释器提供了几百个内置类和函数库,此外,世界各地程序员通过开源社区贡献了十几万个第三方函数库。
除此之外,还有一些具体特点:
(1)平台无关。
(2)强制可读。
(3)支持中文。
count

>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

type(type(‘45’))输出为<class ‘type’>。
以下保留字不用于循环逻辑的是try
s[0:4]表示截取字符串正向第1个字符1到正向第5个字符5(不包括5)之间的字符,即’1234’。
乘除和取模取余同级先计算5%6*2//8=5*2//8=10//8=1,再计算3+1=4
**是数值运算操作符。
&是按位与运算符,&=则是对应的二元操作符。
^是按位异或运算符。
保留字大小写敏感,False是保留字,false不是保留字。
if不用于异常处理逻辑,用于分支结构。try else finally都用于异常处理
python 不是网络编程语言
Python中出现SyntaxError一般表示语法错误,如未在if , elif , else , for , while , class ,def 声明末尾添加”:”,导致该语句无法解释执行。
int()函数用于将一个字符串或数字转换为整型,字符串’100/3’中有”/“,该文本不能转化成数值,参数无效,会报ValueError的错误。
random.random()表示取随机数,数值的类型是float型,
uniform(a,b):生成一个[a,b]之间的随机小数,3.993002365820678超出了范围。
判断字符串内是否有子字符串,可以用if xx in str:if str.coune('xx') >0:
ls.append(line.strip('\n').split(','))

👇👇👇这是练习的一道题,卡在一个点出不来了记录一下,简而言之就是👇👇👇

  1. 建议把f.read()保存到一个变量里,然后f.close()。
  2. List.sort会改变原来的列表,而且没有返回值!!!!😭
    import jieba
    d = {}
    def print_most_word (path,year):
    f = open(path,'r')
    txt = f.read()
    f.close()
    wordList = jieba.lcut(txt)
    for word in wordList:
    if len(word) >1:
    d[word] = d.get(word,0)+1
    dls= list(d.items())
    dls.sort(key = lambda x:x[1],reverse = True)
    print(str(year)+':',end='')
    for i in range(10):
    if i ==:
    print('{}:{}'.format(dls[i][0],dls[i][1]))
    continue
    print('{}:{},'.format(dls[i][0],dls[i][1]),end='')
    print_most_word('data2018.txt',2018)
    print_most_word('data2019.txt',2019)

    打开txt的时候看一下编码格式如果是utf-8那么打开的时候要注意是:f = open('data.txt','r',encoding='utf-8')
    注意如果一不小心把r写成了w,文件就会清空了!!

模拟考试知识点总结

遍历字符串:
for i in string1:
for i in len(string1):
统计字符串的某个字符的个数:
sting.count('xxx')
格式化输出的进制以及大小写
字符串索引是[index]
《python list转换字符串报错TypeError: sequence item 0: expected str instance, int found》

<!-- 提取示例 -->
while True:
s = input("请输入不带数字的文本:")
a = 0
for i in range(10):
if str(i) in s:
a =1
break
if a == 0:
break
print(len(s))

turtle.seth()是设置turtle的角度,turtle.left()是改变角度

f = open('论语-网络版.txt','r',encoding = 'utf-8')
txt = f.readlines()
f.close()
f = open('原文.txt','w',encoding = 'utf-8')
ls=[]
can_write = False
for line in txt:
if '【原文】' in line:
can_write = True
continue
if '【' in line and '【原文】' not in line:
can_write = False
if can_write:
if line != '\n':
for i in range(20):
remove_str = '('+str(i)+')'
line = line.replace(remove_str,'')
f.write(line)
f.close()

字典里面的东西写进去:

for key in d:
ls.append("{}:{}".format(key, d[key]))
fo.write(",".join(ls))
del d[' '] #删除字典中的元素
del d['\n']

字符串的截取:string[:2]
表示第0和第1.

d = input() #当输入值可能有小数时可以用eval
if d[0] == 'C': #一定要注意是==不是=
d = float(d[1:])*1.8+32
print('F{:.2f}'.format(d)) #格式化输出的语法要记牢啊
else:
d = (float(d[1:])-32)/1.8
print('C{:.2f}'.format(d))
s = input()
if s[:3] == 'RMB': #字符串截取的是左闭右开!!!
s = eval(s[3:])/6.78
print('USD{:.2f}'.format(s))
else: #不要写两个if啊,要写else
s = eval(s[3:])*6.78
print('RMB{:.2f}'.format(s))

n=float(input()) # float(xxx)其中的xxx必需全是数字,可以是小数
print(pow(n,0),pow(n,1),pow(n,2),pow(n,3),pow(n,4),pow(n,5)) # pow是内置函数,可以用**代替

all(x):组合类型变量x中所有元素都为真时返回True,否则返回False;若x为空,返回True。
any(x):组合类型变量x中任一元素都为真时返回True,否则返回False;若x为空,返回True。
y中第一个元素为一个空格,第二个元素为空,即null,所以第一个元素为真,第二个元素为假,all(y)输出False,any(y)输出True。
如果一个函数需要以多种形式来接收实参,定义时一般把位置参数放在最前面,然后是默认参数,接下来是一个星号的可变长度参数,最后是两个星号的可变长度参数。
例:def foo(x,args,*kwargs):
Python为源文件指定的默认字符编码是__。(UTF-8)
round(x,d):对x四舍五入,保留d位小数,无参数d则返回四舍五入的整数值。
当文件以文本方式打开时,读写按照字符串方式;当文件以二进制方式打开时,读写按照字节流方式。
创建写模式x,文件不存在则创建,存在则返回异常FileExistsError。
打开并关闭文件的操作,需要文件的路径名,由于”"是字符串中的转义符,所以表示路径时,使用”\“或”/“代替”"。

第三方库

网络爬虫方向
requests
scrapy
pyspider
数据分析方向
numpy
pandas
scipy

文本处理方向
pdfminer
python-docx
beautifuisoup4
数据可视化方向
matplotlib
seaborn
mayavi
用户图形界面方向
PyQt5
wxPython
PyGTK
机器学习方向
scikit -learn
TebsorFlow
mxnet
web开发方向
Diango
Pyramid
flask

游戏开发方向
Pygame
Panda3D
cocos2d

考完总结

其实吧,不用看那么多视频,就那个模拟考软件,把题库完完整整刷完搞懂就行了,考试完全没问题(我不会告诉你都是原题的)。

额外服务

邮件服务

<!-- 邮件服务 -->
# coding: UTF-8
import smtplib
from email.mime.text import MIMEText
mailserver = "smtp.163.com" #邮箱服务器地址
username_send = '******@163.com' #邮箱用户名
password = '******' #邮箱密码:需要使用授权码
username_recv = '****@qq.com' #收件人,多个收件人用逗号隔开
mail = MIMEText('xxx')
mail['Subject'] = 'xxx'
mail['From'] = username_send #发件人
mail['To'] = username_recv #收件人;[]里的三个是固定写法,别问为什么,我只是代码的搬运工
smtp = smtplib.SMTP(mailserver,port=25) # 连接邮箱服务器,smtp的端口号是25
# smtp=smtplib.SMTP_SSL('smtp.qq.com',port=465) #QQ邮箱的服务器和端口号
smtp.login(username_send,password) #登录邮箱
smtp.sendmail(username_send,username_recv,mail.as_string())# 参数分别是发送者,接收者,第三个是把上面的发送邮件的内容变成字符串
smtp.quit() # 发送完毕后退出smtp
print ('success')

自动更新更新时间

<!-- 自动更新更新时间 -->
import re
import time
import os
def change_time(path):
fileList = os.listdir(path)
for file in fileList:
allpath = path+file
f = open(allpath,'r',encoding='utf-8')
txt = f.read() #读取内容
f.close()
now = int(time.time())
old_update = re.findall(r"(updated: \d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2})",txt) # 正则匹配要修改的字符串
new_update = time.strftime('updated: %Y-%m-%d %H:%M:%S',time.localtime(int(os.path.getmtime(allpath)))) # 获取文件的最后修改时间并赋值
try:
txt = txt.replace(old_update[0],new_update) # 替换
except:
print('{}有误'.format(file)) # 排查错误
continue
else:
if now - int(os.path.getmtime(allpath)) < 86400: # 只修改当天创建或修改的文章
fi = open(allpath,'w',encoding = 'utf-8')
fi.write(txt) # 写入
fi.close() # 关闭
change_time('E:/blog/source/_posts/') #执行代码