深圳幻海软件技术有限公司 欢迎您!

蓝桥杯python组————笔记整理

2023-04-26

现状:分母一枚明年争取做分子;目的:因为刚接触python也没学几天整个思路就很混乱想整理一下笔记,顺便学下咋写博客,也能当个免费笔记本。***内容可能有很多错误,等我升级打怪发现了再改吧qvq***目录一、常用的一些emm(不知道咋形容这一堆...)1.常用输入格式2.常用函数1).十进制转化为二

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

目的:因为刚接触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

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

2)itertools模块

permutations():全排列

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

combinations():求取组合数 

  1. from itertools import *
  2. n=0
  3. for i in combinations([i for i in range(5)], 2): # n:列表中两个数组合的次数
  4. n+=1
  5. print(i)
  6. print(n)
  7. """以下是输出内容
  8. (0, 1)
  9. (0, 2)
  10. (0, 3)
  11. (0, 4)
  12. (1, 2)
  13. (1, 3)
  14. (1, 4)
  15. (2, 3)
  16. (2, 4)
  17. (3, 4)
  18. 10
  19. """

二、使用help()找模块

1.输入help()

2.输入需要查找的模块

举个栗子:

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

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


三.常见的算法(python)

代码源于大佬:

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

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

  1. def binary_search(li,val): # li:列表 val:查询值
  2. left=0 # left:查询范围最左边的下标
  3. right=len(li)-1 # right:查询范围最右边的下标
  4. while left<=right: # 必要条件:left<=right
  5. mid=(left+right)//2
  6. if li[mid] == val:
  7. return mid
  8. elif li[mid]> val: #查询值val 在 li[mid]值 的左边时,查询范围重新划分(li[left],li[mid-1])
  9. right = mid-1
  10. else:
  11. left =mid+1
  12. else:
  13. return None

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

2.冒泡排序

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

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

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

3.冒泡排序(升级版)

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

  1. import random
  2. def bubble_sort(li):
  3. exchange=False
  4. for i in range(len(li)-1):
  5. exchange=False
  6. for j in range(len(li)-i-1):
  7. if li[j]>li[j+1]:
  8. li[j],li[j+1]=li[j+1],li[j]
  9. exchange=True
  10. print(li)
  11. if not exchange:
  12. return

4.选择排序

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

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

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

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

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

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

6.!!插入排序

我的理解:

场景:武林大赛

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

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

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

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

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

  1. import time
  2. t=time.time()
  3. <填写相关题的代码>
  4. print(time.time()-t) #可输出自己代码的运行的时间
  5. #注意在最后提交的过程中记得删去哦!!!

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

参考代码指路,小蓝大佬主页: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

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

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

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

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

3).跑步锻炼

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


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

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

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

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

 

 

 

文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览45066 人正在系统学习中