2024年最新蓝桥杯 基础练习全解 答案+解析 共17题 python,2024年最新面试必备知识点总结

文末有福利领取哦~

👉一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。img

👉二、Python必备开发工具

img
👉三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
img

👉 四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(文末领读者福利)
img

👉五、Python练习题

检查学习结果。
img

👉六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
img

img

👉因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!


十六进制转十进制


在这里插入图片描述

理解完上一题后这一题就不难了,同样使用python内置函数求解。

h = input()

print(int(h,16))


十进制转十六进制


在这里插入图片描述

python内置函数hex可以将十进制数转换成十六进制数。同样的使用hex函数转换后会有个前缀,“0x”表示这是一个十六进制的数,但题目要求不能有前缀,所以我们需要用切片将其去除。另外,题目要求字母要大写,而经过hex函数转换过来的是小写字母,因此,我们需要使用upper函数将字母转换为大写。

print(f"{hex(int(input()))[2:].upper()}")


特殊回文数


在这里插入图片描述

回文数相当于左右对称,也就是说右边出现过的数字,左边都出现过。那么我们求一半的数字就能得出整个回文数了。

我们研究一下回文数可以发现,对于六位数的回文数而言,每个数都出现过两遍,右边的数字是左边数字倒序后的情况。比如123321,左边数字就是123 ,倒序之后就是321,那么把他们拼起来就是123321了。**对于五位数而言,除中间数字出现过一遍外,其他数字都出现过两遍。**而且右边的数字是左边数字除去最后一个数的倒序。比如12321,左边数字同样是123,右边数字是21 ,21 相当于123除去最后一个数字后变成12 然后倒序形成的21。

那么我们遍历所有三位数即可。获取三位数上的每一个数字,比较他们的和是否与正整数n相等,如果相等则输出。

需要注意的是,题目要求按顺序输出,而以这种思路输出的话并不是有序的,因为有五位数和六位数。所以我们要先将回文数存储到数组中,然后排个序,最后再输出。

su = int(input())

result = []

for i in range(100,1000):

g = i % 10

s = i // 10 % 10

b = i // 100

suit1 = 2 * (s+b) + g # 5位数,除中间那个数外其他数出现过两遍

suit2 = 2 * (g+s+b) # 6位数,每个数都出现过两遍

if suit1 == su:

i = str(i)

num = int(i+i[:-1][::-1]) # i[:-1][::-1]表示得到除最后一个数外的倒序排列

result.append(num)

当su = 2 时,两种可能均可出现,所以这里不能用elif

if suit2 == su:

i = str(i)

num = int(i+i[::-1])

result.append(num)

result.sort()

for i in result:

print(i)


特殊的数字


在这里插入图片描述

依据题意, 我们获取三位数中的每一位数上的数字,然后对他们求和比较看是否相等,如果相等则输出。

for i in range(100,1000):

g = i % 10

s = i // 10 % 10

b = i //100

if i == g ** 3 + s ** 3 + b ** 3:

print(i)


杨辉三角形


在这里插入图片描述

看到杨辉三角形我们很容易想到一个数等于它肩膀两数之和,通过这一性质可以得出每一行三角形元素的值。但是,这一次我没有用这个方法。

我们知道杨辉三角左右两边对称,因此我们只要求出左半部分就能得到一整行的元素了,杨辉三角还跟组合数有关,其里面的每一个元素都能用组合数表示。第N行的第M列可以表示成C(N-1,M-1),如6在第5行的第3列,它对应的组合数就是C(5-1,3-1),即C(4,2)。

在这里插入图片描述

因此,我们需要定义一个求组合数的函数。C(5,2) 可以表示成 (5 x 4) / (2 x 1) 也可以表示成(5/2)x (4/1)。那么我们的组合数可以这么写:

def C(a,b):

if b == 0:

return 1

if b > a: # 组合数性质(C(a,b) = C(a,a-b))

b = a - b

result = 1

for i in range(b): #

result *= a / b # 注意注意要用格式化函数,避免数据丢失

a -= 1

b -= 1

