现状:分母一枚明年争取做分子;

目的:因为刚接触python也没学几天整个思路就很混乱想整理一下笔记,顺便学下咋写博客,也能当个免费笔记本。

***内容可能有很多错误,等我升级打怪发现了再改吧qvq***


目录

一、常用的一些emm(不知道咋形容这一堆…)

1.常用输入格式

2.常用函数

1).十进制转化为二、八、十六

2).判断字符串以什么开头,结尾

3).字符串全变为大(小)写

4).列表常用函数

5).数据类型转换

6).与集合相关的一些知识点

3.常用模块

1).datetime 模块

2)itertools模块

二、使用help()找模块

1.输入help()

2.输入需要查找的模块

3.再哪里不懂输哪里,至于因为是英文嘛,就只能自求多福了<_<

三.常见的算法(python)

1.二分查找(折半查找)

2.冒泡排序

3.冒泡排序(升级版)

4.选择排序

*选择排序和冒泡排序的不同

5.欧几里得算法(求取最大公约数,以及最小公倍数)

6.!!插入排序

7.动态分析算法(暂无)

**比赛时如何查看自己代码运行的时间?

四.根据往年真题总结的内容(模板)

1.第十一届蓝桥杯省赛真题

1).门牌制作

2).寻找2020


一、常用的一些emm(不知道咋形容这一堆…)

1.常用输入格式

  • n=int(input ( )) #输入一个整数
  • a,b=map(int , input().split()) # 输入多个整数,输入时格式:整数与整数之间有空格
  • a=[[0 for i in range(n+1) for j in range(m+1)]] # 建立一个空二维列表a[m][n]
  • a=list(map(int,input().split())) # 将输入的整数存入转化为列表格式
  • input() # 输入的所有数据都为字符串类型

2.常用函数

1).十进制转化为二、八、十六

  • bin() #十转二bin(24)——>’0b11000′
  • oct() #十转八 oct(24)——>’0o30′
  • hex() #十转十六 hex(24)——>’0x18′

2).判断字符串以什么开头,结尾

  • startswith()
  • endswith()

3).字符串全变为大(小)写

  • upper() #变为大写
  • lower() #变为小写

4).列表常用函数

  • len(list) #可以计算列表和字符串的长度
  • max(list) #返回列表的最大值
  • min(list) #返回列表的最小值
  • list(seq) #将元组转换为列表
  • append(obj) #在尾部添加(一次性添加单个)
  • count(obj) #统计某元素出现的次数
  • extend(obj) #在尾部一次性添加多个
  • pop(index) #默认移除最后一个元素(按下标删除),并返回移除的元素值
  • remove(obj) #按元素删除
  • reverse() #反向输出列表
  • sort() #排序:默认升序,改变原数列
  • sorted() #临时排序,再次输出时原数列不变

……有那么亿点点晕了

5).数据类型转换

  • chr(x) #编码转换为相应字符
  • ord(x) #字符转换为相应编码

经常和ASCII结合,或者大小ABCD之类的

6).与集合相关的一些知识点

  • 创建空集合:set()
  • set.add(x) #添加元素
  • 集合中没有重复元素 #(和数学结合一下下,梦回俺的青春岁月,就高一时候,数学一开始学的那个集合,集合的特性之一)

    可以利用没有重复元素这点,储存一些不能重复出现的数据

3.常用模块

1).datetime 模块

下面只是列举了一些常用的,详细的可以参考这位大佬的!:https://blog.csdn.net/u011250186/article/details/103972471

import datetime   ##引用模块前一定要先导入#a= datetime.date(年,月,日)a= datetime.date(2002, 6, 7)b= datetime.date(2022, 4, 8)# print(b-a) ————> datetime.timedelta(days=7245)# 若要得到整型print(a.__sub__(b).days) # a-bprint(b.__sub__(a).days) # b-aprint(a.__rsub__(b).days) #b-aprint(a.day)   #输出日期print(a.month) #输出月份print(a.year)  #输出年份print(a.weekday())  #输出星期几  **输出范围为(0-6)相对应(星期一 - 星期天)print(a.isoweekday())  #也是输出星期几 **输出范围为(1-7)相对应(星期一 - 星期天)tmp = datetime.timedelta(days=1) #时间间隔

