【蓝桥杯】—— Python组比赛技巧

【蓝桥杯】—— Python组比赛技巧

在这里插入图片描述

  • 蓝桥杯Python组的比赛规则详见【蓝桥杯】-- 竞赛规则及说明(Python程序设计)

  • 蓝桥杯是大学生IT学科赛事,由工业和信息化部人才交流中心主办,所以对于大学生还说还是非常值得去参加的,2020年第十一届蓝桥杯新增了大学Python组,不分组别,第一届没有历届的真题,但是蓝桥杯作为一个算法竞赛,没有真题也影响不大,难度借鉴Java组或者C/C++组就可以了,因为看上了Python是第一届,而且Python的语法简单,内置了非常丰富的函数,特别是对字符串的操作,正则表达式等,用起来就一句话,人生苦短,我用Python。

  • 运气的加成,笔者有幸进入了国赛,国赛前这段时间好好整理了一下本人参加比赛的一些技巧,正是本文章的由来,若有出错的地方,请各位高手不吝赐教。

一、Python最常用的内置函数

内置函数就是不需要导包就可以直接使用的函数

  1. 数学函数

abs() 函数:取绝对值

print(abs(-10))
10

divmod() 函数 :同时取商和余数

print(divmod(7,2))
(3, 1)

sum() 函数 :求和计算

print(sum([1,2,3]))
6

round() 函数: 四舍五入

print(round(5.1))
print(round(5.5))
5
6

pow() 函数 :计算任意N次方值

print(pow(2,3))
#也可以使用**
print(2**3)
8
8

min() 函数 :获取最小值

print(min(9,5,2,7))
2

max() 函数 :获取最大值

print(max(9,5,2,7))
9
  1. 数据转换函数

hex() 函数: 十进制转换成十六进制

print(hex(100))
0x64

oct() 函数: 十进制转换成八进制

print(oct(100))
0o144

bin() 函数 :十进制转换成二进制

print(bin(100))
0b1100100

bool() 函数 :将指定的参数转换成布尔类型

print(bool(1))
print(bool(0))
True
False

ord() 函数 :获取单个字符的ASCII数值

print(ord('A'))
65

float() 函数 :转换成浮点数

print(float(10))
10.0

chr() 函数: 转换一个整数并返回所对应的字符

print(chr(65))
A

list() 函数: 将可迭代对象转换为列表

print(list(range(1,10)))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
  1. 对象创建函数

open()函数:打开文件并返回文件对象

f1 = open('E:\Hello.txt','r')
print(f1.readline())
Hello Python

range()函数:创建一个可迭代对象,内容是指定范围内的连续整数

for i in range(5):
	print(i)
0
1
2
3
4

set()函数:创建一个无序不重复元素集合

set([1,2,1,1,3,4,4,6,5])
{1, 2, 3, 4, 5, 6}
  1. 迭代器操作函数

all() 函数: 判断指定序列中的所有元素是否都为 True,则返回 True,如果有一个为 False,则返回 False。

a = [1,2,0]
all(a)
False

any()函数: 判断指定序列中的所有元素是否都为 False,则返回 False,如果有一个为 True,则返回 True。

a = [1,0,0]
any(a)
True

sorted() 函数: 对可迭代对象进行排序

a = [3,1,4,2]
sorted(a)
[1, 2, 3, 4]

map()函数: 通过自定义函数实现对序列的元素映射操作并返回操作后的结果

list(map(int,['1','2','3']))
[1, 2, 3]
  1. 基本常用函数

format()函数: 格式化数据

"{} {}".format("hello", "world")
print("{:.2f}".format(3.1415926));
'hello world'
3.14

input()函数: 接受用户输入并返回所输入的 string 类型数据

s = input() #输入abc回车
print(s)
abc

len()函数: 返回一个对象的元素或项目个数

len([1,2,3,4])
4

二、python中字符串操作

返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数

string.count(str, beg=0, end=len(string))

以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是’ignore’或者’replace’

string.endswith(obj, beg=0, end=len(string))

检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1

string.find(str, beg=0, end=len(string))

跟find()方法一样,只不过如果str不在 string中会报一个异常.

string.index(str, beg=0, end=len(string))

以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串

string.join(seq)

在 string 上执行 lstrip()和 rstrip()

