学习python,从入门到放弃(7)
学习python,从入门到放弃(7)
字符串的其他内置方法
-
移除首尾指定字符
.strop() 用于移除首尾指定字符,当在前面加入方向时,就可以移除指定方向上的指定字符了。
.lstrip() 用于移除左边的指定字符。
.rstrip() 用于移除右边的指定字符。
s1 = '$$$jason$$$' print(s1.strip('$')) # jason print(s1.lstrip('$')) # jason$$$ print(s1.rstrip('$')) # $$$jason -
大小写相关操作
验证码识别不需要区分大小写,可以使用 .lower() 和 .upper() 两个操作。
.lower() 可以将所有英文字母变为小写。
.upper() 可以将所有英文字母变为大写。
s2 = 'JaSoN666Sb' print(s2.lower()) # jason666sb print(s2.upper()) # JASON666SB.islower() 和 .isupper() 用于判断字符串中所有的英文字母是否是纯小写或大写。
s1 = 'aaa' s2 = 'AAA' print(s1.lower()) # Ture print(s2.lower()) # False print(s1.upper()) # False print(s2.upper()) # Ture -
判断开头或结尾是否是指定字符
.startswith() 用于判断字符串头或结尾是否是指定字符。返回布尔值。
s3 = 'jason kevin jason tony 666' print(s3.startswith('j')) # True print(s3.startswith('jason')) # True print(s3.startswith('tony')) # False print(s3.endswith('6')) # True print(s3.endswith('666')) # True print(s3.endswith('jason')) # False -
格式化输出
之前的格式化输出运用了占位符,而这次使用了 format 方法。
-
与占位符一致,使用的{}占位
print('my name is {} my age is {}'.format('jason', 18)) # my name is jason my age is 18是最简单的用法。
-
根据索引取值
print('my name is {0} {0} {0} my age is {0} {1}'.format('jason', 18)) # my name is jason jason jason my age is jason 18括号中的元素相当于元组,可以反复使用多次。
-
根据指名道姓的方式取值
print('my name is {name} {name} my age is {age} {pwd}'.format(name='jason', age=18, pwd=123)) # my name is jason jason my age is 18 123与字典相似,通过关键字赋值。
-
直接使用已经出现过的变量
name = 'jason' age = 18 print(f'my name is {name} my age is {age} {name} {age}') # my name is jason my age is 18 jason 18比较方便,可以缩减代码量。
注意 f 不要写漏了。
-
-
拼接字符串
字符串的拼接有多种方法。最简单的方法就是可以直接使用 + 号连起来。
s1 = '123' s2 = '321' print(s1 + s2) # 123321但是这种方法非常占用内存资源,效率较低。
使用字符串的内置方法 .join() ,可以将字符或字符串插入到另一组字符串中,或者插入列表中将其拼接。
s1 = '123' s2 = '666' print(s2.join(s1)) # 166626663 print('$'.join(['jason', 'kevin', 'justin', 'tony'])) # jason$kevin$justin$tony注意:插入列表中时,列表中的元素必须是字符串,否则会报错。
-
替换字符串中指定的字符
word 与 txt 等文本编辑器中都有这个功能,在python中可以使用 .replace() 来实现。
s1 = '111111111122235465112211111' print(s1.replace('1', '0')) # 000000000022235465002200000这是默认的一次性替换,也可以指定替换的个数。
s1 = '111111111122235465112211111' print(s1.replace('1', '0', 6)) # 000000111122235465112211111 -
判断字符串中是否是纯数字
int() 只有当字符串中是纯数字时才能使用,所以当我们不知道容器中是不是纯数字的字符串的时候,就可以使用 .isdigit() 来判断。
s1 = 'jason123' s2 = '123' s3 = '123.1' print(s1.isdigit()) # False print(s2.isdigit()) # True print(s3.isdigit()) # False -
查找指定字符对应的索引值
.find() 用于查找字符串中指定的字符在哪个位置,如果指定 开始和结束的范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回-1。
str1 = "this is string example....wow!!!"; str2 = "exam"; print str1.find(str2); # 15 print str1.find(str2, 10); # 15 print str1.find(str2, 40); # -1也可以使用 .index() 方法,用法与 .find() 一样,但是当此方法找不到指定字符时,会报错。

