备考蓝桥杯

文章详细介绍了备考蓝桥杯过程中遇到的各种Python编程问题,包括进制转换、字符串操作、列表处理、循环与条件判断、错误处理等,还涉及到了一些基础算法如杨辉三角、斐波那契数列和矩阵乘法。文章强调了理解规律、优化代码和处理特殊情况的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

备考蓝桥杯

1:进制转换

进制运算涉及的函数
  • 十进制转二进制,bin(i)
  • 十进制转八进制,oct(i)
  • 十进制转换十六进制,hex(i)
其他进制转十进制,都可以使用int()函数
  • 二转十,int(i, 2)
  • 八转十,int(i, 8)
  • 十六转十,int(i, 16)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NaD9oKSP-1679137655708)(image-20230208182754457.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uaDcjaG9-1679137655709)(image-20230208183122452.png)]

re_1=int(名字,进制)

error:因为输出条件是一整行,所以要把它

变成列表的形式,那么列表当中怎么添加元素呢,li.append()

append():
把一个元素追加到列表的末尾
X是列表
print(X) 输出一整个列表
print(X[-1])输出最后一个元素
[1:5]最后一个5下标不取


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u13g6CaJ-1679137655709)(image-20230208184502833.png)]

error:我输入的是 2 56 ABC 它不像一个整数,所以报错

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HTmGEy34-1679137655709)(image-20230208184712756.png)]

error:

range(1,3)为 1,2;

care:注意如果输出要变成大写的话,那么hex().upper()

len函数

返回字典,字符串,元组的长度

range

对于range来说(1,3)是从1开始

【1,3】来说是下标1开始3不取

sum:range()和【】都是一样的,前面有,后面没有

把小写转换为大写

hex.upper()

字符串的拼接

“%s”%name

or“%s,%d”%(“MAC”,name)

前面的%用于占位加精度 后面的百分号加变量

“%s”%s

care:

modfeib余数

def fibo(n):
    a,b=1,1
    for i in range(2,n+1)#n=1时for循环无法完成
         a,b=b,(a+b)mod10007
    return a #a为最终的余数
   

字母图形

【::-1】--------是从右向左遍历的意思

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8L4Qg9F8-1679137655710)(4B42518E97DF4F0C484FF6554D929735.png)]

观察规律:

第一行是从0-6

第二行前半部分是从第二个开始 后半部分是从a开始一直到结束

第三行是从c开始倒叙到b 后半部分是从a开始一直到结束

所以可以知道规律:前半部分是倒叙 后半部分是从a开始的顺序

so:

​ re_1=li[1,i]//i是第i行的意思

​ re_2=li[0,m-i+1] //那么第一行的时候0:7 输出下标为0-6 刚好7个

so re=re_1[::-1]+re_2

查找整数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FBMqGEMh-1679137655711)(image-20230213101754733.png)]

error:整数根本没有下标,只有列表才会有下标,所以li.index(整数)

杨辉三角:

1–发现规律:

杨辉三角的第一个和最后一个都是1,中间的数都要通过前面一行计算得出
中间的个数等于上面一行的行数(杨辉三角是从0行开始的)
中间的第一个(下标,是上面的第0个加上第一个计算得出)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0vNnQaUw-1679137655711)(image-20230213110418438.png)]

求特殊回文数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nazK9QoQ-1679137655711)(image-20230215190359261.png)]

这样比较傻

如果像5位6位数的话就不好计算了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jmDDnY7U-1679137655712)(image-20230215190458267.png)]like this 算烦了

so 可以把他变成列表逆了之后再比较

for i in range(10000,1000000):
    z=str(z)#也就是把整数变成字符串的意思,字符串就是列表
    if z==z(::-1):
       print(z)

正确:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qsIHhSKW-1679137655712)(image-20230215200149744.png)]

6666

单词分析:

sorted(list(set(letter)))

set(letter)把letter这个字符串变成一个集合 具有不同的字符

set():
这个函数将字符串的所有不同字符保存到集合中,(集合中只能保存不同的字符)
然后再sort()

list(set(letter))把这个集合变成一个列表
最后sorted(list(set(letter)))把他变成一个从小到大的排序

letter=input()#字符串
max_letter=None #最多的字母暂且为空
max_num=0#最多字母出现的次数
new_li=sorted(list(set(letter)))#把不重复且排序好的
for i in new_li:
    if max_num<letter.count(i):#把每个i的次数都数一遍然后更新max_num和max_letter
        max_num=letter.count(i)
        max_letter=i
print(max_letter)
print(max_num)

