数据类型内置方法、可变类型和不可变类型

今日内容概要

  • 作业讲解
  • 数据类型内置方法理论
  • 整型相关操作
  • 浮点型相关操作
  • 字符串相关操作
  • 列表相关操作
  • 可变类型与不可变类型

今日内容详细

作业讲解

1.计算1-100所有的数之和
s = 0
for i in range(101):
  s+=i
 print(s)
2.判断列表中数字2出现的次数  
    l1 = [11,2,3,2,2,1,2,1,2,3,2,3,2,3,4,3,2,3,2,2,2,2,3,2]
  c=0
  for i in l1:
    if i==2:
      c += 1
  print(c)
3.编写代码自动生成所有页网址(注意总共多少页)
	 https://movie.douban.com/top250?start=0&filter=
	 https://movie.douban.com/top250?start=25&filter=
  	 https://movie.douban.com/top250?start=50&filter=

base_url = "https://movie.douban.com/top250?start=%s&filter="
for i in range(0,250,25):
  print(base_url % i)
        
4.编写代码打印出下列图形(ps:for循环嵌套)  
*****  
*****  
*****  
*****

for i in range(4):
  for j in range(5):
    print("*",end="")
  print()

  

数据类型内置方法理论

我们之前所学习的每一种数据类型本身都含有一系列的操作方法,内置方法是其中最多的(自带的功能)

在python中数据类型调用内置方法的统一句式为>>>:句点符
	'jason'.字符串内置方法
 	绑定字符串的变量名.字符串内置方法
  	str.字符串内置方法
ps:数据类型的内置方法比较的多 我们如果想要掌握 不要光靠死记硬背 更多时候靠的是熟能生巧

整型内置方法与操作

1.类型转换(将其他数据类型转换成整型)
	int(其他数据类型)
 	ps:浮点型可以直接转 字符串必须满足内部是纯数字才可以
        
2.进制数转换
	十进制转其他进制
    	  print(bin(100))  # 0b1100100
        print(oct(100))  # 0o144
        print(hex(100))  # 0x64
 	'''
 	数字的开头如果是0b则为二进制 0o则为八进制 0x则为十六进制
 	'''
	其他进制转十进制
    	  print(int(0b1100100))
        print(int(0o144))
        print(int(0x64))
     	
        print(int("0b1100100", 2))
        print(int("0o144", 8))
        print(int("0x64", 16))
        
3.python自身对数字的敏感度较低(精确度低)
	python这门语言其实真的一点都不厉害 主要是因为它背后有太多大佬
 	如果需要进准的计算需要借助于模块numpy.....

浮点型相关操作

1、类型转换
float(其他数据类型)
1.类型转换
	float(其他数据类型)
 	字符串里面可以允许出现一个小数点 其他都必须是纯数字

字符串相关操作

1.类型转换
	str(其他数据类型)
	ps:可以转任意数据类型(只需要在前后加引号即可)
2.必须要掌握的方法
	# 1.索引取值(起始位置0开始 超出范围直接报错)
    # print(s1[0])  # h
    # print(s1[-1])  # d  支持负数 从末尾开始
    # 2.切片操作
    # print(s1[1:5])  # 顾头不顾尾 从索引1一直切取到索引4
    # print(s1[-1:-5])  # 默认的顺序是从左往右
    # print(s1[-5:-1])  # 默认的顺序是从左往右
    # 3.修改切片方向(间隔)
    # print(s1[1:5:1])  # 默认是1
    # print(s1[1:5:2])  # 默认是1
    # print(s1[-1:-5:-1])
    # print(s1[:])  # 不写数字就默认都要
    # print(s1[2:])  # 从索引2开始往后都要
    # print(s1[:5])  # 从索引0开始往后要到4
    # print(s1[::2])
    # 4.统计字符串中字符的个数
    # print(len(s1))  # 10
    # 5.移除字符串首尾指定的字符
    # username = input('username>>>:').strip()
    # username = username.strip()
    # if username == 'jason':
    #     print('登录成功')
    # res = '  jason  '
    # print(len(res))
    # print(len(res.strip()))  # 括号内不写 默认移除首尾的空格
    # res1 = '$$jason$$'
    # print(res1.strip('$'))  # jason
    # print(res1.lstrip('$'))  # jason$$
    # print(res1.rstrip('$'))  # $$jason
    # 6.切割字符串中指定的字符
    # res = 'jason|123|read'
    # print(res.split('|'))  # ['jason', '123', 'read']  该方法的处理结果是一个列表
    # name, pwd, hobby = res.split('|')
    # print(res.split('|', maxsplit=1))  # ['jason', '123|read']  从左往右切指定个数
    # print(res.rsplit('|',maxsplit=1))  # ['jason|123', 'read']  从右往左切指定个数
    # 7.字符串格式化输出
    # format玩法1:等价于占位符
    # res = 'my name is {} my age is {}'.format('jason', 123)
    # print(res)
    # format玩法2:索引取值并支持反复使用
    # res = 'my name is {0} my age is {1} {0} {0} {1}'.format('jason', 123)
    # print(res)
    # format玩法3:占位符见名知意
    # res = 'my name is {name1} my age is {age1} {name1} {age1} {name1} '.format(name1='jason', age1=123)
    # print(res)
    # format玩法4:推荐使用(******)
    name = input('username>>>:')
    age = input('age>>>:')
    res = f'my name is {name} my age is {age}'
    print(res)
