【0x00】python base str操作
python语言学习前课:
python种类:
Jpython
Ironpython(c#)
Javascript python
RubyPython
Cpython
pypy - 虽然还不成熟,但是速度特别的快。
python能干什么:
啥都能干,特别全能。运行速度的问题可以使用高效的算法来弥补。
但是还是建议要学习一门运行速度更快的语言。因为python+高效算法肯定干不过java+高效算法。但是前提是要先学通python再说别的。把一门学透彻非常重要。
python安装以及环境变量操作:
python安装在OS上,写一个文件,文件中按照python的语法写, 这个文件交给python解释器,
python解释器去转换,并且执行。
环境变量的作用:只输入文件名就能执行,而不需要完整的路径。所以,判断环境变量配置完成
与否的方法是(以python为例:windows+r打开cmd,输入python,如果出来python的交互界面
则配置成功)
所谓配置环境变量,就是把路径加入到PATH中。
在linux下写python,要#!/usr/bin/env python
。因为linux可以通过./xxx.py
来执行,并没有显式的给出python解释器,所以需要在文件中指定一个python解释器。
当然你也可以代码开头不写这个。linux还可以通过windows类似的方式执行python代码。 python3 xxx.py
,这种是不需要配置环境变量的。但是还是要建议配置好环境变量。
文件的扩展名别管是什么东西,python解释器都可以解释,但是导入模块时,只能导入.py
文件,所以我们要写py就用.py
编码:ascii
是美国佬搞出来的,不支持日文中文韩文俄文等,所以大家一起搞出来了unicode
。但是unicode
只是搞出了一个二进制代码与字符的对应关系,没有规定二进制代码如何存储。所以出来了utf8
。utf8
是变长的,很省空间。用什么编码,就用什么解码,指定没错。
正式开始
python初识以及变量:
读取用户输入:
n = input('提示信息') # input返回读取到的字符串
变量:
- 变量的作用
- 变量的命名规则
- 变量名的深刻理解
1.变量的作用:比较简洁,更改数据比较方便。所谓简洁:有多个地方都要用到这个字符串,如果字符串较长,则程序写起来特别臃肿。
print('fnsdjgfkjdbfhjdbdkjngjsgbsjdhgbhs')
print('fnsdjgfkjdbfhjdbdkjngjsgbsjdhgbhs')
print('fnsdjgfkjdbfhjdbdkjngjsgbsjdhgbhs')
print('fnsdjgfkjdbfhjdbdkjngjsgbsjdhgbhs')
print('fnsdjgfkjdbfhjdbdkjngjsgbsjdhgbhs')
优化:
s = 'fnsdjgfkjdbfhjdbdkjngjsgbsjdhgbhs'
print(s)
print(s)
print(s)
print(s)
print(s)
所谓更改数据方便:如果现在不用上面那个串了,改用"hahaha",那么不用变量的程序需要在5处进行修改,而用了变量的只需要在给变量赋值处进行修改即可。
2.变量的命名规则:
由字母、数字、下划线组成, 数字不能打头(这点和C预言是一样的)。python3
中把中文也视为字母,但是真正的程序员不会这么干的。如果这么干了可能会跟部门其他人干架,先看看自己干架能力再说。变量名不能用python
中的关键字。而且变量名最好不要和python内置的东西重复,比如python的内置函数名。如果用内置函数名当作变量名的话,变量名会把内置函数覆盖,内置函数在这个文件中就失效了。
3.变量名的深刻理解:
相当于去内存中开辟一片内存先把某个东西存下来,然后给他贴个标签。这个标签就是变量名。它指代的是那片内存。
python的代码风格:
并不是java风格的驼峰式。而是下划线连接。
python中的注释:
# 示例一
'''
我是多行注释的第一行
我是多行注释的第二行
'''# 示例二
"""
我是多行注释的第一行
我是多行注释的第二行
"""
# 示例三 我是单行注释
python条件语句和基本数据类型:
python中的条件语句:
if 布尔表达式:语句
elif 布尔表达式:语句
else:语句
代码块 - 用缩进来标识
if-elif-else
结构至多执行一个代码块。
if
语句支持嵌套。
pass
代指空代码,无意义,用于表示这是一个代码块。
python中的基本数据类型:
- 字符串
- 数字 所有的整数都是int类型,所有的小数都是float类型。
- 布尔值
- 列表
- 元组
- 字典
- 集合
字符串:
字符串被双引号""
或者''
或者''' '''
或者""" """
来标识。
字符串支持加法(拼接字符串)。
字符串支持乘法(将n个字符串拼接)。
n1 = 'faker'
n2 = 'sb'
res1 = n1 + n2 # res1的值为'fakersb'
res2 = n2 * 3 # res2 的值为'sbsbsb'
数字:
加减乘整除(//
),正常除(/
),乘方(**
) 取余(%
)
布尔值: True or False
while循环以及练习题:
语法:
while 布尔表达式:代码块
continue
关键字:马上执行下一次的循环。
break
关键字:马上退出本层循环。
练习题:
1、使用while循环输出1,2,3,4,5,6,8,9,10
2、求1-100所有数的和
3、输出1-100内所有的奇数
4、输出1-100内所有的偶数
5、求1-2+3-4…99的所有数的和
6、用户登录 三次机会
题解:
# 第一题
def loop_output():n = 1while n < 11:if n == 7:passelse:print(n)n += 1
#第二题
def sum1_100():sums = 0target = 100i = 1while i <= target:sums += ii += 1print(sum)#第三题
def search_single():target = 100i = 1while i <= target:if i%2:print(i)else:passi += 1#第四题
def search_double():target = 100i = 1while i <= target:if not (i % 2):print(i)else:passi += 1#第五题
def sums():target = 100i = 1sums = 0while i < target:if i%2:sums += ielse:sums -= ii += 1print(sums)
#第六题
def login():usr = 'vth'passwd = 'root'deadline = 3while deadline > 0:t = input('hi,vth,please input your passwd:')if t != passwd:print('you are wrong.you only have %d chance.' % (deadline - 1))else:print('congratulation!login successful!welcome!')breakdeadline -= 1
补充知识点、编码:
UTF-8
和GBK
不能直接互相转换,要通过unicode
。utf-8
和unicode
可互转,GBK
和unicode
也可互转。
1个字节是8个二进制位。1个二进制位是1bit
,简称1b
. 1个字节是1个Byte
,简称1B
.
在python中,用什么编码就用什么解码。
s = '中国'
t = s.encode('gbk')
print(t.decode('gbk'))
python中的else
可以用在循环(包括while
,for
)外。循环内如果没有break
语句,那else
就没什么意义。执行完循环的代码块或者根本没有进入循环时,else
的代码块必然会被执行。
例:
k = 2while k > 0:print(k)k -= 1
else:print('my name is else')
# 上面和下面效果一样
k = -1while k > 0:print(k)k -= 1
print('my name is else')
输出:
2
1
my name is else
my name is else
如果循环内有break
,则如果循环被break
中断了,就不执行else
。如果没有被break
中断,就会执行else
。下面这段程序不会输出my name is else
k = 10while k > 0:print(k)if k == 7:breakk -= 1else:print('my name is else')
输出:
10
9
8
7
python运算符
+、-、*、/、//、%、** # 算术运算符
in、 not in # 成员运算符 返回布尔值
==、 > 、 < 、 >= 、<=、 != # 关系运算符 返回布尔值
and or not # 逻辑运算符 返回布尔值
+=、 -=、 *=、 /=、 //=、 %=、 **= #赋值运算符
in/not in 示例代码
str1 = 'faker'
str2 = 'ak'
if str2 in str1:print('在')
输出:
在
注意这个in和not in最小的单位是元素。也就是说,如果待查的obj,是容器其中某个元素的某个部分,那么是不能判定的。
l = [1,2,3,'asd']
if 'sd' in l:print('sd在l中')if 'asd' in l:print('asd在l中')
输出:
asd在l中
逻辑运算符的执行过程:(懒惰模式)
and
的话,如果左边是假,则直接返回假
or
的话,如果左边是真,则直接是真
not
的优先级大于 and
大于 or
从左到右。
python基本数据类型的魔法:
整型的魔法:
python中可以通过type()
函数来查看某个对象的类型。返回值为该对象的类型,参数为待查看的obj
。
int()
只能将可以当成整型的str转换成整型,听上去有点绕,看完解释就懂了。 int()
必选参数是str
,可选参数为base=
,base
默认值为10,可以指定2到36之间的值(因为从11进制开始用字母表示,26个英文字母+10进制正好是36)。如果字符串中的东西都是指定的进制可以接收的字符,那么就能转换。int()
的功能是把str
当作base
进制,返回10进制的值。
int()
魔法示例代码:
# int魔法格式
# int('必选参数str',base=数字(可选))
s = 'z'
r = int(s,base=36)
print(r)
输出:
35
bit_lenth()
示例代码
# bit_lenth()不接受参数,它是int对象的方法。
#返回将int值转换成二进制的位数(这里是没有前导0的)
age = 0x8
print(age.bit_length())
输出:
4
以下可以不看的。傻逼老男孩讲那么多自己记得住吗?直接跳过看最后的必须记住的字符串魔法即可。
字符串的魔法:
str.capitalize()
不接收参数,功能:返回将对象首字母大写后的串(并不原地改动,只改动第一个字母)
s = 'faker is a sb'
print(s.capitalize())
输出:Faker is a sb
str.casefold()
和lower()
不接收参数,功能:返回将对象小写后的串(并不原地改动)casefold()功能更强大,能把所有有小写的东西都变成小写,lower()只能处理英文字母。
s = 'iHandy'
print(s.casefold())
print(s.lower())
输出:
ihandy
ihandy
str.center(width,fillchar=None)
width
是必选参数,是一个整型值。 fillchar
是个可选参数,默认为空,可以指定一个长度为1的字符串。 功能:返回一个被fillchar填充过的并且将原串居中的总长度为width的字符串。如果左右填充数目不同,则肯定左边填充的多。
str.ljust(width,fillchar=None)
str.rjust(width,fillchar=None)
分别是左对齐和右对齐。意思是将原串贴左边还是贴右边。返回值也是一个被填充过的字符串。
s = 'iHandy'
print(s.center(8,'*'))
print(s.ljust(8,'*'))
print(s.rjust(8,'*'))
输出:
*iHandy*
iHandy**
**iHandy
str.count(sub,start=None,end=None)
sub
是必选参数,是一个长度不限的字符串。start
和end
是可选参数,是整型值。 功能:返回一个从原串的[start,end)
区间的sub
出现的次数。
s = 'iHandyiHandy'
print(s.count('dy',4))
输出:2
str.endswith(suffix,start=None,end=None)
suffix
是必选参数,是一个长度不限的字符串。start
和end
是可选参数,接收整型值。功能:返回一个布尔值来标识原串是否以suffix
串结尾。
s = 'iHandyiHandy'
print(s.endswith('dy'))
输出:True
str.startswith(suffix,start=None,end=None)
功能是返回一个布尔值来标志原串是否以suffix
串开头。别的东西和endswith
都一样。
str.find(sub,start=None,end=None)
sub
是必选参数,是一个长度不限的字符串。start
和end
是可选参数,接收整型值。功能:返回sub
串在原串中第一次出现时的下标。如果sub
串不在原串中,则返回-1
. 同样功能的还有str.index(sub, start=None, end=None)
index
如果找不到会直接报错。所以我们只用find
不用index
。
s = 'iHandyiHandy'
print(s.find('dydasdasdasadsadasdasd'))
输出:-1
str.format(*args, **kwargs)
*args
接收多个无名参数,**kwargs
接收多个关键字参数。
何为无名参数?format('faker','sb')
'faker'
和 'sb'
都是无名参数。何为关键字参数?format(name='faker',tag='sb')
这就是关键字参数。 *args
用来收集无名参数,**kwargs
用来收集关键字参数。功能:用来格式化字符串。功能类似的还有str.format_map(mapping)
,它接收一个字典。功能同样是格式化字符串。
s = '{name} {age} {tag}'
v = s.format(name='faker',age=18,tag='sb')
print(v)
s1 = '{:.2f}'.format(111.11111)
print(s1)
s2 = '{1} {0} {2}'.format('is','faker','sb')
print(s2)
s = '{name} {age} {tag}'
v = s.format_map({'name':'faker','age':18,'tag':'sb'})
print(v)
输出:
faker 18 sb
111.11
faker is sb
faker 18 sb
str.isalnum()
不接收参数。功能:返回一个布尔值来标识原串是否只包含数字或字母,或者又有数字又有字母。另外,这儿说的字母并不只是英文字母,经过测试,中文字也可以的。
s = 'faker1啊'
print(s.isalnum())
输出:True
str.expandtabs(tabsize=8)
接收一个可选参数,是传入一个int值。默认为8. 函数功能:将原串按tabsize
分段,遇到str
中的'\t'
时,'\t'
负责扩充至tabsize
的长度。例:如果s = 'fake\tr'.expandtabs(3)
由于'\t'
之前有4
个字符,3
个一组还余1
个字符,这1
个字符要被'\t'
扩充至tabsize
,所以'\t'
占2
个字符位。说的通俗点就是,总工作量就是tabsize
, 如果有人跟\t
组队,那么\t
就少占点;如果没人跟它组队,它就自己占tabsize
.用作制表特别好用。
s ='01\t012\t0123\t01234'.expandtabs(4)
print(s.expandtabs())
输出:
01 012 0123 01234
str.isalpha()
不接受参数,返回一个布尔值来标识原串是否只含有字母(不特指英文字母)
st = 'faker is a sb'
print(st.isalpha())
输出:False
str.isdigit() str.isdecimal() str.isnumeric()
不接受参数,返回一个布尔值标识原串是否是纯数字。isdigit
可以识别符号的'II'
但是isdecimal
就不行了。而且isnumeric
能识别中文'二'
,另外两个不行。
st = '123'
st1 = '②'
st2 = '二'
print(st.isdecimal())
print(st1.isdigit())
print(st1.isnumeric())
输出:
True
True
True
str.isidentifier()
不接受参数,返回一个布尔值标识原串是否符合python标识符的命名规则。
st = 'def'
print(st.isidentifier())
输出: True
str.islower()
不接收参数,返回一个布尔值标识原串是否是小写。
str.lower()
不接收参数,返回把原串转换成小写的字符串。
类似的,还有isupper
和upper
。
st = 'a'
sss = 'A'
print(st.islower())
print(sss.lower())
输出:
True
a
str.isprintable()
不接受参数,返回一个布尔值标识原串是否有排版控制的字符('\n'
,'\t'
)等。如果没有,则返回True
. 注意,空格会返回True
,因为它虽然肉眼不可见,但是它不是排版控制。
st = '\n\t'
s1 = ' '
print(st.isprintable(),s1.isprintable())
输出:False True
str.isspace()
不接受参数,返回一个布尔值标识原串是否全部是肉眼不可见的字符。包括空格,制表符,换行符等。
st = '\n\t'
s1 = ' '
print(st.isspace())
输出:True
str.istitle()
不接受参数,返回一个布尔值标识,原串如果所有单词的首字母都大写且其余字母都小写,则返回True
。str.title()
不接收参数,返回将一个串变成标准的title
串(首字母大写,其余全小写)
st = 'faker is a sb of korAAn'
print(st,st.istitle())
s = st.title()
print(s,s.istitle())
s1 = s + 'AAAAA'
print(s1,s1.istitle())
输出:
faker is a sb of korAAn False
Faker Is A Sb Of Koraan True
Faker Is A Sb Of KoraanAAAAA False
str.join(iterable)
接收一个可迭代对象,并且这个可迭代对象的每一个元素需要是一个字符串。功能:按元素打散iterable
,将str
插入元素之间的空隙,返回拼接好的字符串。
st = 'fakerisasb'
l = ['a','b']
k = ('1','2','3')
f = {'2','4','6'}
d = {'1':11,'2':22,'3':33}
st1 = '**'
print(st1.join(l))
print(st1.join(st))
print(st1.join(k))
print(st1.join(f))
print(st1.join(d.keys()))
输出:
a**b
f**a**k**e**r**i**s**a**s**b
1**2**3
2**6**4
1**2**3
str.strip(chars) str.lstrip(chars) str.rstrip(chars)
接收一个不限长度的字符串。返回去除两端连续的符合chars
里任一元素的字符后的字符串。怎么界定两端?只要有1
个字符不再chars
里,就可以算不是两端了。
s = ' *#*#***2121***#*# '
print(s.strip('* #1')) # 只要两头的字符在参数的字符串中,就可以去除
s.strip()
输出:212
str.maketrans(str1,str2) str.translate(table)
这两个函数配合使用可以做一个替换功能。
maketrans
接收两个参数,第一个是待替换字符串,另一个是替换字符串。返回一个对应表table
. translate
接受一个对应表参数table
,返回用table
的规则替换后的字符串。
一定要注意str1的长度应该和str2的长度相同。
s = 'faker say that...'
print(s)# 创建字符串的替换关系 两个参数分别是 待替换串和替换串
table = str.maketrans('faker','dasbb') # 两个字符串长度要相等
# 接收对应关系参数,返回替换后的字符串
res = s.translate(table)
print(res)
str.partition(str1) str.rpartition(str1) str.split() str.rsplit()
分割字符串。partition
和 rpartition
必须接收str
类型的参数。返回值是1个包含3个字符串的元组。如果原串中包含str1串,则str1串必定是元组的第二个元素,如果不包含str1串,则元组的第一个元素是原串,第二三个是空串。分割操作只进行一次。partition是从左向右找,rpartition是从右往左找。对于rpartition来说,如果不包含str1串,则元组的第三个元素是原串,第一第二个是空串。
示例代码:
test = 'f123f1'
r = test.partition('f21')
r2 = test.rpartition('f21')
print(r,r2)
test.split()
输出:
('f123f1', '', '') ('', '', 'f123f1')
str.split(str1,int)
有两个可选参数。第一个可选参数接收一个字符串,默认值为isspace()
的东西。第二个参数接收一个int
值,代表分割次数。默认是分割完为止。
split()
分割时会把分割标志给去除。返回一个包含被分割后的各字符串的列表。
rsplit()
与split()
完全一样,只不过是从右往左分割。
示例代码:
test = '\n1234543\n21234543\n21'
print(test.rsplit())
输出:['1234543', '21234543', '21']
str.splitlines(tag=False)
tag
是一个可选参数,默认为False
. 功能:按照换行符'\n'
进行分割。如果tag
是True
,则在分割时,把'\n'
分给前面的字符串。
s = '11\t11\n11'
print(s.splitlines(True))
输出:['11\t11\n', '11']
str.swapcase() 不接受参数,返回将字符串大写字母换小写,小写字母换大写之后的字符串。
s = 'aBc'
print(s.swapcase())
输出:
AbC
必须要记住的字符串魔法:
补充:str.replace(old,new,int=None)
将str
中的old
子序列替换成new
子序列。int
默认为None
,就是全部替换。也可以指定替换次数。
st = 'guiminYuan say wahaha'
print(st.replace('guiminYuan','vth'))
输出:
vth say wahaha
字符串的灰魔法:
字符串的灰魔法:
- 索引
- 切片
- len
- for循环
- range()
代码示例:
# 索引示例
#python支持两套index。# 一个是从前往后数,0到n# 另一个是从后往前数,-1,-2等
s = 'faker'
print(s[0],s[2],s[-1])# 切片示例
# 切片时有3个参数,starts,ends,step
# step以及它前面的冒号可以不写。
# 但是第一个冒号一定要有
s = 'faker'
s = s[1:3:-1]
s = s[1:3] # 代表切片坐标1(闭区间)到坐标3(开区间)
s = s[1:] # 代表从1到最后
s = s[:3] # 代表从最开始到3 一定要注意,python的区间都是左闭右开的
s = s[::-1] #反转字符串
print(s)# len()示例
# len()接收一个可迭代对象,返回可迭代对象中元素的个数
print(len('faker'))# for循环示例
iterable = 'abc'
for i in iterable: # 这里的i指代的就是iterable中的元素print(i) # 这样取不到下标。# 想取到下标可以这样
for index,ori in enumerate(iterable):print('index is :',index,'value is :',ori)#range()举例
for i in range(5):print(i,end=' ')
print()
for i in range(1,4):print(i,end=' ')
print()
for i in range(17,10,-2): #第三个参数是stepprint(i,end=' ')
print()输出:
0 1 2 3 4
1 2 3
17 15 13 11
内存一旦创建不能修改。所以想要修改字符串,只能将字符串调用方法返回给另外一个新的字符串。
【0x00】python base str操作相关推荐
- python列表字典操作_Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结...
创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_star ...
- Python 1-10 字符串操作
Python 1-10 字符串操作 1.字符串拼接 >>> s = 'hello'*2 >>> s = 'hello'+'world' >>> s ...
- python base
python base 运算符: #在没有()的情况下,优先级 not>and>or 同一优先级从左到右依次计算 print(2>1 and 3<4 or 4>5 and ...
- python 字符串提取操作_python 中对字符串的操作
一: 字符串基础介绍 python中定义的字符串是个常量,一旦定义后只能使用.不能修改 1.字符串的定义: s = ' aaaa' s = "bbbb " s = "&q ...
- python切片语法-Python字符串切片操作知识详解
python 中关于字符串切片的一个问题 aa[0:6] 表示取 第0,1,2,3,4,5 位的数据 所以是6个 123456 aa[:-1] 表示取开始到倒数第二位的数据 所以也是123456 就像 ...
- python 文件 IO 操作
Python 的底层操作 * 其实Python的文件IO操作方法,和Linux底层的差不多 打开 f = open(filename , "r") 后面的 "r" ...
- 25个python专属骚操作
本文我总结了25个python专属骚操作,实属提高效率/同事吹牛只利器,确定不收藏吗? 一.原地交换 Python 提供了一个直观的在一行代码中赋值与交换(变量值)的方法 x, y = 10, 20 ...
- python持久化存储文件操作
一. 文件操作介绍 日常中的数据存储在纸上, 而计算机的数据存储在哪里呢? -硬盘上 1. 文件的作用 一个程序在运行过程中用了九牛二虎之力终于计算出了结果,试想一下如果不把这些数据存放起来,相比重启 ...
- python文件路径操作及pathlib库
对文件的路径操作是一个非常基础的问题,但也是一个至关重要的问题,优雅的路径操作不仅可以让代码可读性更高:还可以让用户避免很多不必要的麻烦.python中路径操作常用的几种方式重要包括:字符串拼接.os ...
最新文章
- dalsa线扫相机调试文档_线阵相机调试文档
- Django入门教程(二)
- java poi导入50万数据_java从oracle读取50万条数据写入Excel中抛GC overhead limit exc
- python-list:列表-元组-字符串
- python将txt读入矩阵_Python3 把txt数据文件读入到矩阵中
- 两个时间的差值Java,Java如何找到两个时间之间的差值?
- 智能会议系统(6)---高效视频会议系统
- 2021年中国水力发电装机量、发电量和竞争格局情况,总水电装机容量达391GW「图」
- CTF题库NSCTF crypto50
- vue项目查看脚手架版本报错
- vue 敏感词过滤 前端
- 基于SpringBoot的城市建设用地管理系统的设计与实现
- 2.1.3 客户端网络连接对象
- 《有一种失败叫瞎忙》读书笔记
- 什么是HashMap?
- matlab 鼠标画图,在matlab中使用鼠标在GUI上绘图
- 基于openmv的小车
- 【数据结构与算法】二叉树题目很难?一句话秒杀基础二叉树题目
- Perl 正则表达式
- 膜蛋白分子动力学模拟流程
热门文章
- PLC与上位机的socket通讯——ABB机器人程序(三)
- 结合读取 https://kj.sscejia.com/ssq/kaijiang/61.html 开奖号码分析 下一次 数字组合
- 股票列表接口数据API
- DEAP(Database for Emotion Analysis using Physiological Signals)介绍
- 图形学基础概念笔记(一)
- cad怎么将图层后置_CAD中如何将图形前置和后置吗? - CAD自学网
- 动软生成器添加Mysql注释
- win10麦克风直接输出声音_解决windows10操作系统插入耳机和麦克风却不显示设备的问题...
- 郝斌数据结构——链表
- c语言程序课程设计摘要,C语言程序课程设计报告精编.docx