蓝桥杯学习记录(3)——语言基础

蓝桥杯学习记录(3)——语言基础

狮子阿儒 Lv4

输入输出

input

1
2
3
4
5
6
7
input(【提示文字】)#输入变量均为str字符串

#如果需要整数、浮点输入,需要做强制转换
a = int(input()) or float(input())

#一行多个输入
map(t,input().split()) #t为int/float等等强制转换类型,没有可以不填

print

1
2
3
print(obj,sep='',end='\n')
#如果要更改分隔符,就改sep
#如果要改末尾,就改end换行为其他内容或转义字符
转义字符描述
\ (在行尾时)续行符
\ \反斜杠符号
\’单引号
\”双引号
\a响铃
\b退格(Backspace)
\e转义
\000
\n换行
\v纵向制表符
\t横向制表符
\r回车
\f换页
\oyy八进制数yy代表的字符,例如:\o12代表换行
\xyy十进制数yy代表的字符,例如:\x0a代表换行
\other其它的字符以普通格式输出

三种保留部分小数的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1\
f = 2.3456789
print('%.2f'%f) #2.23
print('%.3f'%f) #2.345

2\
f = 2.3456789
print('{:.2f}'.format(f)) #2.23
print('{:.3f}'.format(f)) #2.345

3\
print(round(2.25,1)) #2.3
print(round(2.35,1)) #2.4
print(round(2.125,2)) #2.13
print(round(2.875,2)) #2.88
#round函数带有一点点的小坑,不是很推荐使用
#round函数的进位规则一般为’四舍六入五凑偶’

变量常量运算符

类型转换

分为隐式类型转换显式类型转换,隐式转换比如 int+float=float ,显式转换就是强制类型转换。强制转换有哪些?看下面!!

函数描述
int(x)将x转换为一个整数
float(x) 将x转换到一个浮点数
complex(real [,imag])创建一个复数
str(x) 将对象 x 转换为字符串
repr(x) 将对象 x 转换为表达式字符串
eval(str) 用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s) 将序列 s 转换为一个元组
list(s) 将序列 s 转换为一个列表
set(s) 转换为可变集合
dict(d) 创建一个字典。d 必须是一个 (key, value)元组序列。
frozenset(s) 转换为不可变集合
chr(x) 将一个整数转换为一个字符
ord(x) 将一个字符转换为它的整数值
hex(x) 将一个整数转换为一个十六进制字符串

运算符

以下假设a = 10, b = 21