3.字符串需要了解的方法
	 # 1.大小写相关
    # res = 'hElLO WorlD 666'
    # print(res.upper())  # HELLO WORLD 666
    # print(res.lower())  # hello world 666
    '''图片验证码:生成没有大小写统一的验证码 展示给用户看
    获取用户输入的验证码 将用户输入的验证码和当初产生的验证码统一转大写或者小写再比对
    '''
    # code = '8Ja6Cc'
    # print('展示给用户看的图片验证码', code)
    # confirm_code = input('请输入验证码').strip()
    # if confirm_code.upper() == code.upper():
    #     print('验证码正确')
    # res = 'hello world'
    # print(res.isupper())  # 判断字符串是否是纯大写  False
    # print(res.islower())  # 判断字符串是否是纯小写  True
    # 2.判断字符串中是否是纯数字
    # res = ''
    # print(res.isdigit())
    # guess_age = input('guess_age>>>:').strip()
    # if guess_age.isdigit():
    #     guess_age = int(guess_age)
    # else:
    #     print('年龄都不知道怎么输吗???')
    # 3.替换字符串中指定的内容
    # res = 'my name is jason jason jason jason jason'
    # print(res.replace('jason', 'tonySB'))  # my name is tonySB tonySB tonySB tonySB tonySB
    # print(res.replace('jason', 'tonySB', 1))  # my name is tonySB jason jason jason jason  从左往右替换指定个数内容
    # 4.字符串的拼接
    # ss1 = 'hello'
    # ss2 = 'world'
    # print(ss1 + '$$$' + ss2)
    # print(ss1 * 10)
    # print('|'.join(['jason', '123', 'read', 'JDB']))
    # print('|'.join(['jason', 123]))  # 参与拼接的数据值必须都是字符串
    # 5.统计指定字符出现的次数
    # res = 'hello world'
    # print(res.count('l'))
    # 6.判断字符串的开头或者结尾
    # res = 'jason say hello'
    # print(res.startswith('jason'))
    # print(res.startswith('j'))
    # print(res.startswith('jas'))
    # print(res.startswith('a'))
    # print(res.startswith('son'))
    # print(res.startswith('say'))
    # print(res.endswith('o'))
    # print(res.endswith('llo'))
    # print(res.endswith('hello'))
    # 7.其他方法补充
    res = 'helLO wORld hELlo worLD'
    # print(res.title())  # Hello World Hello World
    # print(res.capitalize())  # Hello world hello world
    # print(res.swapcase())  # HELlo WorLD HelLO WORld
    # print(res.index('O'))
    # print(res.find('O'))
    # print(res.index('c'))  # 找不到直接报错
    # print(res.find('c'))  # 找不到默认返回-1
    # print(res.find('LO'))  # 3

列表相关操作

1.类型转换
	list(其他数据类型)
	ps:能够被for循环的数据类型都可以转成列表
 	print(list('hello'))
    print(list({'name': 'jason', 'pwd': 123}))
    print(list((1, 2, 3, 4)))
    print(list({1, 2, 3, 4, 5}))
    