每日一句:python牛逼!

*成绩分析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HfQgQ2ny-1679137655713)(image-20230220105748523.png)]

四舍五入是round

回文日期分析

error:font>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uJyl5di8-1679137655713)(image-20230219145553254.png)]print语句在循环之外,也就是说遍历完整个for循坏才会进行判断是否回文数列的内容等于0

but因为这是9位数所以遍历完之后所需要的时间太长了

error:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0gAtYUUD-1679137655713)(image-20230219145839009.png)]遍历的语句在循环之内

则说明他每判断一个数都要进行一次长度的判断,一旦里面有数了,他就会一直输出好像一个死循环

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8VDBMp9Y-1679137655714)(image-20230219150143209.png)]

所以要写一个break找到了立马退出循环

*购物清单

1:包含多行的字符串必须用单引号

2:字符替换 data=data.replace(‘*’,’ ')#把 *用空白字符替换掉

3:split():拆分字符串。通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)

split()就是以空格字符串为界拆分字符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JXgSxmme-1679137655714)(image-20230219163014403.png)]1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8Bnb88Xr-1679137655714)(image-20230221204706856.png)]

error:不能除完再把它float,要先float再除

*数字三角形

list1=[list(map(int,input().split())for i in range(h)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oYzlvYpP-1679137655715)(image-20230225121853156.png)]不得不说这个是真的绝

每一行都创建一个list列表,然后每个list列表构成了一个列表

W[ i ] [j] += max(W[i - 1] [j - 1 : j + 1])代表从j-1,j,j+1 三个当中选一个最大的(6 根本没想到)

杨辉三角的性质就是,下面一个数是它上面的数相加,所以:

当杨辉三角为奇数时,整个三角形的最大和是中间的那一个数
当杨辉三角行数为偶数的时候,它的最大和就是中间数的其中一个
for i in range(1,h):
    for j in range(0,i+1):#第一行有2个数 一个01 一个1
        if j==0:
            w[i][j]+=w[i-1][j]
        elif j==i:
            w[i][j]+=w[i-1][j-1]
        else:
            w[i][j]+=max(w[i-1][j-1:j+1])#因为【】去头不取尾
  if h&1:#为奇数的话,则结果为真
    print(w[-1][h//2])#表示倒数第一行的整除2的位置
  elseprint(max(w[-1][h//2-1:h//2+1]))#中间最大的数


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kK3Ly1mn-1679137655715)(image-20230302130555835.png)]

这样的话不是整除,就可能访问到w[-1] [2.3]

故出现段错误

**数列求值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6pdaUNaG-1679137655715)(image-20230306094455652.png)]

和上面的题其实是一样的

  • 他需要你求多少位,那把前面的都mod只留后面的位数即可(减少计算量)
  • 对于feib数列 一般的想法是递归,确实简单,但是递归只能递归000次,这题不止,故采用数列的办法

a+b问题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9V5ui8dZ-1679137655716)(image-20230225125826472.png)]

int()这个函数只能int一个数 不能int一个列表

卡片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HNzGCz93-1679137655716)(image-20230225131755154.png)]

我真的服了,你str(i)str(i) i的类型还不是int sb

**递增数列:

emmm一看到就有点不会

but 有一点思路 30行50列 那么我要把他们分成30行50列的数组

然后比较

a[i]a[j]+1=a[i] [j+1]

a[i-1] [j-1]+1=a[i] [j]

a[i-1] [j]+1=a[i] [j]

然后就没思路了

只要是递增的就可以

题解:

先把他变成2维数组表,和我想的一样 nice

服了:它可以手动处理,自己处理成一个列表,即加一个【】不就行了吗,我哭死

先处理成一个一维的 然后再

for i in data:

li.append(list(i)) 再把i这个字符串变成list放到列表里

这样就变成了一个二维数组

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FQdMQKWq-1679137655716)(image-20230225135331301.png)]

abs()=abs()代表他们会在同一条水平线上

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jWnQEi30-1679137655717)(image-20230225154718905.png)]

and not(a>b and m>n) 只要有一个不对 都会返回true

而题目给的是2个字母从左到右或从上到下都是对的

image-20230226093533037

故四个方位只有一个是错的,那一个就是m<i,且n<j,故,只要不是(and not (i>m and j<n))

*排序

了解冒泡排序的次数

最多的次数是n*(n-1)/2 当n=15是刚好要交换105次,在次基础上减少5次就是把一个放在后面的数向前移5位即可

onmlkjihgfedcba一共交换105次

把j向前移5个就好

