整型、字符串、列表相关方法

数据类型内置方法

之前我们所学习的每一种数据类型本身就含有一系列的操作方法,内置方法是其中最多的。
以字符串为例,介绍一下调用内置方法的格式:

print('jason'.upper())  # JASON

这串代码调用了字符串jason的内置方法upper(),他的作用是将字符串的小写变成大写

可以发现我们使用句点符的方式来调用方法,也就是在字符串后面点一下,然后输入方法的名称。

整型内置方法

1.类型转换(将其他数据类型转换成整型)

int(其他数据类型)
#  浮点型可以直接转 字符串必须满足内部时纯数字才可以转
num = int('1')
print(num, type(num))  # 1 <class 'int'> 
#  字符串转换成整型的1
print(int('1.1'))  # 这样转会报错
#  ValueError: invalid literal for int() with base 10: '1.1'

2.进制数转换

十进制转其他进制:
print(bin(100))  # 0b1100100
print(oct(100))  # 0o144
print(hex(100))  # 0x64 
# 数字的开头如果是0b则为二进制 0o则为八进制 0x则为十六进制

其他进制转十进制用int方法就可以了:
print(int(0b1100100))  # 100
print(int(0o144))  # 100
print(int(0x64))  # 100

可以给int传入第二个参数,指定传入的是什么进制,这样等于告诉int这个字符串是个2进制数:
print(int("0b1100100", 2))  # 100
print(int("0o144", 8))  # 100
print(int("0x64", 16))  # 100
直接传字符串,int认不出来会报错:
print(int("0b1100100"))  # ValueError: invalid literal for int() with base 10: '0b1100100'

# python对数字的敏感度很低(精确度低)
s1 = 1.1
s2 = 1
print(s1 - s2)  # 0.10000000000000009 
# python本身不厉害 他背后的大佬厉害 用这门语言开发出来一些很好用的模块

浮点型内置方法

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

obj = float('1.1')
obj2 = float('111111.1')
print(obj, type(obj))  # 1.1 <class 'float'>
print(obj2, type(obj2))  # 111111.1 <class 'float'>  

print(float('hello'))  # ValueError: could not convert string to float: 'hello'

字符串内置方法

1.类型转换

	str(其他数据类型)
	ps:可以转任意数据类型(只需要在前后加引号即可)

2.必须要掌握的方法

1.索引取值(起始位置0开始 超出范围直接报错) 
s1 = 'runoob'
print(s1[0])  # r
print(s1[10000])  # 报错 IndexError: string index out of range
print(s1[-1])  # b  支持负数 从末尾开始

image

2.切片操作
s1 = 'runoob'
print(s1[1:5])  #  unoo # 顾头不顾尾 从索引1一直切取到索引4
print(s1[-1:-5])  # 什么也取不到 # 默认的顺序是从左往右
print(s1[-1:-5] == '') # True # 返回一个空字符串
print(s1[-5:-1])  # unoo # 默认的顺序是从左往右

image

3.修改切片方向(间隔)
切片中可以传入第三个数字,传入两个数字时,这第三个数字默认为1
第三个数字有两种功能:1.间隔输出 2.改变切片的顺序
s1 = 'runoob'
print(s1[1:5:1])  # uuoo 默认是1
print(s1[1:5:2])  # uo  首先索引为1的u要输出 然后跳过n输出o 再跳过o想输出b 但是由于顾头不顾尾 所以就输出uo
print(s1[-1:-5:-1])  # boon 本来是不能切到东西的 通过加-1改变了从左到右的切片顺序 从而可以切
print(s1[:])  # runoob # 全部都要
print(s1[2:])  # noob # 从索引2开始往后都要
print(s1[:5])  # runoo # 从索引0开始往后要到4
print(s1[::2]) # rno  # 按顺序取 间隔1
4.统计字符串中字符的个数
    # print(len(s1))  # 6
5.移除字符串首尾指定的字符
首先考虑一个问题,在网站登录的时候,输入用户名可能会多输几个空格:
这种情况下,我们获取到用户的输入,就需要去除这些空格,得到正确的信息:
此时需要用到strip方法:
username = input('username>>>:').strip()
username = username.strip()
if username == 'jason':
     print('登录成功')
	 
