关于python的比赛_【蓝桥杯】——python集团的比赛技巧,Python,组

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

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

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

一、Python最常用的内置函数

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

数学函数

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

数据转换函数

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]

对象创建函数

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}

迭代器操作函数

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]

基本常用函数

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

向上取整

print(math.ceil(3.1))

4

向下取整

print(math.floor(3.1))

3

乘方 开方

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[:])

输出结果:

你可能感兴趣的:(关于python的比赛)