【python】day03数据类型(第一部分)以及字符串的操作

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

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值