res = '  jason  '
print(len(res)) # 9
print(len(res.strip())) # 5  # 括号内不写 默认移除首尾的空格

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) # 关键字传参 此时format内的顺序不再重要
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())  # False
'''猜年龄'''
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
# 将 jason 替换成 tonySB
print(res.replace('jason', 'tonySB', 1))  # my name is tonySB jason jason jason jason  从左往右替换指定个数内容 

4.字符串的拼接
ss1 = 'hello'
ss2 = 'world'
print(ss1 + '$$$' + ss2)  # hello$$$world
print(ss1 * 10)  # hellohellohellohellohellohellohellohellohellohello

print('|'.join(['jason', '123', 'read', 'JDB']))  # jason|123|read|JDB
print('|'.join(['jason', 123]))  # 参与拼接的数据值必须都是字符串
print('|'.join('jason'))  #  j|a|s|o|n  # 传入一个字符串也可以
# join方法支持可迭代对象

5.统计指定字符出现的次数
res = 'hello world'
print(res.count('l'))  # 3 

6.判断字符串的开头或者结尾
res = 'tifa say hello'
print(res.startswith('tifa'))  # True 
print(res.startswith('t'))  # True
print(res.startswith('tif')) # True
print(res.startswith('a')) # False
print(res.startswith('say')) # False
print(res.startswith('hello'))# False
print(res.endswith('o'))  # True
print(res.endswith('llo'))  # True
print(res.endswith('hello'))  # True

4.其他方法补充

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')) # 4
print(res.find('O')) # 4  # find方法也可以实现index相同的功能 但是index找不到会报错 find方法找不到返回-1
print(res.index('c'))  # 找不到直接报错 ValueError: substring not found
print(res.find('c'))  # 找不到默认返回-1
print(res.find('LO'))  # 3 # 实际上是返回了L的索引

列表内置方法

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])  # 111
print(l1[-1])  # 888
2.切片操作    与字符串讲解操作一致
print(l1[0:5]) # [111, 222, 333, 444, 555]
print(l1[:]) # [111, 222, 333, 444, 555, 666, 777, 888] 
3.间隔数 方向  与字符串讲解操作一致
print(l1[::-1]) #  [888, 777, 666, 555, 444, 333, 222, 111]
4.统计列表中数据值的个数
print(len(l1))  # 8
5.数据值修改
l1[0] = 123
print(l1) # [123, 222, 333, 444, 555, 666, 777, 888]

6.列表添加数据值
方式1:尾部追加数据值
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()  # [12, 33, 43, 54, 55, 76, 76, 88, 99, 99, 100] # 默认是升序
print(ss)
ss.sort(reverse=True) # [100, 99, 99, 88, 76, 76, 55, 54, 43, 33, 1]
print(ss)  # 改为降序

9.统计列表中某个数据值出现的次数
print(l1.count(111))

10.颠倒列表顺序
reverse()
print(l1)

遇到的问题

1.第一种情况 for循环报错
user_list = []
print(type(user_list.append('tifa')))  # <class 'NoneType'> 
user_list = user_list.append('tifa')  # None
print(user_list)

for i in user_list:  # user_list 属于NONE类型
        print('hello')  # TypeError: 'NoneType' object is not iterable 
		# 这里反映了for循环需要一个可迭代对象 user_list是一个None对象 所以会报错
    pass

2.第二种情况 for循环什么也不做
user_list = []
for i in user_list: # for循环 一个空列表时 for循环会什么都不做 也不保存
    print('hello')

练习描述

1.基于字符串充当数据库完成用户登录(基础练习)
   data_source = 'jason|123'  # 一个用户数据
   获取用户用户名和密码 将上述数据拆分校验用户信息是否正确
2.基于列表充当数据库完成用户登录(拔高练习)  # 多个用户数据
   data_source = ['jason|123', 'kevin|321','oscar|222']
3.利用列表编写一个员工姓名管理系统
    输入1执行添加用户名功能
    输入2执行查看所有用户名功能
    输入3执行删除指定用户名功能
    '''分析 用户输入的不同 可以执行不同的代码'''
    ps: 思考如何让程序循环起来并且可以根据不同指令执行不同操作
    提示: 循环结构 + 分支结构

4.拔高: 是否可以换成字典或者数据的嵌套使用完成更加完善的员工管理而不是简简单单的一个用户名

题解

