02 基本数据类型的操作

02 基本数据类型的操作

一、数字类型:int、float

1、比较运算

  • int与float之间可以比较大小
  • 注意: 除了数字涵盖的特殊类型之间,其他类型只有同种类型之间才能比较
# 数字类型之间的比较运算
print(10 > 3.1)

# 拓展:其他同种类型的比较运算
# 字符串类型比较根据ASCII码对应十进制大小
print('x' > 'y')
# 列表类型比较方法:待定
print([1, 2, 3] > [4, 5])
# 错误:整型类型不能和列表类型进行比较
print([1, 2, 3] > 10)   

2、数学运算

  • +-*/、int与float之间也可以进行数学运算
print(10 * 3.1)

二、字符串(优先掌握的操作):str

1、按照索引取值(正向取+反向取):只能取

  • 字符串是不可分隔的整体,有多个字符组成,有顺序之分。而列表存的是多个值。
  • 字符串是一个值,多个字符组成字符串
  • 注意: 字符串值只能取不能改(例:str[1])。列表既可以取,也可以改(list[0]=1),需要注意的是,列表的这种操作只能在原来基础上有的情况下,做修改操作,索引超出而不会添加值,会报错。
# 字符串索引取值(正向取+反向取):只能取,不能修改指定位置的值
name = 'WangMao'
# 正向取
print(name[1])  # a
# 反向取           
print(name[-1]) # o
# 错误: 字符串只能按照索引取值,不能修改指定位置的值
# name[0] = 1

# 列表可以修改指位置的值
li = ['aaa', 'bbb', 'ccc']
li[-1] = 'ddd'
print(li)   # ['aaa', 'bbb', 'ddd']

2、切片(复制):从一个大字符串中复制出来一个子字符串,原字符串不变

  • 切片取值:顾头不顾尾,分起始部分、结束部分、步长部分。三部分之间用冒号隔开

  • 注意:range用逗号隔开,切片用冒号隔开
  • 总结:起始位置如果是0,默认可以省略。步长如果是1,默认可以省略。

msg = 'Hello WangMao!'
# 顺序紧连复制
print(msg[:6])   # Hello
print(msg[0:6])  # 与上面等同

# 顺序间隔复制
print(msg[:10:2])   # HloWn
print(msg[0:10:2])  # 与上面等同

print(msg[::2])     # HloWnMo
print(msg[0::2])    # 与上面等同

# 完整复制
print(msg[:])       # Hello WangMao!
print(msg[0:])      # 与上面等同

print(msg[0:15])        # Hello WangMao!
print(msg[0:len(msg)])  # 与上面等同

3、长度len()

# 用法:计算字符串中字符个数
msg = 'Hello WangMao!'
print(len(msg))


# 拓展:解决用于输入空格带来的bug
# 方法一:运用空字符串,隐式布尔值为False
name = input('请输入你的用户名>>:')   # name=''
if not name:
    print('输入内容为空')
else:
    print('输入内容不为空')

# 方法二:使用len统计长度0,隐式布尔值为False    
name1 = input('请输入你的用户名>>:')    # name1=''
if len(name1) == 0:
    print('输入内容为空')
else:
    print('输入内容不为空')   

4、成员运算in和not in:判断一个字符串是否在一个大字符串中

  • 注意:判断是否存在,判断的是一个整体。
# 1、用法
result = 'egon' in 'egon is DSB'
print(result)   # True
result1 = 'egon' in 'e g o n is 大帅逼'
print(result1)  # False


# 2、成员运算的2种表示方法:基于表达逻辑,优先级 in > not
# 表示方法一(推荐使用)
result = 'egon' not in 'egon is DSB'
print(result)   # True

# 表示方法二
result1 = not 'egon' in 'egon is DSB'
print(result1)  # True

5、移除字符串左右两侧的字符strip

  • str.strip('字符们'):去除字符串两边的字符,默认不加参数去除字符串两边的空格
  • strip工作原理:从左到右,先去除左边,再去除右边

  • 注意:字符串是不可以改变的类型,改strip并不是在原来的基础之上修改,而是生成修改后的字符串
  • 注意:只要是strip中参数包含的字符,字符串两边只要包含的都会被去除

# 1、没加参数:默认去除字符串两边的空格
result = '   a b c      '
print(result.strip())   # a b c


# 2、加参数:去除与参数相匹配的字符
# strip中一个参数
msg = '*****a***b***c********'
print(msg.strip('*'))   # a***b***c