(真的是太聪明了吧)

**跑步锻炼

涉及到datatime

start=datatime.data(2000,1,1)

end=datatime.data(2020,10,1)

ans=0

while start<=end:(日期有年月日)

​ if start.day=1 or start.weekday()==0#如果天等于1号或者周一

weekday() 周一是0 周天是6

datadelta代表两个时间之间的时间差

*等差素数列

error:又是这样??乘法能怎么写吗?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Wrz8nAW-1679137655717)(image-20230228192057553.png)]

*蛇形数列

*空间

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RueqrlD5-1679137655717)(image-20230228192800991.png)]服了求素数都忘记了,是不能被他整除,故余数是为0的

def isPrime(n):
flag=true
for i in range(0,n):
   if n%i==0:
     return Flase
return flag

服了:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0tix2sfu-1679137655718)(image-20230228193753524.png)]

**分解质因数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5D3CHkMc-1679137655718)(image-20230316132846984.png)]

print(a,'=',a)#输出的话就是变量=变量
print(i,'=',a,sep='')
#sep 用来间隔多个对象,默认值是一个空格
#end 用来设定以什么为结尾 默认'\n'
num=int(input())
print(num,"=",end="")
k=2
while num>1:
    if num%k==0:#k是num的因数
        print(k,end="")
        num=num/k #如果这时候的num!=1代表后面还要
        if num>1:
            print("*",end="")
    else:
        k=k+1

6666

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZJTzvrk3-1679137655718)(image-20230314133837200.png)]

不写sep默认用“ ”分割,所以会空出一大块

# -*- coding: utf-8 -*-
#Create on:    2023-03-14 13:19:43
#author:jd
def fenj(n):
    print(n,"=",sep="" ,end="")#sep表示n和sep之间用什么分割
    k=2#最小的质素等于2
    while n>1:#n>1时都能被分解

        if n%k==0:#如果能被整除代表k是因数
             n=n/k;
             print(k,end="")
             if n>1:#还能除
                 print("*",end="")
             else:
                 print(end=" ")
        else:
            k+=1;
def isprime(n):
    for i in range(2,n):
        if n%i==0:
            return False
    return True
n,m=map(int,input().split())
for i in range(n,m+1):
    if isprime(i):
        print(i,"=",i,sep="",end=" ")
    else:
        fenj(i)

**矩阵乘法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eJCZTA0Q-1679137655719)(image-20230315190959384.png)]

1:知道矩阵的幂什么意思,2次幂其实就是×了一次

2:知道怎么求矩阵的幂: 知道他的值和具体的格式,进行传入

怎么初始化r3 来储存结果

r3=【 【】 for i in range(n)】 cool~

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XVTbmRro-1679137655719)(image-20230316132737814.png)]

这行代码也太酷了吧!!

**矩阵面积交

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F6XHdt2F-1679137655719)(image-20230318140847201.png)]

# -*- coding: utf-8 -*-
#Create on:    2023-03-18 13:40:28
#author:jd
rect1=list(map(float,input().split()))
rect2=list(map(float,input().split()))
x1=min(rect1[0],rect1[2])#把x选出来
x2=max(rect1[0],rect1[2])#把x选出来
x3=min(rect2[0],rect2[2])#把x选出来
x4=max(rect2[0],rect2[2])#把x选出来
y1=max(rect1[1],rect1[3])#把x选出来
y2=min(rect1[1],rect1[3])#把x选出来
y3=max(rect2[1],rect2[3])#把x选出来
y4=min(rect2[1],rect2[3])#把x选出来
if not (x2<x3 or x4<x1 or y4>y1 or y3<y2):
    if x1<x3:
        if y4>y2:
            a=abs(y1 - y4) * abs(x3 - x2)
            print("%.2f" % a)
        else:
            a=abs(y3 - y2) * abs(x2 - x3)
            print("%.2f" % a)
    else:
        if y4>y2:
            a=abs(y1 - y4) * abs(x1 - x4)
            print("%.2f" % a)
        else:
            a=abs(y1 - y2) * abs(x1 - x4)
            print("%.2f"%a)
else:
    print("0.00")

my

但是题解:

rect_1 = list(map(float, input().split()))
rect_2 = list(map(float, input().split()))

