保研考研机试攻略:python笔记(1)

🐨🐨🐨宝子们好呀 ~ 我来更新欠大家的python笔记了,从这一篇开始我们来学下python,当然,如果只是想应对机试并且应试语言以C和C++为主,那么大家对python了解一点就好,重点可以看高分篇、满分篇和大数问题python合集就好,本部分建议学有余力的同学或者想多了解一些python的同学来看哦 ~ 话不多说,上干货 ~ ( •̀ ω •́ )✧

目录

🐨🐨🐨1输出格式问题

🐼数字对齐

🐼输出间隔问题

🐼global与nonlocal

🐼format自适应小数点

🐼format用法

🐶1、基本用法

🐶2、进阶用法

🐶3、多个格式化

🐼如何print

🐨🐨🐨2字符类

🐼ASCII码转换

🐶字符串转ASCII码

🐶ASCII码转字符串

🐼字母大小写转换

🐼字符检测函数isalpha()

🐼去除字符串的空格

🐶去除字符串开头或者结尾的空格

🐶去除字符串开头的空格

🐶去除字符串结尾的空格

🐶去除全部空格

🐼字符串和数组

🐨🐨🐨3列表类

🐼注意事项

🐼enumerate循环语句

🐼index获取指定值元素的位置

🐼insert插入元素

🐶语法

🐶参数

🐶返回值

🐶实例

🐼删除元素

🐶remove()

🐶pop()

🐶切片

🐶clear和del

🐼count统计元素出现次数

🐼用数组实现栈

🐼差分与前缀和方法


在正式开始之前,我先提醒一下大家, 若试题中有多组输入,每组样例输入完后会有EOFerror,所以我们在写python代码时要采用try+except的结构来防止阻塞!

🐨🐨🐨1输出格式问题

🐼数字对齐

python 复制代码
print("%-3s " % str(j), end='')#%-3s表示 'str(j)'占用三个字符,向右对齐,多余字符用空格
补充

🐼输出间隔问题

python 复制代码
#看清间隔大小,此处无需加空格
for i,s in res_order: 
    print(i,s)
#若加空格,间隔明显偏大,输出格式为
'''
input:
3
1 90
2 87
3 92
output: 2   87  1   90  3   92
'''

🐼globalnonlocal

global 指引用全局变量, nonlocal 只能用于嵌套函数中

python 复制代码
a = 0
def change_a(): 
    global a
    a =1
    print(a) #1
def change(): 
    b = 0
    def c_b():
        nonlocal b b =1
        print(b) #1 #global b
        #b =1 # 报错:没有b这个全局变量

🐼format****自适应小数点

python 复制代码
price = int(input())
discount =1
if price >=1000 and price <2000: 
    discount = 0.95
elif price >=2000 and price <3000: 
    discount = 0.9
elif price >=3000 and price <5000: 
    discount = 0.85
elif price >=5000:
    discount = 0.8
pay = discount*price
print("discount={},pay={:g}".format(discount,pay))##{:g}自动去掉小数点后的0

🐼format****用法

🐶1、基本用法

(1)不带编号,即"{}"

(2)带数字编号,可调换顺序,即"{1}"、"{2}"

(3)带关键字,即"{a}"、"{tom}"

>>> print('{} {}'.format('Hello ','world ')) # 不带字段

Hello world

>>> print('{0} {1}'.format('Hello ','world ')) # 带数字编号

Hello world

>>> print('{0} {1} {0}'.format('Hello ','world ')) # 打乱顺序

Hello world Hello

>>> print('{1} {1} {0}'.format('Hello ','world '))

world world Hello

>>> print('{a} {b} {a}'.format(a='Hello ',b='world ')) # 带关键字

Hello world Hello

🐶2、进阶用法

(1)< (默认)左对齐、 > 右对齐、 ^ 中间对齐、 = (只用于数字)在小数点后进行补齐

(2)取位数"{:4s}"、"{:.2f}"等

>>> print('{} and {}'.format('Hello ','world ')) # 默认左对齐

Hello and world

>>> print('{:10s} and {:>10s}'.format('Hello ','world ')) # 取10位左对齐,取10位右对齐

Hello and world

>>> print('{:^10s} and {:^10s}'.format('Hello ','world ')) # 取10位中间对齐

Hello and world

>>> print('{} is {:.2f}'.format(1.123,1.123)) # 取2位小数

1.123 is 1.12

>>> print('{0} is {0:>10.2f}'.format(1.123)) # 取2位小数,右对齐,取10位

