🐨🐨🐨宝子们好呀 ~ 我来更新欠大家的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输出格式问题
🐼数字对齐
print("%-3s " % str(j), end='')#%-3s表示 ‘str(j)’占用三个字符,向右对齐,多余字符用空格
补充
🐼输出间隔问题
#看清间隔大小,此处无需加空格
for i,s in res_order: print(i,s)
#若加空格,间隔明显偏大,输出格式为
'''
input:
3
1 90
2 87
3 92
output: 2 87 1 90 3 92
'''
🐼global与nonlocal
a = 0
def change_a(): global aa =1print(a) #1
def change(): b = 0def c_b():nonlocal b b =1print(b) #1 #global b#b =1 # 报错:没有b这个全局变量
🐼format自适应小数点
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
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位占位符,截取两位字符串
print('%s' % 'hello world') # 字符串输出
#hello worldprint('%20s' % 'hello world') # 右对齐,取20位,不够则补位
#hello worldprint('%-20s' % 'hello world') # 左对齐,取20位,不够则补位
#hello worldprint('%.2s' % 'hello world') # 取2位
#heprint('%10.2s' % 'hello world') # 右对齐,取2位
#heprint('%-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():每个单词首字母大写,其他小写
#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。
#!/usr/bin/python
# coding=utf-8str = "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'
🐼字符串和数组
数组转字符串:
''.join(['a','b','c'])#'abc'
字符串转数组:
list('abc')#['a','b','c']
'a b c'.split()#['a','b','c']
🐨🐨🐨3列表类
🐼注意事项
列表的append使用的是引用传递,即加入的是原数据地址,对原数据进行pop等操作时同时也会改变使用append原数据的数据
解决方法:利用list.copy() 或者使用list[:]代替list
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之前有其他变量引用时,值也会变化如:
a=[1]
b=a
c = a[:]
d =a+[2]
a.append(3)
# a [1,3]
# b [1,3]
# c [1]
# d [1,2]
🐼enumerate循环语句
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获取指定值元素的位置
#用法,获取列表中值为val的索引值,但只能寻找一维的list
#当列表中有多个相同val值时,只返回最小的索引值
a = [1,2,2,3]
val = 2
a.index(val)
# 1
🐼insert插入元素
insert函数用于将指定对象插入列表的指定位置。
🐶语法
insert()方法语法:
list.insert(index, obj)
🐶参数
-
index -- 对象 obj 需要插入的索引位置。
-
obj -- 要插入列表中的对象。
🐶返回值
该方法没有返回值,但会在列表指定位置插入对象。
🐶实例
#!/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。
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
注意:如果不指定参数,则默认删除最后一个元素!
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]
🐶切片
# 切片的本意为截取原有列表中指定的的某一段,或者说是复制指定的那一段,并返回了新的列表
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直接删除了列表对象
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统计元素出现次数
统计列表中某个元素出现的次数
#用法[ ].count(object)
[1,2,1,3].count(1)
# 2
🐼用数组实现栈
"""
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、前缀和:最后统一只循环一次,每次迭代当前数目加前一个数的大小,即为最终的统计数
data = []
check = []
while True:Bi, Ei = map(int, input().split()) if Bi == Ei == 0:breakdata.append((Ei, Bi))while True:bi, ei = map(int, input().split()) if bi == ei == 0:breakcheck += [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] += 1wall[Ei+1] -= 1# 遍历一遍,求前缀和
for i in range(1, len(wall)): wall[i] += wall[i - 1]for v in check:print(wall[v])
好啦,今天我们先学到这里,学完的同学们都太棒了,我们下一篇见 ~ 👋👋👋
有什么问题我们随时评论区见哦 ~ 🌹🌹🌹