蓝桥杯备赛技巧攻略

本文提供了Python编程在解决蓝桥杯竞赛题目时的一些实用技巧,包括四舍五入、理解字节概念、快速输出字符、进制转换、日期处理、删除重复元素的方法、排序算法、回文数判断以及math库的使用。同时,介绍了杨辉三角的实现和填空题的解题策略。

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

语言:Python

赛组:Python程序设计大学B组

时间:2023年

本篇不以编程蓝桥杯的题目为主,主要讲解遇到的题目中如何去解决其中的某些小问题,并在此基础上进行拓展。这是一份完整的技巧攻略,蓝桥杯中很多题目都可靠逻辑去解题,这一份攻略主要是提供给想再短暂时间内提升一下技巧的选手。

1、四舍五入或保留小数点后多少位

例题:成绩统计

百分号前的部分四舍五入保留整数:

# 方法1
print("{:.0f}%".format(a))
# 方法2
print(str(round(a))+"%")
# 方法3
print('%.0f'%a+"%")

2、字节概念

例题:空间

256MB的空间可以存储多少个32位二进制整数?

1MB=1024kb
1kb=1024字节
1字节=8位、32位4字节

3、快速输出所有字母、数字

例题:排序英文字母

(1)输出所有的大写字母 

print([chr(i) for i in range(65,91)])

(2)输出所有的小写字母  

print([chr(i) for i in range(97,123)])

(3)输出所有的数字字符

print([chr(i) for i in range(48,58)])

4、进制转换

例题:6个0特殊的数进制

(1)任意进制转化为十进制,通用方法

print(int('1011',2)) 

输出为11,int函数中,前面的数表示为二进制的字符类型,后面的2表示为二进制。同理8进制和十六进制转为十进制也是相同的方法。

(2)十进制转化为二进制、八进制、十六进制

print(bin(10))
print(oct(100))
print(hex(1011))

5、日期处理

例题:天数

这部分不免涉及到计算天数、判断闰年等,如果用普通方法来做,比较的花费时间,但python中的一些第三方库有助于快速解题,且在蓝桥杯的调试器中也同样可以import。

calendar模块

import calendar

1、函数功能:返回指定日期的星期码,从0开始的

calendar.weekday(year,mon,day)

2、函数功能:返回该月第一天的星期码与该月的天数,以元组的形式返回。 

calendar.monthrange(year,mon)

3、函数功能:返回(year1, year2)中的闰年个数 

calendar.leapdays(year1,year2)

4、函数功能:判断指定年份是否为闰年,返回布尔值判定 

calendar.isleap(year)

附带:判断闰年 if (year%4 == 0 and year%100 != 0) or year % 400 == 0: 

5、函数功能:返回指定年份的日历(以字符串的形式),这个最好是在本地调试使用,对于一些星期计数的填空题,可以直接数。 

calendar.calendar(year)

datetime模块 

import datetime as date
x=date.datetime(1949,10,1)
y=date.datetime(2023,1,1)

x、y会返回这个时候的日期信息,通过相减即可得到相差的天数。也有一定的实用性。

x=date.time(6,13,1)
y=date.time(14,36,20)

 这里用于计算时间信息。

6、删除重复元素

例题:考勤刷卡单词去重

方法一:

# l1为具有重复元素的数组

for i in l1[:]:
    if l1.count(i) > 1:
        l1.remove(i)

这个地方会改变对其输入的顺序。

if l2.count(i) < 1:
    l2.append(i)

虽然不会改变顺序,但创建了新列表。这里巧妙地运用l2里面没有任何地元素。

方法二:

lst = list(set(l1))

利用set()方法最简单,但会改变其顺序。

7、Python排序

 例题:考勤刷卡 

Python中有内置函数sorted(), list(列表)中也有函数list.sort()都可以进行排序。

区别

list.sort()是对已经存在的列表进行操作,进而可以改变进行操作的列表。而内建函数sorted可以对所有可迭代类型进行排序,返回的是一个新的list。

(1) sort()方法

用于对原列表进行排序(默认为升序排序),排序后的新列表会覆盖原列表。