1.123 is 1.12

🐶3、多个格式化

'b' - 二进制。将数字以2为基数进行输出。

>>> print('{0:b}'.format(3))

11

'c' - 字符。在打印之前将整数转换成对应的Unicode字符串。

>>> print('{:c}'.format(20))

4

'd' - 十进制整数。将数字以10为基数进行输出。

>>> print('{:d}'.format(20))

20

'o' - 八进制。将数字以8为基数进行输出。

>>> print('{:o}'.format(20))

24

'x' - 十六进制。将数字以16为基数进行输出,9以上的位数用小写字母。

>>> print('{:x}'.format(20))

14

'e' - 幂符号。用科学计数法打印数字。用 'e'表示幂。

>>> print('{:e}'.format(20))

2.000000e+01

'g' - 一般格式。将数值以fixed-point格式输出。当数值特别大的时候,用幂形式打印。

>>> print('{:g}'.format(20.1))

20.1

'n' - 数字。当值为整数时和 'd'相同,值为浮点数时和 'g'相同。不同的是它会根据区域设置插入数字分隔符。

>>> print('{:f}'.format(20))

20.000000

>>> print('{:n}'.format(20))

20

'%' - 百分数。将数值乘以100然后以fixed-point('f')格式打印,值后面会有一个百分号。

>>> print('{:%}'.format(20))

2000.000000%

🐼如何print

python 复制代码
a = "12" 
b = "3"
#非指定end时,print默认end为换行符
print("%-3s" % str(a), end=' !')
#"-"为左对齐,"3"表示取3位,不够则空格补位,"%"后的 str(a)对应于"%-3s"
print("%3s" % str(b), end=' !')
#a: 12 ! 
#b:   3 !

字符串输出

  • %s

  • %10s------右对齐,占位符10位 %-10s------左对齐,占位符10位

  • %.2s------截取2位字符串

  • %10.2s------10位占位符,截取两位字符串

python 复制代码
print('%s' % 'hello world')  # 字符串输出
#hello world

print('%20s' % 'hello world')  # 右对齐,取20位,不够则补位
#hello world

print('%-20s' % 'hello world')  # 左对齐,取20位,不够则补位
#hello world

print('%.2s' % 'hello world')  # 取2位
#he

print('%10.2s' % 'hello world')  # 右对齐,取2位
#he

print('%-10.2s' % 'hello world')  # 左对齐,取2位
#he

🐨🐨🐨2字符类

🐼ASCII码转换

🐶字符串转ASCII码

借助ord()函数实现,ASCII码转化可以看作字符减运算, ord()是python自带的函数,无需导入:

>>> print(ord('c')-ord('a'))

2

借助ord()函数不仅可以进行字符减运算,也可以进行加运算,但一般不这么用:

>>> print(ord('c')+ord('a'))

196

🐶ASCII码转字符串

直接借助python自带的chr()函数:

>>> print(chr(99))

c

🐼字母大小写转换

  • upper():所有字母大写

  • lower():所有字母小写

  • capitalize():首字母大写,其他字母小写

  • title():每个单词首字母大写,其他小写

python 复制代码
#encoding:UTF-8
msg = 'www.BAIDU.com.123'
print(msg.upper())  #upper()函数,将所有字母都转换成大写 
print(msg.lower())  #lower()函数,将所有字母都转换成小写
print(msg.capitalize())  #capitalize()函数,将首字母都转换成大写,其余小写 
print(msg.title())  #title()函数,将每个单词的首字母都转换成大写,其余小写
'''
WWW.BAIDU.COM.123 
www.baidu.com.123 
Www.baidu.com.123 
Www.Baidu.Com.123
'''

🐼字符检测函数isalpha()

isalpha() 方法用于检测指定字符串是否只由字母组成。如果字符串中至少有一个字符并且所有字符都是字母则返回 True,否则返回 False。

python 复制代码
#!/usr/bin/python 
# coding=utf-8

str = "runoob";
print str.isalpha();

str = "runoob菜鸟教程"; 
print str.isalpha();

str = "this is string example....wow!!!"; 
print str.isalpha();

'''
True  
False 
False
'''

🐼去除字符串的空格

🐶去除字符串开头或者结尾的空格

>>> a = " a b c " >>> a.strip()

'a b c'

🐶去除字符串开头的空格

>>> a = " a b c "

>>> a.lstrip()

'a b c '

🐶去除字符串结尾的空格