2.需要掌握的方法
	11 = [111, 222, 333, 444, 555, 666, 777, 888]
    # 1.索引取值(正负数)
    # print(l1[0])
    # print(l1[-1])
    # 2.切片操作    与字符串讲解操作一致
    # print(l1[0:5])
    # print(l1[:])
    # 3.间隔数 方向  与字符串讲解操作一致
    # print(l1[::-1])
    # 4.统计列表中数据值的个数
    # print(len(l1))  # 8
    # 5.数据值修改
    # l1[0] = 123
    # print(l1)
    # 6.列表添加数据值
    # 方式1:尾部追加数据值
    # l1.append('干饭')
    # print(l1)  # [111, 222, 333, 444, 555, 666, 777, 888, '干饭']
    # l1.append(['jason', 'kevin', 'jerry'])
    # print(l1)  # [111, 222, 333, 444, 555, 666, 777, 888, ['jason', 'kevin', 'jerry']]
    # 方式2:任意位置插入数据值
    # l1.insert(0, 'jason')
    # print(l1)
    # l1.insert(1, [11, 22, 33, 44])
    # print(l1)  # [111, [11, 22, 33, 44], 222, 333, 444, 555, 666, 777, 888]
    # 方式3:扩展列表 合并列表
    # ll1 = [11, 22, 33]
    # ll2 = [44, 55, 66]
    # print(ll1 + ll2)  # [11, 22, 33, 44, 55, 66]
    # ll1.extend(ll2)  # for循环+append
    # print(ll1)  # [11, 22, 33, 44, 55, 66]
    # for i in ll2:
    #     ll1.append(i)
    # print(ll1)
    # 7.删除列表数据
    # 方式1:通用的删除关键字del
    # del l1[0]
    # print(l1)
    # 方式2:remove
    # l1.remove(444)  # 括号内填写数据值
    # print(l1)
    # 方式3:pop
    # l1.pop(3)  # 括号内填写索引值
    # print(l1)
    # l1.pop()  # 默认尾部弹出数据值
    # print(l1)
    # res = l1.pop(3)
    # print(res)  # 444
    # res1 = l1.remove(444)
    # print(res1)  # None
    # 8.排序
    # ss = [54, 99, 55, 76, 12, 43, 76, 88, 99, 100, 33]
    # ss.sort()  # 默认是升序
    # print(ss)
    # ss.sort(reverse=True)
    # print(ss)  # 改为降序
    # 9.统计列表中某个数据值出现的次数
    # print(l1.count(111))
    # 10.颠倒列表顺序
    # l1.reverse()
    # print(l1)

可变类型与不可变类型

# s1 = '$$jason$$'
# l1 = [11, 22, 33]
# s1.strip('$')
# print(s1)  # $$jason$$
'''字符串在调用内置方法之后并不会修改自己 而是产生了一个新的结果
如何查看调用方法之后有没有新的结果 可以在调用该方法的代码左侧添加变量名和赋值符号
    res = s1.strip('$')
'''
# ret = l1.append(44)
# print(l1)  # [11, 22, 33, 44]
# print(ret)  # None
'''列表在调用内置方法之后修改的就是自身 并没有产生一个新的结果'''

# 可变类型:值改变 内存地址不变
# l1 = [11, 22, 33]
# print(l1)
# print(id(l1))
# l1.append(44)
# print(l1)
# print(id(l1))

# 不可变类型:值改变 内存地址肯定变
res = '$$hello world$$'
print(res)
print(id(res))
res.strip('$')
print(res)
print(id(res))

作业

# 1.整理今日内容及博客
# 	每个内置方法一定要自己动手写案例 查看效果
# 2.基于字符串充当数据库完成用户登录(基础练习)
#    data_source = 'jason|123'  # 一个用户数据
#    获取用户用户名和密码 将上述数据拆分校验用户信息是否正确

# data_source = "jason|123"
# name = input("username:")
# pwd = input("password:")
# username, password = data_source.split("|")
# if name == username and pwd == password:
#     print("welcome! ")
# else:
#     print("Please try again!")

# 3.基于列表充当数据库完成用户登录(拔高练习)  # 多个用户数据
#    data_source = ['jason|123', 'kevin|321','oscar|222']

# data_source = ["jason|123", "kevin|123", "oscar|222"]
# name = input("username:")
# pwd = input("password:")
# flag = False  # 默认登陆失败状态
# for i in data_source:
#     username, password = i.split("|")
#     if name == username and pwd == password:
#         flag = True
#         break
# if flag:
#     print("welcome!")
# else:
#     print("Please try again!")

# 4.利用列表编写一个员工姓名管理系统
#     输入1执行添加用户名功能
#     输入2执行查看所有用户名功能
#     输入3执行删除指定用户名功能
#     '''分析 用户输入的不同 可以执行不同的代码'''
#     ps: 思考如何让程序循环起来并且可以根据不同指令执行不同操作
#     提示: 循环结构 + 分支结构
#
#     拔高: 是否可以换成字典或者数据的嵌套使用完成更加完善的员工管理而不是简简单单的一个用户名(能写就写不会没有关系)

employee_list = [{"name":"wuyong","password":"123"},]
while True :
    command=input("""
        1、输入1为添加员工
        2、输入2为查看所有员工
        3、输入3删除指定员工
    """)
    command=int(command)
    if command==1:
        name=input("new employee's name")
        pwd =input("new employee's pwd")
        user_message = {}
        user_message["name"]=name
        user_message["password"]=pwd
        employee_list.append(user_message)
        print("添加员工完成!")
    if command==2:
        print("all employee's messages here:",employee_list)
        print("查看员工完成!")
    if command==3:
        delete_name=input("please input delete name of employee here:")
        for i in employee_list:
            if delete_name==i['name']:
                index_name=employee_list.index(i)
                employee_list.pop(index_name)
                print("删除员工完成!")
posted @ 2022-09-29 19:48  虾仁猪心排骨汤  阅读(58)  评论(0编辑  收藏  举报