今日内容概要
-
作业讲解
-
数据类型的内置方法
整型与浮点型 字符串 列表 -
可变类型与不可变类型
今日内容详细
作业讲解
"""
1.猜年龄的游戏
1.必写
错误的情况下只能猜三次
正确的情况下直接推出游戏
2.拔高
三次错误之后提示用户三次机会已用完
问他是否继续 如果继续则再给三次机会
如果不继续则直接退出
"""
age = 18
# 定义一个记录用户次数的变量
count = 0
# 猜年龄
while True:
# 先判断用户当前是第几次尝试 如果已经三次 提示用户
if count == 3:
print('你已经尝试三次了')
choice = input('您已经尝试三次了 是否还想继续(y/n)>>>:')
# 判断用户是想继续还是放弃
if choice == 'y':
count = 0 # 将用户尝试的次数清零
else:
print('欢迎下次再来哟!!!')
break
guess_age = input('请输入您的年龄>>>:')
# 将字符串的数字转为整型的数字
guess_age = int(guess_age) # 暂且忽略
if guess_age > age:
print('猜大了')
count += 1 # 加一次
elif guess_age < age:
print('猜小了')
count += 1 # 加一次
else:
print('你真棒!!!')
break
数据类型的内置方法
整型与浮点型
整型
-
用途
年龄、生日等整数类型 -
定义
age = 18 # 本质age = int(18) -
类型转换
# 1.int可以将由纯整数构成的字符串直接转换成整型,若包含其他任意非整数符号,则会报错 int() 将括号内的数据转成整型 print(int(123)) print(int('123')) print(int('[1,2,3,4]')) print(int('hello world')) print(int('11.11')) # 待转换的数据内部只能是纯数字 # 2.进制转换 print(bin(100)) # 将十进制的100转换成二进制对应的数 0b1100100 print(oct(100)) # 将十进制的100转换成八进制对应的数 0o144 print(hex(100)) # 将十进制的100转换成十六进制对应的数 0x64 """ 0b开头表示二进制数 0o开头表示八进制数 0x开头表示十六进制数 """ print(int('0b1100100',2)) # 100 print(int('0o144',8)) # 100 print(int('0x64',16)) # 100
浮点型
-
用途
身高、体重、薪资... -
定义
height = 183.1 # 本质height = float(183.1) -
类型转换
print(float(183.1)) print(float('183.1')) # print(float('hello world')) print(float(183)) # 183.0 print(int(11.11)) # 11 print(int('11.11')) # 错误演示:字符串内包含了非整数符号
字符串类型
-
作用
名字,性别,国籍,地址等描述信息 -
定义
# 在单引号\双引号\三引号内,由一串字符组成 name = 'hello world!' # 本质name = str('hello world!') -
类型转换
# 数据类型转换:str()可以将任意数据类型转换成字符串类型 name1 = 'jason' # str('jason') print(type(str(18))) # int->str print(type(str(11.11))) # float->str print(type(str('hello'))) print(type(str([1,2,3,4]))) # list->str print(type(str({'name':'jason'}))) # dict->str print(type(str(True))) # bool->str -
优先掌握的操作
name = 'hello world!' # 1、按索引取值(正向取+反向取) :只能取 '''索引是从0开始的''' print(name[0]) print(name[-1]) # -1表示最有一个元素 print(name[8]) print(name[-4]) # 正数表示从左往右 负数从右往左 # 2、切片(顾头不顾尾,步长) '''截取某一段内容''' print(name[1:4]) # 1 2 3 顾头不顾尾,取出索引为1到3的所有字符 print(name[-1:-5:-1]) # 默认的切片方向都是从左往右,-1修改成从右往左 !dlr print(name[1:4:2]) # 第三个参数表示步长,会从1开始,每次累加一个2即可,所以会取出索引1、3的字符 el # 3、长度len '''统计字符串里面的字符个数''' print(len(name)) # 12 空格也算字符 # 4、成员运算in和not in print('hello' in name) # in:判断hello是否在name里面 print('jason' not in name) # not in:判断jason是否不在name里面 # 5、移除指定的首尾字符strip(******)(默认移除空格、\n、\t) username = input('username>>>:') # 'jason ' # 将首尾空格移除 username = username.strip() # 两步合并成一步,用一个例子举例 username = input('username>>>:').strip() if username == 'jason': print('登录成功') else: print('登录失败') username1 = '$$j$s$o$n$$' username2 = ' jason ' print(username1.strip('$')) # 移除指定首、尾的所有字符 print(username2.strip()) # 默认移除首、尾的所有空格 # 另外两种方法 n1 = '$$jason$$' # 移除首指定的字符 print(n1.lstrip('$')) # jason$$ 只移除left # 移除尾指定的字符 print(n1.rstrip('$')) # $$jason 只移除right # 6、切分split(******) # 括号内不指定字符,默认以空格作为切分符号 res = 'jason 123 read' print(res.split()) # ['jason', '123', 'read'] '''按照指定割字符串''' res = 'jason|123|read' print(res.split('|')) # ['jason', '123', 'read'] # 1.指定切割的字符不保留 # 2.切割之后的结构是一个列表(重要) #另外的切分方法 res.split('|', maxsplit=1) # ['jason', '123|read'] 从左往右切割指定的次数 print(res) print(res.rsplit('|',maxsplit=1)) # ['jason|123', 'read'] 从右往左切割指定的次数 # 7、循环 for i in name: print(i) # 依次获取字符串中单个单个的字符 -
需要掌握的操作
# 1.lower(),upper() res = 'My NAmE Is JASon 666' # 将所有的英文字母转成大写 print(res.upper()) # MY NAME IS JASON 666 # 将所有的英文字母转成小写 print(res.lower()) # my name is jason 666 """图片验证码校验 忽略大小写""" code = 'NaRTs6' my_code = input('code>>>:') if code.upper() == my_code.upper(): print('验证码正确') print(res.isupper()) # False 字符串内部所有的英文字母是否是全大写 print(res.islower()) # False 字符串内部所有的英文字母是否是全小写 # 2.startswith,endswith res = 'jason egon kevin tony' # 判断字符串是否以jason开头 print(res.startswith('jason')) # True # 判断字符串是否以tony结尾 print(res.endswith('tony')) # True # 3.字符串格式化输出format # 之前我们使用%s来做字符串的格式化输出操作,在传值时,必须严格按照位置与%s一一对应,而字符串的内置方法format则提供了一种不依赖位置的传值方式 # 第一种 类似于%s的用法,传入的值会按照位置与{}一一对应 res = 'my name is {} my age is {}' print(res.format('jason',18)) # 第二种 把format传入的多个值当作一个列表,按照索引取值,可以反复使用 res = 'my name is {0} my age is {1} {0} {0} {0}' print(res.format('jason',18)) # 第三种 format括号内在传参数时完全可以打乱顺序,但仍然能指名道姓取值,可以反复使用 res = 'my name is {name} my age is {age} {name} {name} {name}' print(res.format(name='jason',age=18)) # 4.count:统计字符串在大字符串中出现的次数 res = 'jason a a a a sdf se sdf we ras dsa dw e asdsa dwqd sadsa dsadas' # 统计字符串中 指定字符出现的个数 print(res.count('a')) # 13 print(res.count('a', 1, 10)) # 3 指定1-9范围统计a的次数 # 5.captalize,swapcase,title res = 'my name is jason HAJHSSAJJ SAJS ' print(res.title()) # 将所有英文单词首字母大写 print(res.capitalize()) # 首字母大写 后面统一变小写 print(res.swapcase()) # 大小写翻转 # 6.isdigit # 判断是否是纯数字 guess_age = input('请输入您的年龄>>>:') # 判断用户输入的是否是纯数字 if guess_age.isdigit(): # 将字符串的数字转为整型的数字 guess_age = int(guess_age) # 暂且忽略 else: print('请输入纯数字') # 7.replace:替换 res = 'my name is egon egon egon' # 将字符串中所有的egon替换成SB print(res.replace('egon','SB')) # 全局替换,语法:replace('旧内容', '新内容') print(res.replace('egon','SB',1)) # 局部替换,指定修改的个数 # 8.join:将列表多个元素拼接成字符串 res = ['jason','egon','kevin','tony'] res1 = ['jason','egon','kevin','tony',123] print('|'.join(res)) # jason|egon|kevin|tony print('|'.join(res1)) # 只能是字符串类型拼接 -
了解的操作
# 1.is数字系列 # 在python3中 num1 = b'4' # bytes num2 = '4' # unicode,python3中无需加u就是unicode num3 = '四' # 中文数字 num4 = 'Ⅳ' # 罗马数字 # isdigt:bytes,unicode,检测字符串是否只由数字组成。 print(num1.isdigit()) # True print(num2.isdigit()) # True print(num3.isdigit()) # False print(num4.isdigit()) # False # isdecimal:uncicode(bytes类型无isdecimal方法),检测字符串是否只包含十进制数字 print(num2.isdecimal()) # True print(num3.isdecimal()) # False print(num4.isdecimal()) # False # isnumberic:unicode,中文数字,罗马数字(bytes类型无isnumberic方法),检测字符串是否只包含数字字符 print(num2.isnumeric()) # True print(num3.isnumeric()) # True print(num4.isnumeric()) # True # 三者不能判断浮点数 num5 = '4.3' print(num5.isdigit()) # False print(num5.isdecimal()) # False print(num5.isnumeric()) # False ''' 总结: 最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景 如果要判断中文数字或罗马数字,则需要用到isnumeric。 ''' #is其他 res = 'sdewqe圣诞节卡萨123' print(res.isalpha()) # 判断非数字、特殊符号,字符串中只包含字母 False print(res.isalnum()) # 字符串中既可以包含数字也可以包含字母 True print(res.isalpha()) # 字符串中只包含字母 False ''' 如果字符串仅包含字母数字字母(a-z)和(0-9)或下划线(_),则该字符串被视为有效标识符。 有效的标识符不能以数字开头或包含任何空格。 ''' print(res.isidentifier()) # 检查字符串是否是有效标识符 True print(res.islower()) # 字符串是否是纯小写 True print(res .isupper()) # 字符串是否是纯大写 False print(res.isspace()) # 字符串是否全是空格 False print(res.istitle()) # 字符串中的单词首字母是否都是大写 False # 2.find,rfind,index,rindex # 2.1 find:从指定范围内查找子字符串的起始索引,找得到则返回数字1,找不到则返回-1 msg='tony say hello' print(msg.find('o',1,3)) # 在索引为1和2(顾头不顾尾)的字符中查找字符o的索引 1 # 2.2 index:同find,但在找不到时会报错 print(msg.index('e',2,4)) # 报错ValueError # 2.3 rfind与rindex:略 # 3.center,ljust,rjust,zfill name='tony' print(name.center(30,'-')) # 总宽度为30,字符串居中显示,不够用-填充 # -------------tony------------- print(name.ljust(30,'*')) # 总宽度为30,字符串左对齐显示,不够用*填充 # tony************************** print(name.rjust(30,'*')) # 总宽度为30,字符串右对齐显示,不够用*填充 # **************************tony print(name.zfill(50)) # 总宽度为50,字符串右对齐显示,不够用0填充 # 0000000000000000000000000000000000000000000000tony # 4.expandtabs:把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8。 name = 'tony\thello' # \t表示制表符(tab键) print(name) # tony hello print(name.expandtabs(1)) # 修改\t制表符代表的空格数 # tony hello
列表
-
定义
# 定义:在[]内,用逗号分隔开多个任意数据类型的值 # 中括号括起来 内存可以存放多个元素 # 元素与元素之间逗号隔开 元素可以是任意数据类型 l1 = [1,'a',[1,2]] # 本质:l1 = list([1,'a',[1,2]]) -
类型转换
name_list = ['jason', 'egon', 'tony'] # name_list = list(['jason', 'egon', 'tony']) print(type(list(18))) # 不能 print(type(list(11.11))) # 不能 print(type(list('hello')),list('hello')) # 可以 ['h', 'e', 'l', 'l', 'o'] print(type(list([1,2,3,4]))) print(type(list({'name':'jason'})),list({'name':'jason'})) # 可以 ['name'] print(type(list(True))) # 不能 '''能够支持for循环的数据 都能够被list转换成列表''' -
优先掌握的操作
name_list = ['jason', 'egon', 'tony'] # 1.索引取值(正向存取+反向存取):即可存也可以取 print(name_list[0]) # jason print(name_list[-1]) # tony # 列表元素的CURD(增删改查),按照索引修改指定位置的值 name_list[1] = 'egon快回来!' print(name_list) # ['jason', 'egon快回来!', 'tony'] # 2.切片操作(顾头不顾尾,步长) # 2.1 顾头不顾尾:取出索引为0到1的元素 print(name_list[0:2]) # ['jason', 'egon'] # 2.2 步长:0:2:2,第三个参数2代表步长,会从0开始,每次累加一个2即可,所以会取出索引0的元素 print(name_list[0:2:2]) # ['jason'] print(name_list[-1:-3:-1]) # ['tony', 'egon'] # 3.长度:统计列表中元素的个数 print(len(name_list)) # 3 # 4.添加 # 4.1 append()列表尾部追加元素 name_list.append('kevin') print(name_list) # ['jason', 'egon', 'tony', 'kevin'] name_list.append([11,22,33,44]) print(name_list) # ['jason', 'egon', 'tony', [11, 22, 33, 44]] # 4.2 extend()一次性在列表尾部添加多个元素 # 扩展列表 l1 = [11,22,33,44,55,66,77] # for i in l1: # name_list.append(i) # print(name_list) name_list.extend(l1) # extend等价于for+append print(name_list) # ['jason', 'egon', 'tony', 11, 22, 33, 44, 55, 66, 77] # 4.3 insert()在指定位置插入元素 name_list.insert(0,'jack') # 0表示按索引位置插值 print(name_list) # ['jack', 'jason', 'egon', 'tony'] # 5.删除 # 5.1 del:通用的删除操作 del name_list[1] print(name_list) # ['jason', 'tony'] # 5.2 remove()括号内指名道姓表示要删除哪个元素,没有返回值 res1 = name_list.remove('tony') # 指名道姓的删除 print(name_list) # ['jason', 'egon'] print(res1) # None # 5.3 pop()默认删除列表最后一个元素,并将删除的值返回,括号内可以通过加索引值来指定删除元素 res = name_list.pop() # 默认尾部弹出元素 print(name_list) # ['jason', 'egon'] print(res) # tony res = name_list.pop(1) # 默认指定索引位置的元素 print(name_list) # ['jason', 'tony'] print(res) # egon # 6.count计数 l1 = [11,22,33,3,3,3,2,3,23,4,34,3,4,3,4] print(l1.count(3)) # 6 统计列表中某个元素出现的次数 # 7.clear name_list.clear() # 清空列表 print(name_list) # [] # 8.sort()给列表内所有元素排序 # 排序时列表元素之间必须是相同数据类型,不可混搭,否则报错 l2 = [11,88,22,44,33,77,66,55] l2.sort() # 排序 默认是升序 print(l2) # [11, 22, 33, 44, 55, 66, 77, 88] l2.sort(reverse=True) # reverse=True 降序 print(l2) # [88, 77, 66, 55, 44, 33, 22, 11] # 字符之间的大小取决于它们在ASCII表中的先后顺序,越往后越大 l = ['A','z','adjk','hello','hea'] l.sort() print(l) # ['A', 'adjk', 'hea', 'hello','z'] # 9.reverse()颠倒列表内元素顺序 l2.reverse() # 倒序 print(l2) # [55, 66, 77, 33, 44, 22, 88, 11]
可变与不可变
可变数据类型:值发生改变时,内存地址不变,即id不变,证明在改变原值
列表、字典是可变类型
l1 = [11,22]
print(id(l1)) # 2133952624128
l1.append(666)
print(id(l1)) # 2133952624128
不可变类型:值发生改变时,内存地址也发生改变,即id也变,证明是没有在改变原值,是产生了新的值
整型、浮点型、字符串、元组是不可变类型
a = 1
print(id(a)) # 140721548826272
a = 2
print(id(a)) # 140721548826304
浙公网安备 33010602011771号