day03数据类型(第一部分)以及字符串的操作
文章目录
1.内容回顾
(1)格式化输出
使用%
进行占位,%s
字符串,%d
数字
若输出含有%
,需要使用两个%%
进行转义
print('growth rate: %.1f%%'% 6.56)
#结果
growth rate: 6.6%
(2)编码
ascii码:只包含英文,数字以及一些特殊字符,8位(0000 0000)表示一个字节
unidoce:把所有的语言统一了起来,最开始是16位(2个字节)表示一个字符,但中文不够,后面变成了32位(4个字节),但是很占资源和空间。
utf-8:在此基础上,对Unicode进行升级和分类:
8位表示英文,最少一个字节
16位表示欧洲的文字,两个字节
24位表示亚洲的字符,三个字节
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
gbk:中国国产,只能用于中文和ascii码中的文字
2.数据类型
(1)数字(number)
整型 (int)
用于计算。
方法:bit_length()
转换成二进制最少的位数
i = 3
print(i.bit_length())
#结果
3
布尔(bool)
用于判断 False or True
(2)字符串(string)
(3)列表(list)
储存大量数据[]
,里面能进行嵌套。
[1,2,3,'哥','12353234',[1,2,3]]
(4)元组(tuple)
只读列表,不能修改()
(5)字典(dict)
{'name':'ric', 'age':'18'}
,{'ric':[], 'tom':[]}
键:值 key:value
储存关系型的数据
(6)集合(set)
3.str ,int, bool相互转换
(1)int ---> str
第一,加引号;第二,进行str()操作,如
i = 1
s = str(i)
print(s, type(s))
(2)str ---> int
必须全部是数字!
(3)int ---> bool
只有 True 和 False 两种结果。只要是非0,就是True;0就是False
c = 0
d = 1
print(bool(c), bool(d), type(c), type(d))
(4)bool ---> int
只有0和1两种。True -1 False-0
e = True
f = False
print(int(e), int(f))
(5)str ---> bool
空字符串—False; 非空字符串—True
g = ''
h = 'faf哈哈'
print(bool(g), bool(h))
#结果
False True
4.字符串的一些操作方法
(1)索引
正数:默认从0开始;负数:最后一个为-1,往左编号。超范围报错
s = 'ABCDEFGHIJKL'
s1 = s[0]
print(s1)
s2 = s[-1]
print(s2)
#结果
A
L
(2)切片
顾头不顾尾 超范围不会报错,但最好别随意超范围
s = 'ABCDEFGHIJKL'
#如何取出‘ABCD’?
s3 = s[0:4]
print(s3)
#全部取出?
# 第一,直接冒号
# 第二,从0开始,冒号,最后一个不写
s4 = s[:]
s5 = s[0:]
print(s4, s5)
# 跳着取? 加入步长[首:尾:步长]
# 如何取出 ACEGIK? 隔一个取 步长为2
# 如何取出 ADGJ?隔两个取 步长为3
s6 = s[0:12:2]
s7 = s[0:12:3]
print(s6, s7)
# 倒着取出? 用到的是list中的步长。
# 当步长为负数的时候,可以轻松实现倒序输出
# 第一,不写首尾,只写步长
s8 = s[::-1]
print(s8)
# 第二,倒着写,才能倒着输出某个特定的一串 如LKJIHGFEDCB
s9 = s[-1:-12:-1]
print(s9)
# 下面一些情况会输出什么?默认情况是从你输入的地方开始往右索引,索引不到不会报错,为空
# 第一
s11 = s[:-12] # 什么都没有,空 刚好'A'处于'-12'的位置
print(s11)
# 第二
s12 = s[-1:] # 输出L
print(s12)
(3)首字母大写
s = 'rickSuaisir'
s1 = s.capitalize()
print(s1)
(4)全部大写 全部小写
s2 = s.upper()
s21 = s.lower()
print(s2, s21)
有什么样的用途呢?用户输入验证码的时候不区分大小写
yanzhengma = 'awTr12'
you_input = input('请输入验证码,不区分大小写').lower()
if yanzhengma.lower() == you_input:
print('输入正确,请稍后...')
else:
print('输入错误,请重新输入')
(5)大小写翻转
s3 = s.swapcase()
print(s3)
(6)每个隔开的首字母大写
用特殊符号(数字也算特殊字符)或者空格隔开的
s4 = 'love-english song*i am you6666inspire_apologize#etc'
print(s4.title())
#结果
Love-English Song*I Am You6666Inspire_Apologize\#Etc
(7)center()让文本居中
s = 'rickSuaisir'
s5 = s.center(20,'~') # 设计一个总长度,可以加入特殊字符,默认值是空格
print(s5)
(8)len()统计字符长度
每个中文也是一个字符。
s = 'rick二哈sir'
print(len(s))
#结果
9
(9)统计某个字符串以什么开头和结尾
startwith() 和 endwith() 在实际中,需要根据用户输入进行判断
s = 'rickSuaisir'
s7 = s.startswith('rick')
print(s7)
s71 = s.startswith('i', 1, 6)
'''print(s71)
if s7:
pass
elif s.startswith('oi'):
pass
'''
s72 = s.endswith('a')
print(s72)
(10)find ()通过元素找索引
find 通过元素找索引,一旦找到,返回最低索引,找不到返回-1;而index通过元素找索引,找不到报错
s = 'rickSuaisir'
s8 = s.find('s')
s81 = s.find('i', 1, 9)
print(s8,s81)
s82 = s.find('ric') # 切片的形式,即一个整体
print(s82)
s82 = s.index('A')
print(s82)
(11)strip() 默认删除前后空格
如果给定的字符不是空的,则删除给定的字符
s = ' rickSuaisir '
s9 = s.strip() #为什么删除不了?因为*在中间,而方法默认删除是的前后的
print(s9)
s = ' rickSuai*sir* % ' #为什么删除不了*?因为*在中间,而方法默认删除是的前后的
s10 = s.strip(' %*')
print(s10)
#结果
rickSuaisir
rickSuai*sir
#
s11 = s.lstrip() # 把左边的空格删除
print(s11)
s12 = s.rstrip() # 把右边的空格删除
print(s12)
(12)count()统计某个字符的次数
可以切片统计,或者两个作为整体来统计。没有就返回0
s = 'rickSuaisir'
s13 = s.count('i')
s14= s.count('ri')
print(s13,s14)
(13)split()字符串进行分割,以xx隔开
split():将字符串按照你规定的,进行分割 默认是空格
s = ' rick Suai sir'
s15 = s.split()
print(s15)
s = ' ;rick Suai sir'
s16 = s.split(';')
print(s16)
#
['rick', 'Suai', 'sir']
[' ', 'rick Suai sir']
(14)replace()
语法(old,new, 替换个数)默认是全部替换
s= '看待街坊邻居复合大师街坊法好的撒见客户'
s17 = s.replace('街坊', '龟儿子', 1)
print(s17)
(15)is系列
s = 'lirui123'
print(s.isalnum()) # 判断字符串是否由字母或数字组成
print(s.isalpha()) # 判断字符串是否只由字母组成
print(s.isdigit()) # 判断字符串是否只由数字组成
5. format的三种玩法
相当于格式化输出,更高级。
第一种
s = '我叫{}, 今年{},职业{}, 爱好{},再说一下我叫{}'.format('李睿', 24, '学生', 'girls', '李睿')
print(s)
第二种 填索引
s = '我叫{0}, 今年{1},职业{2}, 爱好{3},再说一下我叫{0}'.format('李睿', 24, '学生', 'girls')
# print(s)
第三种 键值对
s = '我叫{name}, 今年{age},职业{career}, 爱好{hobby},再说一下我叫{name}'.format(age=24, name='李睿', career='学生', hobby='girls')
# print(s)
6. for循环
for i in 可迭代对象(由多个数据组成):
7.day02 部分作业升级版本
(1)用户登陆(三次机会重试)
难度加大:既要判断用户名是否正确,又要判断密码是否正确,3次机会
此代码虽然长,但是思路逻辑比较清晰,用到了之前学到的格式化输出。
i = 3
username = 'Lric'
password = '123456'
while i > 0:
name = input('请输入你的用户名:')
i -= 1
if name == username:
pw = input('请输入你的密码')
if pw == password:
print('登陆成功,请稍后')
print('''
username:%s
password:%s
''' % (name, password))
break
else:
if i == 0:
print('次数已用完!')
print('密码错误,请重新输入')
print('你还剩'+str(i)+'次机会')
else:
if i == 0:
print('次数已用完!')
answer = input('再试试? Y or N')
if answer == 'Y':
i = 3
print('你还剩'+str(i)+'次机会')
else:
print('您的用户已经被锁定,请20分钟后再试')
(2)写代码:计算 1 - 2 + 3 … - 99 中除了88以外所有数的总和?
原本题目:…+87-88+89-90+91-92+93-94+95-96+97-98-99
升级:除了88以外,还要考虑到其前面的符号。
代码中的j = -j
这个操作,巧妙的把88之后的元素给变号了
i = 0
j = -1
sum = 0
while i <99:
i +=1
if i == 88:
continue
else:
j = -j
sum = sum + i*j
print(sum)
#结果
-50