'''1.基于字符串充当数据库完成用户登录(基础练习)
   data_source = 'jason|123'  # 一个用户数据
   获取用户用户名和密码 将上述数据拆分校验用户信息是否正确'''

# 'jason|123'  # 基于字符串充当数据库 --> 用字符串存储数据

data_source = str(input('请按照 用户名|密码 的格式输入>>').strip())  # 去除首尾的空格
print(data_source)  # 查看是否实现 取出首尾空格
# 要拆分字符串首先想 字符串的内置方法split
print(data_source.split('|'))  # 按照| 进行拆分 产生列表 查看拆分结果
data_source_list = data_source.split('|')  # 定义用户信息列表
# 从列表中取出进行校验
username = data_source_list[0].strip()  # ‘jason |  123’含字符串的情况也可以校验成功
password = data_source_list[1].strip()
if username == 'jason' and password == '123':
    print('校验成功')

"""2.基于列表充当数据库完成用户登录(拔高练习)  # 多个用户数据
   data_source = ['jason|123', 'kevin|321','oscar|222']"""
data_list = ['jason|123', 'kevin|321','oscar|222'] # 首先想到成员运算符
user_input = str(input('请按照 用户名|密码 的格式输入>>').strip())
if user_input in data_list:
    print('登录成功')

"""
3.利用列表编写一个员工姓名管理系统
    输入1执行添加用户名功能
    输入2执行查看所有用户名功能
    输入3执行删除指定用户名功能
    '''分析 用户输入的不同 可以执行不同的代码'''
    ps: 思考如何让程序循环起来并且可以根据不同指令执行不同操作
    提示: 循环结构 + 分支结构
"""
import time
user_name_list = ['jason', 'kevin', 'luna']
while True:
    user_choose = input('''
————————————————————
输入1执行添加用户名功能
输入2执行查看所有用户名功能
输入3执行删除指定用户名功能
————————————————————-
请输入>>>:''').strip()
    if user_choose == '1':
        user_name = input('请输入你的名字:').strip()
        user_name_list.append(user_name)
        print('您的名字存储中=。= ...')
        time.sleep(1)
        print('存储完成 = =!!')
        time.sleep(1)
    elif user_choose == '2':
        print("用户有:")
        for user in user_name_list:
            print(f'{user}')
        time.sleep(1)
    elif user_choose == '3':
        choose_del = input('请输入你要删除的名字:')
        if choose_del in user_name_list:
            user_name_list.remove(choose_del)
            print('删除中=。= ...')
            time.sleep(1)
            print('删除完成 = =!!')
            time.sleep(1)
        else:
            print('查找中')
            time.sleep(1)
            print('系统中不包含此用户 =^=')
            time.sleep(1)
    else:
        print('请重新输入...')
        time.sleep(1)
"""用户系统 2"""

user_number = 1 # 用户数
user_massage = {
    0: {'name': 'jason', 'password': '123', 'age': '20'}} # 用户信息字典
while True:
    user_choose = input('''
————————————————————
输入1执行添加用户名功能
输入2执行查看所有用户名功能
输入3执行删除指定用户名功能
————————————————————-
请输入>>>:\
''').strip()
    if user_choose == '1':
        name = input('请输入姓名:').strip()
        password = input('定义一个密码:').strip()
        age = input('请输入您的年龄:').strip()
        one_user_massage = {}
        one_user_massage['name'] = name
        one_user_massage['password'] = password
        one_user_massage['age'] = age
        user_massage[user_number] = one_user_massage
        print(user_massage)
        user_number += 1
        print(f'当前有{user_number}个用户')
    elif user_choose == '2':
        print('姓名  密码  年龄')
        for i in user_massage:
            temporary_dict = user_massage[i]
            print(f"{temporary_dict['name']} {temporary_dict['password']} {temporary_dict['age']}")
    elif user_choose == '3':
        for i in user_massage:
            temporary_dict = user_massage[i]
            print(f"{temporary_dict['name']}", end=' ')
        print()
        del_name = input('请输入你要删除的用户名字>>:').strip()
        for i in list(user_massage):  # 在字典遍历的时候 不能修改字典元素 RuntimeError: dictionary changed size during iteration
            if del_name == user_massage[i]['name']:
                del user_massage[i]
                print('已删除=。=')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值