x = [3, 2, 1, 4]
x.sort()
print(x)

(2) reverse()方法

用于将列表中的元素反向存放。请记住这是倒序输出。

x = [3, 2, 1, 4]
x.reverse()
print(x)

(3) sorted()方法

x = [3, 2, 1, 4]
y = sorted(x)
print(x)
print(y)

降序排列:

y = sorted(x,reverse=True)

(4) 冒泡排序

冒泡排序应该是最常用的,我以前也总结过排序算法,比如插入、快速、归并、线性。后面我会把排序算法整合到一起,所以链接会失效,我这里给出专栏的位置。

def bubble_sort_with_flag(nums):
    n = len(nums)
    # 外循环:待排序元素数量为 n-1, n-2, ..., 1
    for i in range(n - 1, -1, -1):
        flag = False  # 初始化标志位
        # 内循环:冒泡操作
        for j in range(i):
            if nums[j] > nums[j + 1]:
                # 交换 nums[j] 与 nums[j + 1]
                nums[j], nums[j + 1] = nums[j + 1], nums[j]
                flag = True  # 记录交换元素
        if not flag:
            break  # 此轮冒泡未交换任何元素,直接跳出

8、回文数判断

例题:三角回文数

str(a)[::1]==str(a)[::-1]

9、math库使用

例题:路径

求解最大公约数、最小公倍数与阶乘

import math

#求解最大公约数
math.gcd()
#求解最小公倍数
math.lcm()
#阶乘
math.factorial()

python里的math库有gcd()和lcm(),但是蓝桥杯的调试台没有lcm()方法!这个好像与python的版本有关。

为了以防万一,我们这里还是要手写一下。

最小公倍数== (num1 * num2)/ 两者最大公约数

import math

def lcm(a, b):
  return a * b // math.gcd(a, b)

10、获取元素在列表中的位置

index寻找元素

a=[1,2,3,4,5,5,6,7]
b=a.index(6)
print(b+1)

enumerate迭代 

a=['1','2','3','4','5','5','6','7']
for index,elem in enumerate(a):
    print('第' + str(index) + '个元素是' + elem)

11、特殊题目

例题:杨辉三角形杨辉三角

杨辉三角

利用yield函数可以将L定义为生成器。这里yield的用法推荐看这位大佬的讲解(6条消息) python中yield的用法详解——最简单,最清晰的解释_python yield_冯爽朗的博客-CSDN博客

def tri():
  L = [1]
  while True:
    yield L  # 定义为生成器函数
    L = [1] + [L[n] + L[n - 1] for n in range(1, len(L))] + [1]
def showline(n=10,num=0):
  for t in tri():
    print(t)
    num+=1
    if num==n:break
showline(10)

如果不能理解上面的,我们这里换一个比较好理解的。

m = int(input("输入要输出的行数:"))
# 以旧行代替上一行,新行表示下一行
oldline = []
for i in range(m):
    newline = [1] * (i+1)
    for j in range(2, i+1):
        newline[j-1] = oldline[j-1]+oldline[j-2]
    oldline = newline
    print(newline)

12、填空题蒙提技巧

例题:寻找整数直线路径

如果他这道题要求你输入一个整数,不妨试试这种组合:

2023040820230408

可能会拿考试当天的日期进行题目设计,所以可以试试。 

这个是根据样例的输入输出来的,然后使用测试用例就可以看到答案了。

print(input())