string.strip([obj])

转换 string 中的小写字母为大写

string.upper()

转换 string 中所有大写字符为小写.

string.lower()

翻转 string 中的大小写

string.swapcase()

怎样将以下列表转化为整数?

a=[1, 3, 5]
b=['4', '5', '6']
r1 = int("".join(map(str, a))) 
r2 = int("".join(map(str, b))) 
123
456

三、python中math的使用

要使用math函数必须先导入math包,这里列举几个做题中常用的。

import math  
  1. 向上取整
print(math.ceil(3.1))
4
  1. 向下取整
print(math.floor(3.1))
3
  1. 乘方 开方
print(math.pow(10,3))
print(math.pow(27,1/3))
1000.0
1.0

四、正则表达式的基本使用

Python的正则表达式(Regular Expression )的模块是 ‘re’,它能帮你非常方便的检查一个字符串是否与某种模式匹配,比如你要在一个字符串s=’Regular 123 Expression’ 中查找‘123’、‘456’,只要这样写:

import re
s = 'Regular 123 Expression 456'
re.findall(r'\d+',s)
['123', '456']
  • 是不是感觉自己写代码的技术又上升了一个档次,这里用到的函数 ”findall(rule , target [,flag] )” 是正则里面最常用的函数之一,作用就是在目标字符串target 中查找符合规则rule 的字符串,后面还可以跟一个规则选项flag用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。返回结果结果是一个列表,中间存放的是符合规则的字符串。如果没有符合规则的字符串被找到,就返回一个空列表。
  • 上面的参数 r’\d+’ 很多同学可能就有疑惑了,’\d+'是一个字符串相信大家都看得出来,那字符串前面加个r是什么意思呢?其实在正则表达式的字符串前面加上r表示这个是一个raw字符串,只以正则表达式的元字符进行解析,不用理会ASCII的特殊字符。
  • 比如,特殊符号“\b”在ASCII 字符中代表退格键,但同时“\b”也是一个正则表达式的特殊符号,代表“匹配一个单词边界”。
  • 为了让re编译器把两个字符“\b”当成你想要表达的字符串,而不是一个退格键,你需要用另一个反斜线对它进行转义,即可以这样写:“\b”。
    但这样做会把问题复杂化,特别是当你的正则表达式字符串里有很多特殊字符时,就更容易令人困惑了。
  • 看到这里,相信大家都看懂了吧。

在比赛中使用以下正则符基本满足大部分的情况了:

^:匹配字符串开头
" * " 匹配前面的子表达式零次或多次
" + " 匹配前面的子表达式一次或多次
" ? " 匹配前面的子表达式零次或一次
" [abc]" :方括号表示字符集合,例子表示一个字符串有一个 "a" 或 "b" 或 "c" 等价于 [z|b|c]
" [a-z]": 表示一个字符串中存在一个 a 和 z 之间的所有字母
" [^a-z]" :表示一个字符串中不应该出现 a 到 z 之间的任意一个字母
" [0-9]": 表示一个字符串中存在一个 0 和 9 之间的所有数字
" \d " 匹配一个数字字符,等价[0-9]
" \D " 匹配一个非数字字符,等价[^0-9]
" \w" 匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”
" \W" 匹配任何非单词字符。等价于“[^A-Za-z0-9_]”

五、文件操作

蓝桥杯比赛中经常出现需要输入多行多列数据的题目,如果手动一个个输入也可以,就是太浪费时间,如果利用好文件操作的方法,做题就会得心应手。

例如:hello.txt文件含30 行 50 列字符,怎样把它读到列表里?

  • 最基本的文件操作方式
fp = open('E:\hello.txt','r')
res = []
s = fp.readlines()
for i in s:
    res.append(i.strip('\n')) #使用strip()去掉换行符,如果不去的话会把‘\n’也读进来
fp.close() #记得要关闭连接,养成良好习惯

print(res[:])

输出结果:
在这里插入图片描述

  • 利用Python自身的字符串操作优势,两行搞定,推荐此方法。
fp =  open('E:\hello.txt','r')

res = [s.strip('\n') for s in fp.readlines()]

fp.close()

print(res[:])

输出结果:
在这里插入图片描述

  • 90
    点赞
  • 568
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值