return int(round(result,0))

需要特别注意的是: 涉及到除法运算时,有可能会出现小数的情况,像上面那种是特别容易出现的,那么这时候就要考虑会不会出现数据丢失了,当然,以后你都不用考虑,直接加上格式化函数,然后再转换成整型。先说说round函数的作用:保留若干位小数,round函数的第二个参数是多少就是保留多少位小数。与format函数不同的是,无论你写了保留多少位小数都会舍弃掉小数点后面的0。因为在除法中,有些数是除不尽的,这样就会造成数据丢失。举个例子,5 / 3 x 3, 5除以3后再乘3会等于5吗?,显然不等,因为电脑没有分数表示,5除以3后会得到一个数不尽的小数,既然是数不尽,而计算机又不能完全表示5/3这个数,当然会造成数据丢失了,因此 5 / 3 x 3 会很接近5 但不等于5。这时候round函数的作用来了,通过四舍五入就能够变成5.0,最后将其转换成整数,就是我们需要的结果了。其实round函数不是四舍五入,而是四舍六入,具体可以了解我的这篇文章

既然知道了杨辉三角的两个性质,对称性与组合数,以及组合数的求解方法,那么我们就能来求杨辉三角了。

if b == 0:

return 1

if b > a:

b = a - b

result = 1

for i in range(b):

result *= a / b

a -= 1

b -= 1

return int(round(result,0))

step = 1 # 表示初始所在行数

line = int(input()) # 表示所要达到的目标行数

print(1)

while step < line:

nums = []

for i in range(step//2+1): # 根据杨辉三角的对称性,我们只要求一半的数就好了

nums.append(C(step,i))

if step % 2 == 0: # 偶数行时,中间数就只能出现一次

nums += nums[::-1][1:]

else:

nums += nums[::-1] # 奇数行时,中间数能够出现两次

for i in nums:

print(i,end=" ")

print()

step += 1


查找整数


在这里插入图片描述

在这题中可以使用python的find函数求解,如果找到了元素就返回其下标,否则返回-1。使用find函数的话判断如果找到了,那么下标+1即可,否则就是没找到直接返回-1.

也能够直接使用while遍历, 如果找到了标记为已找到,然后返回下标+1,否则返回-1.

我这里提供第二种解法。

length = int(input())

nums = list(map(int,input().split()))

target = int(input())

i = 0

find = False

while i < length :

if nums[i] == target:

i += 1

find = True

print(i)

break

i += 1

if not find :

print(-1)


数列特征


在这里插入图片描述

这题使用python的三个函数 max,min,sum一步到位。

length = int(input())

nums = list(map(int,input().split()))

print(max(nums))

print(min(nums))

print(sum(nums))


字母图形


在这里插入图片描述

在这里插入图片描述

这道题出的不好,样例没有给全,我怎么知道你要啥呢?为什么这么说?因为我不知道是要让第一行的字母循环出现,还是让26个字母从左往右依次出现,就以上面的样例为例,第7行是GFEDCBA,这是必然的,那第8行是啥?是AGFEDCB 还是 HGFEDCB ? 我们不得而知,显然两种都符合它的规律,我想应该很多人都以为是第一种情况,包括我,可真正的情况是第二种。

既然已经知道了字母的出现方式,我们就能够制定相应的思路了。我们可以把一行图形分成两部分,左边是由A-Z的倒序排列组成,右边是第一行生成的元素,每生成新的一行,就挤掉右边的一个元素,相应的左边就添加一个元素。当完全挤掉右边元素后,接着左边的尾部元素就要把头部元素给挤走。

N, M = map(int,input().split())

生成26个字母,方便操作

words = [chr(i) for i in range(65,65+26)]

length = 1

for i in range(N):

当右边元素还存在时,序列由两部分组成,分别是倒序元素跟剩下元素

if length < M:

partial_words = words[0:length][::-1] + words[1:M-i]

如果右边元素不存在时,序列仅由倒序元素组成,此时length > M

else:

partial_words = words[length-M:length][::-1]

length += 1

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 28
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值