2)itertools模块

permutations():全排列

from itertools import *for i in permutations(range(n)): #将0到n-1这n个数字排序的所有情况都罗列出来    print(i)    

combinations():求取组合数

from itertools import *n=0for i in combinations([i for i in range(5)], 2):   # n:列表中两个数组合的次数    n+=1    print(i)print(n)"""以下是输出内容(0, 1)(0, 2)(0, 3)(0, 4)(1, 2)(1, 3)(1, 4)(2, 3)(2, 4)(3, 4)10"""

二、使用help()找模块

1.输入help()

2.输入需要查找的模块

举个栗子:

往下翻翻就能知道查找内容类的关系:

3.再哪里不懂输哪里,至于因为是英文嘛,就只能自求多福了<_<


三.常见的算法(python)

代码源于大佬:

https://www.bilibili.com/video/BV1uA411N7c5?spm_id_from=444.41.header_right.fav_list.click

1.二分查找(折半查找)

def binary_search(li,val):     # li:列表  val:查询值    left=0                     # left:查询范围最左边的下标    right=len(li)-1            # right:查询范围最右边的下标    while left<=right:         # 必要条件:left val:    #查询值val 在 li[mid]值 的左边时,查询范围重新划分(li[left],li[mid-1])            right = mid-1        else:            left =mid+1           else:        return None

真题运用实例:http://lx.lanqiao.cn/problem.page?gpid=T2912

2.冒泡排序

(砸门就是说,上上链接视频的ppt真的是好厉害啊)

**冒泡排序大体上说就是:相邻两数比较大小然后换位,一直到数列有序。

import randomdef bubble_sort(li):       for i in range(len(li)-1): #第i趟(为什么-1:排序完倒数第二个数时,剩下的最后一个数就不需要再排一趟)              for j in range(len(li)-i-1):  #j:是相邻两数比较的前一个数的下标,#排序范围为(len(li)-1)其中每走完1趟,排序的范围就少1一个数,走i趟排序范围就少i个数(len(li)-1-i)            if li[j]>li[j+1]:                li[j],li[j+1]=li[j+1],li[j] #利用元组性质互换值

3.冒泡排序(升级版)

加了个判断,判断序列是否发生交换,时间复杂度减小了

import randomdef bubble_sort(li):    exchange=False    for i in range(len(li)-1):        exchange=False        for j in range(len(li)-i-1):            if li[j]>li[j+1]:                li[j],li[j+1]=li[j+1],li[j]                exchange=True        print(li)        if not exchange:            return

4.选择排序

思路:将列表中没有排序的第一个数作为交换位,每次遍历完一趟让后面的最小值和它进行交换。

def select_sort(li):     for i in range(len(li)-1): #i是第几趟,为什么-1?和冒泡排序类似        min_loc=i #假定最小值下标为i        for j in range(i,len(li)): #j:从哪到哪。第0趟:从0到最后;第1趟:从1到最后(其中有序区在开头和冒泡排序相反)            if li[j]<li[min_loc]:                min_loc=j        li[i],li[min_loc]=li[min_loc],li[i] #找到了最小值,让无序区第一个值和最小值交换        print(li)           

*选择排序和冒泡排序的不同

  1. 一趟交换的次数不同:选择排序一趟只交换一次;冒泡排序一趟交换多次
  2. 有序区和无序区的位置不一样:选择排序的有序区在列表前端;冒泡排序的有序区在列表尾端。

5.欧几里得算法(求取最大公约数,以及最小公倍数)