# strip中多个参数(注意)
msg1 = '*-=</?abc*-/?'
print(msg1.strip('=-?*</'))  # abc


# 3、优化用户交互功能
# 字符串.strip('字符们'):去除字符串两边的字符,默认不加参数去除字符串两边的空格
# 字符串.isdigit():判断字符串中是否是纯数字,返回值为布尔值
# 3.1、需求:猜年龄
guess_age = input('猜猜王毛的年龄>>:').strip()  # strip用处:' 18 '或'18 '
if guess_age.isdigit(): # isdigit用处: 'abc'
    guess_age = int(guess_age)
    if guess_age == 18:
        print('恭喜,猜对了!')
    elif guess_age > 18:
        print('猜大了')
    else:
        print('猜小了')
else:
    print('必须输入数字')
    
# 3.2、需求:用户登录
username = input('账号>>:').strip()   # 'egon '
password = input('密码>>:').strip()   # ' 123 '
if username == 'wangmao' and password == '123':
    print('恭喜,登录成功!')
else:
    print('登录失败')

6、切分split:以某个符号位切分符号把字符串切换成列表

  • str.split('字符们'):以定义的字符们,以字符串中一一对应的切分,把字符串切换成列表

  • 注意:split是把字符串切换成列表,返回值是一个列表,是以切掉部分作为一个整体,以逗号隔开。

# 1、没加参数:默认切分空格,切换为列表
user_info = 'My name is WangMao!'
print(user_info.split())    # ['My', 'name', 'is', 'WangMao!']


# 2、加参数:切分指定参数,切换为列表
# 2.1、split中一个参数
user_info = 'WangMao:male:18'
print(user_info.split(':'))  # ['WangMao', 'male', '18']

# 2.2、split中多个参数(注意:顺序不能乱)
user_info1 = 'WangMao:=-male:=-18'
print(user_info1.split(':=-'))  # ['WangMao', 'male', '18']
print(user_info1.split('-=:'))  # 没达到目的:['WangMao:=-male:=-18']

7、for循环

for i in "WangMao":
    print(i, end=' ')   # W a n g M a o

三、列表(优先掌握的操作):list

1、按照索引取值(正向取+反向取):可存可改

  • 注意:争对修改来说,索引值不存在,也就不能进行修改操作,也就是不能超出当前列表索引范围的操作。
li = ['aaa', 'bbb', 'ccc']
# 取
print(li[0])    # aaa

# 改
li[0] = 'AAA'
print(li)       # ['AAA', 'bbb', 'ccc']

2、切片(顾头不顾尾):从一个大列表中复制一个子列表

li = ['aaa', 'bbb', 'ccc', 'ddd', 'eee']
# 顺序紧连复制
print(li[:2])   # ['aaa', 'bbb']
print(li[0:2])  # 同上


# 顺序间隔复制    
print(li[:4:2])     # ['aaa', 'ccc']
print(li[0:4:2])    # 同上


# 完整复制
print(li[:])    # ['aaa', 'bbb', 'ccc', 'ddd', 'eee']
print(li[0:])   # 同上

print(li[:len(li)])  # ['aaa', 'bbb', 'ccc', 'ddd', 'eee']
print(li[:5])        # 同上

3、长度len()

# 用法
li = ['aaa', 'bbb', 'ccc', 'ddd', 'eee']
print(len(li))  # 5

4、成员运算in和not in:判断一个值是否在一个列表中

  • 注意:只能判断第一层的每个值
li = ['aaa', 'bbb', 'ccc', ['ddd', 'eee']]
print('aaa' in li)  # True
print('ddd' in li)  # False

5、追加:append,会向列表的末尾添加一个元素

  • list.append(值):向列表的末尾添加一个值
  • 注意:索引存值,不存在的索引会报错,所以索引存值实现不了追加的功能,要追加只能使用append。
li = ['aaa', 'bbb']
# 追加
li.append('ccc')
li.append('ddd')
print(li)   # ['aaa', 'bbb', 'ccc', 'ddd']

# 索引存值能否追加呢?
li[0] = 'AAA'
# li[4] = 'BBB' # 报错:不存在的索引存值,实现不了追加的功能
print(li)   # ['AAA', 'bbb', 'ccc', 'ddd']

6、插入:insert,往指定位置之前插入值

  • list.insert(索引,值):向指定索引位置之前插值
  • 注意:insert是往指定位置之前之前之前。