-
文本位置改变
-
.center()
返回一个原字符串居中,并使用指定字符填充至指定长度的新字符串,字符串左右使用尽可能相同的参数提供的字符填充。默认为空格填充,当长度参数小于等于原字符串的长度时,原样返回,无法使左右字符数相等时候,字符串字符数为奇数时左侧字符会比右侧少 1,字符串字符数为偶数时左侧字符会比右侧多 1 。
a = 'hello' print(a.center(20)) ''' hello ''' print(a.center(19, '-')) ''' -------hello------- ''' print(a.center(3)) ''' hello ''' print(a.center(8, '-')) ''' -hello-- ''' b='runoob' print(b.center(9, '-')) ''' --runoob- ''' -
.ljust()
返回一个原字符串左对齐,并使用指定字符填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。
a = 'hello' print(a.ljust(20, '0')) # hello000000000000000-
.rjust()
返回一个原字符串右对齐,并使用指定字符填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。
a = 'hello' print(a.rjust(20, '0')) # 000000000000000hello
-
-
特殊符号
斜杠与一些英文字母的组合会产生特殊的含义
print('ja\tson\nke\avin') ''' ja son kevin '''如果想取消它们的特殊含义,可以在字符串的前面加一个字母 r 即可。
print(r'ja\tson\nke\avin') ''' ja\tson\nke\avin ''' -
.captalize() , .swapcase() , .title()
-
.captalize() 用于首字母大写
message = 'hello everyone nice to meet you!' print(message.capitalize()) # Hello everyone nice to meet you! -
.swapcase() 用于大小写反转
message1 = 'Hi girl, I want make friends with you!' print(message1.swapcase()) # hI GIRL, i WANT MAKE FRIENDS WITH YOU! -
.title() 用于每个单词首字母大写
msg = 'dear my friend i miss you very much' print(msg.title()) # Dear My Friend I Miss You Very Much
-
列表内置方法
-
类型转换
列表的类型转换只能转换支持 for 循环的数据类型,字符串,列表,字典,元组,集合等,不能转换整型、浮点型和布尔型。
print(list('jason')) # ['j', 'a', 's', 'o', 'n'] print(list({'name': 'jason', 'pwd': 123})) # ['name', 'pwd'] print(list((11,22,33,44,55))) # [11, 22, 33, 44, 55] print(list({1, 2, 3, 4, 5})) # [1, 2, 3, 4, 5] -
常见操作
-
索引取值
name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry'] print(name_list[0]) # jason print(name_list[-1]) # jerry -
切片
[开始:结束:方向]
name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry'] print(name_list[1:4]) # ['kevin', 'tony', 'tom'] print(name_list[-4:-1]) # ['kevin', 'tony', 'tom'] print(name_list[-1:-4:-1]) # ['jerry', 'tom', 'tony'] -
间隔
print(name_list[0:4:1]) # ['jason', 'kevin', 'tony', 'tom'] print(name_list[0:4:2]) # ['jason', 'tony'] print(name_list[-1:-4:-1]) # ['jerry', 'tom', 'tony'] -
统计列表中元素的个数
name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry'] print(len(name_list)) # 5 -
成员运算
与字符串不一样,只能判断元素,并不能判断元素中的单个字符。
name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry'] print('j' in name_list) # False print('jason' in name_list) # True -
列表添加元素的方式
-
尾部追加单个元素
.append() 方法只能追加单个元素。
name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry'] name_list.append('小李') print(name_list) # ['jason', 'kevin', 'tony', 'tom', 'jerry', '小李'] name_list.append([11, 22, 33, 44]) print(name_list) # ['jason', 'kevin', 'tony', 'tom', 'jerry', '小李', [11, 22, 33, 44]]当追加的元素是列表时,也作为单个元素追加上去!!
-
指定位置插入单个元素
name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry'] name_list.insert(0, 123) name_list.insert(2, '可不可以插个队') name_list.insert(1, [11, 22, 33]) print(name_list) # [123, [11, 22, 33], 'jason', '可不可以插个队', 'kevin', 'tony', 'tom', 'jerry'].insert() 方法也只能追加单个元素。
-
合并列表
.extend() 方法相当于 for 循环 + .append() ,加号也可以达到相同的效果但是效率非常低。
name_list1 = ['jason', 'kevin', 'tony', 'tom', 'jerry'] name_list1.extend([11, 22, 33, 44, 55]) print(name_list1) name_list2 = ['jason', 'kevin', 'tony', 'tom', 'jerry'] for i in [11, 22, 33, 44, 55]: name_list2.append(i) print(name_list2) name_list3 = ['jason', 'kevin', 'tony', 'tom', 'jerry'] name_list3 += [11, 22, 33, 44, 55] print(name_list3) ''' ['jason', 'kevin', 'tony', 'tom', 'jerry', 11, 22, 33, 44, 55] ['jason', 'kevin', 'tony', 'tom', 'jerry', 11, 22, 33, 44, 55] ['jason', 'kevin', 'tony', 'tom', 'jerry', 11, 22, 33, 44, 55] '''
-
-
删除元素
-
通用的删除方式
name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry'] del name_list[0] print(name_list) # ['kevin', 'tony', 'tom', 'jerry'] -
指定删除
使用 .remove() 来删除直接指定元素
name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry'] print(name_list.remove('jerry')) #None print(name_list) # ['jason', 'kevin', 'tony', 'tom'] -
延迟删除
将需要删除的元素暂存,默认删除最后一位,也可以指定。
name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry'] print(name_list.pop()) # jerry print(name_list) # ['jason', 'kevin', 'tony', 'tom'] print(name_list.pop(2)) # tony print(name_list) # ['jason', 'kevin', 'tom']
-
-
修改列表元素
id() 函数返回指定对象的唯一 id。
Python 中的所有对象都有其自己的唯一 id。
id 在创建时已分配给对象。
id 是对象的内存地址,并且在每次运行程序时都不同。(除了某些具有恒定唯一 id 的对象,比如 -5 到 256 之间的整数)
name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry'] print(id(name_list[0])) # 1712881054472 name_list[0] = 'jasonDSB' print(id(name_list[0])) # 1712881903024 -
排序
.sort() 可以对列表进行排序,默认进行升序,也可以修改为降序。
ss = [44, 77, 99, 11, 22, 33, 88, 66] ss.sort() # 升序 print(ss) # [11, 22, 33, 44, 66, 77, 88, 99] ss.sort(reverse=True) # 降序 print(ss) # [99, 88, 77, 66, 44, 33, 22, 11] -
翻转
.reverse() 可以使列表中的元素前后顺序进行调换。
ss = [44, 77, 99, 11, 22, 33, 88, 66] ss.reverse() # 前后颠倒 print(ss) # [66, 88, 33, 22, 11, 99, 77, 44] -
比较运算
列表在做比较的时候,其实比的是对应索引位置上的元素的内码,且当前面的元素相比分出高下时就不会再对比后面的元素了,但如果前面的元素都一样,那就是元素多的列表比较大。
s1 = [11, 0, 0] s2 = [1, 2, 3, 4, 5, 6, 7, 8] print(s1 > s2) # True s1 = ['A', 'B', 'C'] s2 = ['A'] print(s1 > s2) # True -
统计列表中某个元素出现的次数
l1 = [11, 22, 33, 44, 33, 22, 11, 22, 11, 22, 33, 22, 33, 44, 55, 44, 33] print(l1.count(11)) # 3 -
清空列表
l1 = [11, 123] l1.clear() print(l1) # []
-
拓展:可变类型与不可变类型
Python的每一个对象都分为可变类型和不可变类型,主要的核心类型中数字类型、字符串类型、元组是不可变的,列表、字典是可变的。
对不可变类型重新赋值相当于重新创建了一个不可变类型的对象,将原来的变量重新指向新创建的对象,如果没有其他变量引用原有对象的话,原有对象就会被回收。
比如 i += 1 ,实际上 i += 1 并不是真的在原有的int对象上 +1,而是重新创建一个 value 为 6 的 int 对象,i 引用自这个新的对象。
就内存代码来看,可变类型的值如果改变了,内存代码是不变的,因为修改的是它本身。但是不可变类型的值如果改变了,那它的内存地址肯定改变了,因为创建了一个新的对象来储存改变了的值。
队列与堆栈
队列属于先进先出,如排队
堆栈属于先进后出,如堆叠事物
总结
今天的知识繁多复杂,不好记忆,需要多加练习。开始有了一些比较虚的概念类知识。
作业
1.将登录功能编写成多用户模式
2.利用列表编写一个用户注册、登录程序
提示:循环
要求:成功一次即可 无需考虑用户冲突等情况
3.不使用count统计列表中指定元素出现的次数
chances = 1
is_l_again = False
is_run = True
# data = 'jason|123'
data = {'jason': '123', 'mark': '222'}
# username, password = data.split('|')
while is_run:
l_or_r = input('登录/注册?请输入L/R')
if l_or_r == 'l' or l_or_r == 'L':
while chances <= 3:
in_username = input('username:').strip()
in_password = input('password:').strip()
if in_username in data and in_password == data[in_username]:
print('登录成功,欢迎你,%s' % in_username)
while True:
cmd = input('>>>')
if cmd == 'quit':
print("再见,%s" % in_username)
is_run = False
break
else:
print(cmd)
break
else:
print('用户名或密码错误,剩余尝试次数为 %d 次' % (3 - chances))
if chances == 3:
while True:
again = input('是否再次尝试 y/n')
if again == 'y' or again == 'Y':
is_l_again = True
break
elif again == 'n' or again == 'N':
break
else:
print("请输入y/n")
continue
chances += 1
if is_l_again:
chances = 1
is_l_again = False
elif l_or_r == 'r' or l_or_r == 'R':
while True:
in_username = input('username:').strip()
if in_username in data:
print('用户名已存在,请重新输入,如已注册,想返回登录界面在 username 处输入:back')
continue
elif in_username == 'back':
break
in_password1 = input('password:').strip()
in_password2 = input('password again:').strip()
if in_password1 != in_password2:
print('两次输入的密码不一致,请重新输入')
continue
else:
print('注册成功,请返回登陆界面登录')
data[in_username] = in_password1
break