>>> a = " a b c "

>>> a.rstrip()

' a b c'

🐶去除全部空格

replace:

>>> a = " a b c "

>>> a.replace(" ", "") 'abc'

split()+join():

split()可以去除字符串中的空格,并按空格分割成list。

>>> a = " a b c "

>>> b = a.split() # 字符串按空格分割成列表 >>> b ['a', 'b', 'c']

>>> c = "".join(b) # 使用一个空字符串合成列表内容生成新的字符串 >>> c 'abc'

快捷用法

>>> a = " a b c "

>>> "".join(a.split()) 'abc'

🐼字符串和数组

数组转字符串:

python 复制代码
''.join(['a','b','c'])#'abc'

字符串转数组:

python 复制代码
list('abc')#['a','b','c']
'a  b c'.split()#['a','b','c']

🐨🐨🐨3列表类

🐼注意事项

列表的append使用的是引用传递,即加入的是原数据地址,对原数据进行pop等操作时同时也会改变使用append原数据的数据

解决方法:利用list.copy() 或者使用list[:]代替list

python 复制代码
a = [1,2,3]
b =[a] # [[1,2,3]] 
c =[3]
b.append(a)# [[1,2,3],[1,2,3]]
b.append(c) #[[1,2,3],[1,2,3],[3]] 
a.pop()
c=[4]
b # [[1,2],[1,2],[3]]
b.append(a.copy())# [[1,2],[1,2],[3],[1,2]]
b.append(a[:])# [[1,2],[1,2],[3],[1,2],[1,2]] 
a.pop()
b # [[1,2],[1,2],[3],[1,2],[1,2]]

在使用append时要注意,当目标list之前有其他变量引用时,值也会变化如:

python 复制代码
a=[1] 
b=a
c = a[:]
d =a+[2]
a.append(3)
# a [1,3] 
# b [1,3] 
# c [1]
# d [1,2]

🐼enumerate循环语句

python 复制代码
while True: 
    try:
        string = list(input()) 
        list1 = []
        for i in string:
            if i.isalpha():
                list1.append(i)
        #大写全变为小写,sort可满足 当字母相同不影响本来输入的数据的顺序
        list1.sort(key=lambda c: c.lower())
        #此类循环可以得到index值
        for index, i in enumerate(string): 
            if not i.isalpha():
                # 可通过insert直接插入得到结果,无需另构建一个空字符串相加获得结果
                list1.insert(index, i) 
        print(''.join(list1))
    except:
        break

🐼index获取指定值元素的位置

python 复制代码
#用法,获取列表中值为val的索引值,但只能寻找一维的list 
#当列表中有多个相同val值时,只返回最小的索引值
a = [1,2,2,3] 
val = 2
a.index(val)
# 1

🐼insert插入元素

insert函数用于将指定对象插入列表的指定位置。

🐶语法

insert()方法语法:

python 复制代码
list.insert(index, obj)

🐶参数

  • index -- 对象 obj 需要插入的索引位置。

  • obj -- 要插入列表中的对象。

🐶返回值

该方法没有返回值,但会在列表指定位置插入对象。

🐶实例

python 复制代码
#!/usr/bin/python
aList = [123, 'xyz', 'zara', 'abc'] 
aList.insert( 3, 2009)
print "Final List : ", aList

#输出:
#Final List : [123, 'xyz', 'zara', 2009, 'abc']

注意,下标是从0开始的!

🐼删除元素

  • remove():一次删除一个元素;如果列表内有重复元素则删除第一个;元素不存在时抛出异常 ValueError

  • pop():删除一个指定的索引位置上的元素;指定索引不存在则抛出异常IndexError

  • 切片:一次至少删除一个元素

  • clear():清空列表

  • del:删除列表

🐶remove()

指定值

  1. 一次删除一个元素;

  2. 如果列表内有重复元素则删除第一个;

  3. 元素不存在时抛出异常ValueError。

python 复制代码
lst = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
print("原列表为:", lst)
#原列表为:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

lst.remove(5)
print("删除后的列表为:", lst)
#删除后的列表为:[0, 1, 2, 3, 4, 6, 7, 8, 9] 

🐶pop()

删除一个指定的索引位置上的元素;指定索引不存在则抛出异常IndexError

注意:如果不指定参数,则默认删除最后一个元素!

python 复制代码
lst = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
print("原列表为:", lst)
#原列表为:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