area = 0 #初始化矩阵连续为0,保证当后面2个矩阵不相交时
#结果为0
#找出他们的交集部分
x1 = max(min(rect_1[0], rect_1[2]), min(rect_2[0], rect_2[2]))
y1 = max(min(rect_1[1], rect_1[3]), min(rect_2[1], rect_2[3]))
x2 = min(max(rect_1[0], rect_1[2]), max(rect_2[0], rect_2[2]))
y2 = min(max(rect_1[1], rect_1[3]), max(rect_2[1], rect_2[3]))
#格式化字符串实现保留2位小数
if x1 < x2 and y1 < y2:
    area = (x2 - x1) * (y2 - y1)
    print('%.2f' % area)
else:
    print('%.2f' % area)

为什么他的那么少。。。。

直接在2个矩阵中选最干嘛的,不用认定那个矩阵

很酷,学习学习

不熟函数

类型 i dont kown

li=map(int,list(input().split()))
li1=list(map(int,input().split()))

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7xmphbwq-1679137655720)(image-20230313120913275.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JcHnmGM1-1679137655720)(image-20230313120833419.png)]

第一个是变成了list类型之后把他变成了map类型,然后map类型没有index函数

index函数只有list有

li.index(i)---------输出i的下标

大小写转换

大写变小写 lower()

str.lower()

小写变大写upper()

str.upper()

取不同的数,若交换顺序数相同则仍把他视为相同的数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rO3QXZyd-1679137655720)(image-20230311153421405.png)]

solution:

按顺序取数避免后期麻烦

为了避免三次for循环 那么最后一个k就可以是2019-i-j

保证三个数不一样那么就可以

(k>i>j)

**最大公约数(即约分数)

最大公约数就是最大公因数

怎么判断2个整数之间是不是互质

i dont know(之前做过,我又忘记了,sb)

def gcd(n,m):
    while m>0;
    c=n%m;#n永远保存大的,m永远保存小的
    n=m;
    m=c;
    return n;#n永远保存大的,代表他会先变成1,这个时候一般变成0了


again

def gcd(n,m):
    while(m>0)#m是小一点的数
    c=n%m
    n=m
    m=c
    return n
if def(n,m)==1:
    代表他们互为质素
    否则不是

保留小数 格式化字符串

print("{:.2f}".format(3.1415926))  #保留小数后2位输出为3.14
print("{:.3}".format(3.1415926)) # 表示获取3个字符 3.14
print("{:.3f}".format(3.1415926)) # 表示保留小数3位数字会自动四舍五入3.142

保留小数后2位并进行四舍五入

print(“{:.2f}”.format())

.format()

map函数:对指定序列做映射

map(function,iterable)对一个序列做映射,然后返回一个集合

map(int,input())--------意思是把它变成一个列表的形式,所以不可以乘以浮点数

列表

可以split()

求最大值最小值和

max(list)

min(list)

sum(list)

列表推导式:

超酷的列表推导式

【表达式 for 变量 in 序列】

每取一个值就创建列表中的一个元素,元素的值就是表达式的值

list1=【1 for x in range(4)】

【1,1,1,1】

list4=【len(x) for i in [‘abc’,‘hello’,‘world’]】

print(list4)

[3,5,5]

格式2

【表达式 for 变量 in 序列 if 条件语句】

让变量去序列中取值,每取一个值就判断条件语句是否为True,如果是就创建一个列元素,元素的值即为表达式的值

list6=[x for x in range(6) if x &1==0] (&是2进制01010的 所以还要换算)

math模块:

math.pow(x,y)

返回x的y次幂

count||某个字符不在字符串里

只有字符串才能用count

找其中的2有多少

for i in range(1,2021):
    num=num+str(i).count('2')

count是算这个字符在这个字符串里有多少

判断这个字符在不在这个字符串里可以

if '2' not in str(i)
6666
round函数

四舍五入的函数

round(70.2345) -------------70

没写几位小数点 那么默认为一位

round(56.659,1)------56.7 (说明了有一位小数点)

math.ceil(向上取整)

round是四舍五入,ceil是向上取整

datatime

datadelta代表两个时间之间的时间差

列如:

now=datatime.now() #时间等于现在的时间

yesterday=now-datatime.timedelta(days=1)
a=now+datatime.timedelta(hours=4.5)

#代表昨天等于今天的时间-datatime库里的timedelta(时间差,其中的时间差等于1天

datatime.data(日期表示类,表示年月日)

给变量赋值

start=datatime.data=(2002,1,1)

start.year=2002

start.month=1

start.dat=1

weekday()

weekday用于检索星期几,返回0-6之间的整数,用来代表(周一和周日)

isoweekday()

也是检索星期几,但是返回1-7的整数,用来代表周一和周日

单位换算

1tb=1024gb
1gb=1024mb
1mb=1024kB
1kb=1024b
1b=8bit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值