<think>嗯,用户想了解蓝桥杯Python竞技巧和建议。我需要根据提供的引用内容来组织答案。首先,用户提到的引用里有几个重点:文件操作、标准库的使用、数据结构操作、算法效率。这些都是的关键点。 首先,文件操作在蓝桥杯中很重要,因为题目常常需要处理多行输入。用户提到手动输入效率低,使用文件读取能节省时间。这里我应该强调使用`sys.stdin`或者`open`来处理输入,尤其是多行数据的情况。例如,引用[1]里提到文件操作能提高效率,可以举例子说明如何读取数据。 然后,标准库的使用。Python只能使用标准库,所以需要熟悉常用的模块,比如`collections`中的`deque`和`defaultdict`,`itertools`的组合生成函数,`heapq`的堆操作。引用[2]提到这些库在算法竞中的重要性,应该具体列出几个常用库和它们的应用场景,比如排列组合、堆结构处理等。 数据结构操作也是重点,引用[3]里有示例,需要强调列表、字典、集合的灵活运用。比如列表推导式、字典的快速查找,这些都是提高代码效率的关键。可能还要提到字符串处理,比如切片和`split`方法的使用。 算法方面,用户可能需要掌握排序、搜索、动态规划、贪心、图论等基础算法。这里需要分点说明,每个算法的应用场景和注意事项,比如递归的深度限制,或者动态规划的状态转移方程。另外,代码效率优化也很重要,比如避免不必要的循环,使用哈希表优化查找时间。 此外,测试和调试技巧也不能忽视。引用[4]可能提到一些实际案例或资源,但链接无法访问,所以可能需要从其他引用中提取相关内容,比如边界条件测试、使用断言等。 用户的问题还涉及到生成相关问题,我需要根据回答内容提出相关问题,比如如何优化输入输出速度,或者动态规划的解题步骤。这些问题应该与技巧相关,帮助用户进一步深入学习。 最后,确保回答结构清晰,分点列出,每个技巧都有例子或具体建议,并结合引用中的内容添加引用标识。例如,在提到文件操作时引用[^1],标准库的使用引用[^2],数据结构引用[^3]。</think>### 蓝桥杯 Python 竞技巧与建议 #### 一、输入输出优化技巧 1. **文件操作加速输入** 蓝桥杯题目常涉及多行数据输入,建议使用`sys.stdin`或`open()`批量读取。例如: ```python import sys data = [line.strip() for line in sys.stdin] # 一次性读取所有行 ``` 处理矩阵输入时可用: ```python matrix = [list(map(int, line.split())) for line in data] ``` 2. **输出格式控制** 使用`print(*list)`解包输出列表元素,或`"".join()`拼接字符串提升效率。 #### 二、标准库的深度运用 1. **常用库与场景** - `collections`:`deque`实现BFS队列,`defaultdict`处理缺失键[^2] - `itertools`:`permutations`生成排列,`combinations`生成组合 - `heapq`:实现优先队列(Dijkstra算法常用) ```python from heapq import heappush, heappop heap = [] heappush(heap, (priority, value)) ``` 2. **数学运算辅助** `math`库的`gcd`(最大公约数)、`sqrt`(平方根)可加速数论题解答。 #### 三、数据结构的高效操作 1. **列表推导式与生成器** 替代多重循环,减少内存占用: ```python filtered = [x**2 for x in range(100) if x % 3 == 0] ``` 2. **字典快速查询** 用字典代替多重条件判断: ```python color_map = {'R': 'Red', 'G': 'Green'} print(color_map.get(key, 'Unknown')) ``` 3. **集合去重与运算** 利用集合特性快速处理交集/并集: ```python a = {1,2,3}; b = {3,4,5} print(a & b) # 输出{3} ``` #### 四、算法核心要点 1. **基础算法掌握** | 算法类型 | 典型问题 | 优化要点 | |----------------|------------------------|---------------------------| | 动态规划 | 背包问题、最长子序列 | 状态压缩(滚动数组) | | 贪心算法 | 区间调度、哈夫曼编码 | 正确性证明 | | 图论算法 | 最短路径、最小生成树 | 邻接表存储结构 | 2. **递归深度问题** 当递归层级超过`1000`时,需设置: ```python import sys sys.setrecursionlimit(100000) ``` #### 五、测试与调试策略 1. **边界条件测试** - 空输入测试(如`n=0`) - 极值测试(如$10^5$量级数据) - 特殊数据结构测试(如完全二叉树) 2. **性能分析工具** 使用`time`模块定位耗时操作: ```python import time start = time.perf_counter() # 待测试代码 print(f"耗时: {time.perf_counter()-start:.4f}s") ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏天是冰红茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值