lst.pop(5)
print("删除后的列表为:", lst)
#删除后的列表为:[0, 1, 2, 3, 4, 6, 7, 8, 9] 

🐶切片

python 复制代码
# 切片的本意为截取原有列表中指定的的某一段,或者说是复制指定的那一段,并返回了新的列表
lst = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
print("原列表为:", lst)
# 借助列表的添加方式,原来添加的操作中,使得lst[start,stop] = lst1(此为添加的元素) 
# 那么删除操作可以类似的,使lst1为空列表,那么原列表中指定一段的元素被空替代,则完成删除
lst[1:3] = [] # 将第1,2索引位的元素删除 
print("删除后的列表为:", lst)

🐶clear和del

clear为清空列表中的元素,列表对象还存在

del直接删除了列表对象

python 复制代码
lst = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
print("原列表为:", lst)
lst.clear()
print("删除后的列表为:", lst)

lst = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
print("原列表为:", lst)
del lst
print("删除后的列表为:", lst)

🐼count统计元素出现次数

统计列表中某个元素出现的次数

python 复制代码
#用法[ ].count(object)
[1,2,1,3].count(1)
# 2

🐼用数组实现栈

python 复制代码
"""	
isEmpty	判断是否为空
push	添加新元素(及最后被添加的元素为栈顶)
pop	    移出栈顶元素
peek	查看当前栈顶元素
size	计算数量
"""	

class Stack:#创建一个栈
    def_init_(self):#初始为空栈
        self.items = [] 
    def isEmpty(self):
        return self.items ==[] 
    def push(self, item):
        self.items.append(item) #添加新成员,新成员为顶,旧骨干为底 
    def pop(self):
        return self.items.pop() #移出顶,底上位
    def peek(self):             #查看当前顶部成员
        return self.items[-1]
    def size(self):             #查看当前成员数量
        return len(self.items)

🐼差分与前缀和方法

适用题型:某一个区间同时加减一个数

举例,每次对某一区间的数进行加减操作,最后查询某坐标的数:

普通方法:创建一个数组,对输入的每个区间分别循环,区间内的所有值加一。此方法容易理解,但是容易超时。

优化方法:

1、差分:只对每个输入的起点和终点进行加减操作

2、前缀和:最后统一只循环一次,每次迭代当前数目加前一个数的大小,即为最终的统计数

python 复制代码
data = []
check = []  
while True:
    Bi, Ei = map(int, input().split()) 
    if Bi == Ei == 0:
        break
    data.append((Ei, Bi))

while True:
    bi, ei = map(int, input().split()) 
    if bi == ei == 0:
        break
    check += [i for i in range(bi, ei + 1)]

max_index = max(data)[0]
wall = [0 for i in range(max_index+5)]

# 记录差分 ,表示Bi到Ei区间存在值
for Ei, Bi in data: 
    wall[Bi] += 1
    wall[Ei+1] -= 1

# 遍历一遍,求前缀和
for i in range(1, len(wall)): 
    wall[i] += wall[i - 1]

for v in check:
    print(wall[v])

好啦,今天我们先学到这里,学完的同学们都太棒了,我们下一篇见 ~ 👋👋👋

有什么问题我们随时评论区见哦 ~ 🌹🌹🌹

相关推荐
_.Switch8 分钟前
高效网络自动化:Python在网络基础中的应用
运维·开发语言·网络·python·数据分析·自动化
lanboAI15 分钟前
基于yolov8的驾驶员疲劳驾驶检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】
pytorch·python·yolo
南巷逸清风19 分钟前
LeetCode 101.对称二叉树
c++·python·算法·leetcode
纪怽ぅ33 分钟前
浅谈——深度学习和马尔可夫决策过程
人工智能·python·深度学习·算法·机器学习
七月巫山晴33 分钟前
QChart中柱形图的简单使用并实现【Qt】
开发语言·数据结构·c++·qt·算法·排序算法
阿丁小哥36 分钟前
【Python各个击破】numpy
开发语言·python·numpy
韭菜盖饭40 分钟前
LeetCode每日一题685---冗余连接 II
算法·leetcode·职场和发展
琼火hu43 分钟前
R语言笔记(五):Apply函数
开发语言·笔记·r语言·apply
计算机学姐44 分钟前
基于协同过滤算法的旅游网站推荐系统
vue.js·mysql·算法·mybatis·springboot·旅游·1024程序员节
一个不喜欢and不会代码的码农1 小时前
力扣1381:设计一个支持增量操作的栈
数据结构·算法·leetcode