运算符描述实例
%取模 - 返回除法的余数b % a 输出结果 1
**幂 - 返回x的y次幂a**b 为10的21次方
//取整除 - 往小的方向取整数image-20240205195908848
+=加法赋值运算符c += a 等效于 c = c + a
-=减法赋值运算符c -= a 等效于 c = c - a
*=乘法赋值运算符c *= a 等效于 c = c * a
/=除法赋值运算符c /= a 等效于 c = c / a
%=取模赋值运算符c %= a 等效于 c = c % a
**=幂赋值运算符c **= a 等效于 c = c ** a
//=取整除赋值运算符c //= a 等效于 c = c // a
&按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0(a & b) 输出结果 12 ,二进制解释: 0000 1100
|按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。(a | b) 输出结果 61 ,二进制解释: 0011 1101
^按位异或运算符:当两对应的二进位相异时,结果为1(a ^ b) 输出结果 49 ,二进制解释: 0011 0001
~按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。**~x** 类似于 -x-1(~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。
<<左移动运算符:运算数的各二进位全部左移若干位,由”<<”右边的数指定移动的位数,高位丢弃,低位补0。a << 2 输出结果 240 ,二进制解释: 1111 0000
>>右移动运算符:把”>>”左边的运算数的各二进位全部右移若干位,”>>”右边的数指定移动的位数a >> 2 输出结果 15 ,二进制解释: 0000 1111
andx and y布尔”与” - 如果 x 为 False,x and y 返回 x 的值,否则返回 y 的计算值。
orx or y布尔”或” - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。
notnot x布尔”非” - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。
in如果在指定的序列中找到值返回 True,否则返回 False。x 在 y 序列中 , 如果 x 在 y 序列中返回 True。
not in如果在指定的序列中没有找到值返回 True,否则返回 False。x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。

选择结构

条件表达式

image-20240205201753234

逻辑表达式

image-20240205201706115

短路操作:在Python中,and和or不一定会计算右边表达式的值,有时候只计算左边表达式的值就能得到最终结果。另外and和or运算符会将其中一个表达式的值作为最终结果,而不是将True或者False作为最终结果。

and——左假,直接结束;or——左真,直接结束

if-elif-else语句

循环结构

for循环

image-20240205202916197

for语句

1
2
3
4
for <variable> in <sequence>:
XXX
#<variable>:循环变量,一般如i j k
#<sequence>:序列或可迭代对象,一般为range()、list等等

while循环

while语句

1
2
3
while 条件表达式:
XXX
#条件表达式为True,进入循环;条件表达式为Flase,结束循环

image-20240205205443513

break与continue

image-20240205210447733

基本数据类型

字符串

字符串,有单个或多个字符组成,用单引号或双引号括起。

其用法大多与列表类似,如:

  • 访问字符串中元素:str[0],str[1]……
  • str[start:end:step] :切片
  • len(str):求长度
  • +:字符串连接
  • *:字符串复制
  • in 、not in:存在、不存在
  • str(x):强制转换为字符串
image-20240211191246615 image-20240211191321805

Unicode码与ACSII码的转换

python将输入的字符编码为Unicode码,而Unicode码的字符非常繁杂,有汉字、有英文、也有各类标点。而我们进行统一计算时,需要将他们统一转换成数字方便计算,这就用到了ord方法与chr方法

1
2
3
4
5
6
7
8
9
10
11
12
13
ord(x) #ord()函数以一个字符串作为参数,返回对应的ASCII数值,或者Unicode 数值
>>>ord('a')
97
>>> ord('€')
8364

chr(x) #用一个整数作参数,返回一个对应的字符,参数可以为十进制,也可以是十六进制,数字范围为0到1114111 (16进制为0x10FFFF)
>>>chr(0x30)
'0'
>>> chr(97)
'a'
>>> chr(8364)
'€'

1、字符串常用方法——判断类方法

image-20240211193537224

image-20240211193841273

2、字符串常用方法——转换类方法

image-20240211193905363

image-20240211193956201

3、字符串常用方法——查找类方法

image-20240211194038479

image-20240211194051664

4、字符串修改

由于字符串本身无法修改,如果要改变字符串内容,可以将其转换为列表,更改列表元素。

  • image-20240211194449849
  • image-20240211194716608
  • image-20240211194808965

5、format格式化

  • Python字符串中{}表示占位符,format里面的参数将逐个放入字符串中的占位符,由于format的参数要逐个放入占位符中,此时参数数量必须大于等于占位符数量
1
2
3
4
5
name = "fzl"
age = 24
s = "大家好,我叫{},今年{}岁".format(name,age)
print(s)
>>>大家好,我叫fzl,今年24
  • Python字符串中{0}{1}表示占位符,其中非负整数表示这个位置为format中的第几个参数,从0开始计数,{x}中的x不可以大于format中的参数数量
1
2
3
4
5
name = "fzl"
age = 24
s = "大家好,我叫{0},今年{1}岁。{0}:{1}".format(name,age)
print(s)
>>>大家好,我叫fzl,今年24岁。fzl:24
  • Python字符串中{name}、{age}表示占位符,其中name、age表示format中传递参数的参数名称,此时是根据名称来找对应的位置,因此{ }中的名称必须在format中出现
1
2
3
s = "大家好,我叫{name},今年{age}岁".format(name="fzl",age='24')
print(s)
>>>大家好,我叫fzl,今年24
image-20240211213610499 image-20240211213627223

列表

1、添加元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
list.append(x) #列表list末尾添加单个元素,x可以为单个整数、浮点数或者字符串等
'''
list.append(3)
list.append(3.14)
list.append('hello')
'''

list.extend(x) #列表list末尾添加多个元素,x为可迭代对象,包括列表、元组或字符串等
'''
list.extend([1,2,3])
list.extend((1,2,3))
'''

list.insert(idx,x) #列表list在下标idx位置插入元素x,原来下标大于等于idx的元素都往右移动一个位置

注意,append与extend添加字符串时的区别:image-20240208195402460

2、删除元素

1
2
3
4
5
6
7
8
9
10
11
12
#利用del删除列表中的元素
del list[idx] #删除列表list中下标为idx的元素

#利用pop删除列表中元素
list.pop(idx) #删除列表list中下标为idx的元素
list.pop() #删除列表list中最后一个元素

#根据值删除元素
list.remove(x) #删除列表list中值为x的第一个元素

#利用clear清空所有列表元素
list.clear() #list变为空列表

示例: image-20240208200955674

image-20240208201141179

注:pop删除是有返回值的,并且是被删除的那个元素,即 [1,2,3].pop(0) = 1

3、查找元素

1
2
3
4
5
6
7
8
list.count(x) #计算x在list中出现次数,如果未出现则为0,否则返回出现次数

list.index(x,start,stop) #计算元素x在列表list下标[start,stop)中第一次出现的位置
'''
——要保证x必须在区间[start,stop)中存在,否则报错
——start,stop不赋值,默认为在整个列表中查找
——只赋值start,stop默认为列表长度
'''

示例:image-20240208201645964

4、翻转列表

1
list.reverse() #列表list进行翻转,调用2次则返回原列表

示例: image-20240208201950227

5、列表长度

1
len(list) #计算列表list长度

6、操作列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#利用for循环遍历列表,同时获得下标
for idx, x in enumerate(list):
print(idx,x)
#enumerate(a)将列表a每个元素和对应的下标组合为一个带索引的序列,下标默认从0开始,遍历的时候同步遍历下标和值。

list_1 + list2 #连接两个列表

list * 2 #返回一个新列表,内容为list复制两遍

max(list), min(list), sum(list) #对list分别求最大值,最小值,求和

#切片
a[start:end:step]
'''
start:切片的下标起点(包含起点),默认为0
end:切片的下标终点(不包含终点),默认为列表长度
step:切片步长,默认为1
'''

#复制列表
b = a[:] #利用切片
b = a.copy() #利用copy函数

示例: image-20240208213620659

元组

较之列表的可修改性,元组创建后不可修改。

如需修改元组内部元素,需要将其转换为List或者直接创建新的元组。

元组与列表用法大多类似,这里便不做赘述。

字典

键值对 {key:value},等价于数学中的映射,一个key对应一个value。

在索引时,通过key来找value时,key必须唯一。

字典中的key只能为数字、字符串、元组,大多数情况使用字符串作为key,而value的类型没有限制

image-20240301175734595

1、创建字典

  • a = dict(key1 = value1, key2 = value2, key3 = value3)

  • a = dict([[key1, value1],[key2, value2],[key3, value3]])

  • zip(seq1, seq2, seq3...)

    image-20240301180248420

2、访问字典

a['key']:a为dict,key为字典a中的一个键,key必须真实存在

a.get(x, value=None):查询x是否在字典的key中及其value,a表示字典,x表示查询的key,value表示默认值

image-20240301180733935

3、添加修改

可以直接利用key访问相应value,并对key的value值添加或修改。

image-20240301191137418

4、删除元素

删除字典的键值对,可以用Python的删除语法del

image-20240301191947450

也可以使用字典删除方法pop

image-20240301192035730

5、遍历字典

image-20240301192405076

6、拷贝字典

使用copy函数完成复制;直接赋值相当于“引用”,会随着原变量改变。

image-20240301192747195

7、合并字典

利用update方法,可将另一个字典的键值对更新到已有字典。

a.update(b):把字典b中的每一个元素放入a中更新

image-20240301193029518

集合

存储不重复的元素,只能存储不可变的数据:数字、字符串和元组。集合是无序的

1、创建集合

{}这样创建的是空字典,不是空集合

set(x):把x转换为集合,x一般为列表、元组等

set():空集

2、遍历集合

与遍历list一样,for x in a:,其中a是set,x是循环变量

image-20240302101028109

x in s:判断x是否在s中存在

len(s):集合元素个数

3、基本操作

image-20240302101243180

4、交并差

Python中的集合也满足数学中集合的交集并集差集等性质。

既可以使用$ | - ^的运算符,也可以用函数表示:

image-20240302101459792 image-20240302101515977

日期时间

1、time模块

1
2
3
4
5
6
7
8
9
10
11
import time #导入time模块

time.time() #返回一个浮点数,表示时间戳

time.sleep(x) #程序睡眠x秒

time.localtime() #返回本地时间,是一个struct_time对象,struct_time对象之间不能加减

time.strftime(format[,t]) #把时间t按照format格式转换,返回一个字符串

time.strptime(string, format) #把字符串按照format格式转换,返回一个时间

localtime方法的相关用法:

image-20240302201109544

格式化日期

image-20240302201552739

image-20240302201609959

2、datetime模块

1
2
3
4
5
6
7
8
9
10
11
import datetime #导入datetime模块

datetime.date(y,m,d) #年、月、日

datetime.time(h,m,s) #时、分、秒

datetime.datetime(y,m,d,h,m,s) #年、月、日、时、分、秒

datetime.datetime.combine(date,time) #合并年月日与时分秒为datetime

datetime.timedelta(x) #x可表示weeks,days,hours,minutes,seconds,milliseconds,microseconds,然后自动转换为days,seconds,microseconds(微秒)三个变量存储。
image-20240302203355485 image-20240302203435743 image-20240302203806518

函数

定义

定义一个函数,以下是简单的规则:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 **()**。
  • 任何传入参数和自变量必须放在圆括号里
  • 函数内容以冒号 : 起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。

img

math库

1
2
3
4
5
6
7
8
import math

#常量
math.e #返回欧拉数(2.7182...)
math.inf #返回正无穷大浮点数
math.nan #返回一个浮点值NaN
math.pi #圆周率
math.tau #数学常数6.283185,是一个圆周常数,等于两倍圆周率,圆周长与半径之比

常用函数:image-20240302210531039

三角函数:

image-20240302210607081

heapq库

堆:完全二叉树,每个节点小于等于子节点(默认为最小堆)

每个节点K都有两个子节点2K+1,2K+2

image-20240302214241601

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import heapq

a = [11,6,9,8,7,3]
heapq.heapify(a)
print(a)

heapq.heappush(a,4)
print(a)

heapq.heappush(a,12)
print(a)

while len(a):
print(heapq.heappop(a),end="")

'''
[3, 6, 9, 8, 7, 11]
[3, 6, 4, 8, 7, 11, 9]
[3, 6, 4, 8, 7, 11, 9, 12]
3467891112
'''

类定义与使用

类与对象;

  • 类:类型,自定义各种类型对应现实生活,如student类、teacher类等
  • 对象:变量,类的实例化,用类创建的具体对象

类的通用格式:

1
2
3
class 类名:
多个类属性(大于等于0个)
多个类方法(大于等于0个)

一个简单的类的例子:

image-20240303101128588
  • 构造函数:__init__(self[,x,y])
    • 可以包含多个参数,但必须有self参数
    • 且self参数必须放在第一位
    • self参数不需要手动传参
  • 类的实例化
    • 格式:类名(参数),这里放的参数会传入构造函数中

类中访问当前对象的属性与方法:通过self

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class student:
def __init__(self,name,class_id):
self.name = name
self.class_id = class_id
def output(self):
print('内部信息')
print(self)
print(self.name,self.class_id)

a = student('666',2)
print(a)
print(a.name,a.class_id)
print('-------------------')
a.output()

"""
<__main__.student object at 0x000002005C372980>
666 2
-------------------
内部信息
<__main__.student object at 0x000002005C372980>
666 2
"""

属性

类属性(类变量):在类体中、所有函数外定义的变量

  • 使用时:类名+.+变量名

实例属性(实例变量):以self.变量名定义的变量

  • 使用时:self+.+变量名、实例名+.+变量名
image-20240303103046566

方法

实例方法:通常情况下,在类中定义的方法默认都是实例方法

  • 使用时:实例名+.+方法名、self+.+方法名

类方法:与实例方法相似,它最少也要包含一个参数,只不过类方法中通常将其命名为cls。类方法需要使用@classmethod修饰符进行修饰

  • 使用时:类名+.+方法名

类静态方法:没有类似self、cls这样的特殊参数,无法调用任何类属性和类方法。使用@staticmethod修饰

  • 使用时:类名+.+方法名
image-20240303103556225
  • 标题: 蓝桥杯学习记录(3)——语言基础
  • 作者: 狮子阿儒
  • 创建于 : 2024-02-02 19:18:10
  • 更新于 : 2024-03-03 21:40:41
  • 链接: https://c200108.github.io/blog/2024/02/02/蓝桥杯学习记录(3)——语言基础/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论