#gcd(a,b):求a,b之间最大约数import mathdef gcd(a,b):    a=math.gcd(a,b)    return a 
#利用最大约数求取最小倍数import mathdef gongbeishu(a,b):    x=a*b//math.gcd(a,b) #a*b一定是两数的倍数,再除以两个数共有的最大约数,剩下就是最小倍数啦    return x

6.!!插入排序

我的理解:

场景:武林大赛

事件:全武林高手相聚一堂,先按照上一届的武林排名依次坐在位置上,上一届的武林第一我们就叫他小琦吧!是小琦!!!然后顺位第二发起比武者)向小琦(第一位接受比武)发起比武,若第二位赢了小琦,则小琦就暂时排名第二(赢了的条件就是对应的值小的),然后顺位第三位(下一个发起比武者)和刚刚暂时已经排好序的第二名(接受比武者),第一名(接受比武者)依次比试切磋(若连暂时第二位都没打过,就不用和第一位打了,就排在第二位的后面,也就是暂时排名第三位)由此类推。

def insert_sort(li):    for i in range(1,len(li)):  #为什么从1开始?因为发起比武的人从第二名开始        tmp=li[i]               #发起比武的人对应的值        j=i-1                   #接受比武的人的位置下标        while j>=0 and li[j]>tmp: #若接受比武的人在这次比试范围内,且接受比武者的值大于发起比武的值,则接受比武者输了,排在发起比武者后            li[j+1]=li[j] #对应排名位置下标后移            j-=1        li[j+1]=tmp        print(li)  

7.动态分析算法(暂无)

(*学的时间太短了,还没来得及看,先挖个坑以后慢慢填*)

**比赛时如何查看自己代码运行的时间?

import timet=time.time()print(time.time()-t) #可输出自己代码的运行的时间#注意在最后提交的过程中记得删去哦!!!

四.根据往年真题总结的内容(模板)

参考代码指路,小蓝大佬主页:https://blog.csdn.net/m0_55148406?type=blog

1.第十一届蓝桥杯省赛真题

代码参考还是来源于小蓝:蓝桥杯python组十一届省赛真题+解析+代码(通俗易懂版)_小蓝刷题的博客-CSDN博客_蓝桥杯python省赛历年真题

省赛题目:https://www.lanqiao.cn/courses/2786/learning/?id=88912

1).门牌制作

问题其终极目标只有一个,那就是!!!

——1到2020(包括2020)一共有几个数字2


关键:将1到2020的整型数转化为字符型再利用count()来统计含有2的个数

关键代码:str(i).count(‘2’)


该题和美丽的数字2类似,但是美丽的数字2的问题和它不一样(因为粗心理解错了它的题目,自己打出来的代码和答案不一样郁闷了贼久,所以一定一定要细心细心再细心)

要求的是:1到2020的整数中含有2的个数


关键代码:if str(i).count(“2”)>0: #判断有没有2,有就进入if内

2).寻找2020

这个题有个文件读取的考点!!!

lines=[]with open('2020.txt','r') as f:  #和代码保存在同文件下    for line in f.readlines():        lines = line.strip('\n')        lines.append(line)result=0

其次矩阵的话,就很好遍历出列表的每个数(**因为是矩阵,所以其行和列相等**)采用两层for循环

for i in range(len(lines)):    for j in range(len(lines)-3):   #为什么减3?因为下一排j要多加3,为了保证列数和行数相等        if lines[i][j] == '2' and lines[i][j+1] == '0' and lines[i][j+2]== '2' and lines[i][j+3] == '0':            result +=1

3).跑步锻炼

这个题要写代码的话,重点就是调用datetime模块,然后再累加计算


若要计算日期差值的话可以用电脑的计算器(比赛也可以用哦!!)

方法: win+r (打开运行窗口)

然后输入calc (计算器就自动跳出来了)

点击左上角的三根横线,出现下面的界面,再点击日期计算(还能进制转换哦!!!)