li = ['aaa', 'bbb', 'ccc']
li.insert(0, 'AAA')
print(li)   # ['AAA', 'aaa', 'bbb', 'ccc']

li.insert(1, 'BBB')
print(li)   # ['AAA', 'BBB', 'aaa', 'bbb', 'ccc']

7、删除

# 掌握:list.remove(指定要删除的值):指定删除的值,要把列表中的值完完整整的放到里面来
li = ['aaa', 'bbb', 'ccc', [1, 2, 3]]
li.remove('bbb')
li.remove('ccc')
li.remove([1, 2, 3])
print(li)   # ['aaa']


# 了解:del:del不是列表独有的,字典也行。值是可以被改变的类型,就可以使用del(了解:之后会讲)
li = ['aaa', 'bbb', 'ccc', [1, 2, 3]]
del li[0:2]
print(li)   # ['ccc', [1, 2, 3]]

8、循环

li = ['aaa', 'bbb', 'ccc', [1, 2, 3]]
for item in li:
    print(item, end=' ')    # aaa bbb ccc [1, 2, 3]

四、字典(优先掌握的操作):dict

1、按照索引取值(正向取+反向取):可存、可取、可改

dic = {'name': 'WangMao', 'age': 18}
# 可存:key不存在,则存
dic['sex'] = 'male'
print(dic)  # {'name': 'WangMao', 'age': 18, 'sex': 'male'}

# 可取
print(dic['name'])  # WangMao

# 可改:key存在,则改
dic['age'] = 20
print(dic)  # {'name': 'WangMao', 'age': 20, 'sex': 'male'}

2、长度len()

  • 注意:len统计的是字典的key的个数,且只统计第一层
# 示例一:单层字典
dic = {'name': 'WangMao', 'age': 18}
print(len(dic))  # 2

# 示例二:嵌套字典
dic = {'WangMao': {'password': '123', 'sex': 'male', 'age': 18}}
print(len(dic))  # 1

3、成员运算in和not in:判断的是字典的key

  • 注意:判断的是字典的key
dic = {'name': 'WangMao', 'age': 18}
print(18 in dic)        # False
print('name' in dic)    # True

4、删除

  • dict.pop(key)与list.remove(值)对比:字典的pop操作的返回值是删除key所对应的value值。列表remove操作默认没有返回值,只是python中如果某些操作没有返回值就会报错,所有默认就返回None
# dict.pop(key): 根据字典的key删除该key所对应的value, 返回值所删除的value
dic = {'name': 'WangMao', 'age': 18}
result = dic.pop('name')
print(result)   # WangMao
print(dic)      # {'age': 18}

# list.remove(值):列表的remove没有返回值,只是python中如果某些操作没有返回值,默认就会返回None
li = [1, 2, 3]
result = li.remove(1)
print(result)   # None
print(li)       # [2, 3]

5、键keys(),值values(),键值对items()

py2与py3中keys(),values(),items()的区别

  • 老母鸡py3和鸡蛋py2的故事,更节省内存空间的老母鸡py3,而py2是造了等量的列表相当于再复制一份。
# py2中的keys(),values(),items()是一个列表形式(鸡蛋)
"""
>>> dic = {'name': 'WangMao', 'age': 18, 'sex': 'male'}
>>>
>>> dic.keys()
['age', 'name', 'sex']
>>> dic.values()
[18, 'WangMao', 'male']
>>> dic.items()
[('age', 18), ('name', 'WangMao'), ('sex', 'male')]
"""

# py3中key(),value(),items()不是一个列表,只是给你表示出来(老母鸡)
"""
>>> dic = {'name': 'WangMao', 'age': 18, 'sex': 'male'}
>>>
>>> dic.keys()
dict_keys(['name', 'age', 'sex'])
>>> dic.values()
dict_values(['WangMao', 18, 'male'])
>>> dic.items()
dict_items([('name', 'WangMao'), ('age', 18), ('sex', 'male')])
"""

6、循环

dic = {'name': 'egon', 'age': 18}
# 取dic的值
for key in dic:
    print(key, end=" ")  # name age
print()

# 取dic.keys()的值(鸡肋)
for key in dic.keys():
    print(key, end=" ")  # name age
print()

# 取dic.values()的值
for value in dic.values():
    print(value, end=" ")   # egon 18
print()

# 取dic.items()的值
for key, value in dic.items():
    print(key, value, end='/')  # name egon/age 18/

猜你喜欢

转载自www.cnblogs.com/yang1333/p/12366226.html