Python基础-高级变量类型

╄→гoц情女王★ 提交于 2020-03-01 17:27:22

                                Python基础-高级变量类型

1.高级变量类型

"""
数值型:int float bool compex
非数值型:str list set dict tuple
"""
# 保存所有人的姓名信息?
# str = '秦海根张刚'
# 获取第二个人的姓名
"""------------------ 定义列表 ------------------"""
# 定义列表保存我们班所有人的姓名
# nameList = ['秦海根','张刚','昌子为','易文']
# print(nameList)

# 列表可以保存不同的数据类型吗?
# nameList = ['秦海根','张刚','昌子为','易文',20,1.23,True]
# print(nameList)

"""------------------ 访问列表中某一个元素 ------------------"""
# nameList = ['秦海根','张刚','昌子为','易文']
# 秦海根 张刚 昌子为 易文
# 0     1       2   3
# 访问第三个元素
# 两种方式操作效果都是一样的
# ele = nameList[2]
# ele = nameList.__getitem__(2)
# print(ele)

"""------------------ 遍历列表 ------------------"""
nameList = ['秦海根', '张刚', '昌子为', '易文']
# for ele in nameList:
#     print(ele)
# while循环可不可以遍历nameList中所有的元素?
# 1:可以  2:不可以
index = 0
while index < len(nameList):
    # 获取当前元素
    ele = nameList[index]
    print(ele)
    # 修改循环变量
    index += 1

list列表的增删:

# nameList = ['秦海根', '张刚', '昌子为', '易文']
"""------------------ 列表增加 ------------------"""
# append增加朱烜甫 在末尾追加一条数据
# nameList.append('朱烜甫')
# print(nameList)

# insert添加 在特定的位置添加数据
# nameList.insert(1,'朱烜甫')
# print(nameList)

# nameList = ['秦海根', '张刚', '昌子为', '易文']
# l = ['张三','李四']
# # extend 将另外一个容器中所有的元素添加到当前容器中
# nameList.extend(l)
# print(nameList)


"""------------------ 删除 ------------------"""
nameList = ['秦海根', '张刚', '李四','昌子为','张三', '易文']
# del删除张三 按照索引删除
# del nameList[4]
# print(nameList)

# remove 删除某一个数据
# nameList.remove('李四')
# print(nameList)

# pop(索引)删除 可以返回删除的数据
# deleteEle = nameList.pop(4)
# print(deleteEle)
# print(nameList)

# pop没有参数 删除末尾元素
# deleteEle = nameList.pop()
# print(deleteEle)
# print(nameList)

# 清空列表
nameList.clear()
print(nameList)
nameList.append('凤姐')
print(nameList)

列表其他操作:

"""------------------ 列表修改 ------------------"""
# nameList = ['秦海根', '张刚', '张三','昌子为', '易文']
# 修改张三 为 张四
# nameList[2] = '张四'
# print(nameList)
"""------------------ 列表查询 ------------------"""
# nameList = ['秦海根', '张刚', '张三','昌子为', '易文']
# 查询某一个元素
# print(nameList[2])

# index 查询角标
# 查看张三的角标
# i = nameList.index('张三')
# print(i)
# del nameList[nameList.index('张三')]
# print(nameList)

# 列表中可以存储多个相同的元素
# count
# nameList = ['秦海根', '张刚', '张三','昌子为', '易文','张三']
# # 查看张三在列表中出现多少次
# c = nameList.count('李四')
# print(c)

列表的排序和最值:

"""------------------ 列表的排序 ------------------"""
ageList = [90,10,30,20,50,70]
# 从小到大 升序
# ageList.sort()
# print(ageList)
# 从大到小 降序
# ageList.sort(reverse=True)

# reverse 将列表进行反转
# ageList.reverse()
# print(ageList)

"""------------------ 最值 ------------------"""
# 最大值
maxValue = max(ageList)
print(maxValue)
minValue = min(ageList)
print(minValue)

冒泡排序:

"""
有一个数字集合[9,8,7,6,5,4,3,2,1],请手动对这个集合正序排序(不要使用sort方法)

"""
# l = [9, 8, 7, 6, 5, 4, 3, 2, 1]
l = [9, 68, 17, 6, 45, 4, 133, 2, 121]
# 不借助于sort函数(帮你实现了算法)
# 1.定义双层循环
row = 0
while row < len(l) - 1:
    col = 0
    while col<len(l)-1-row:
        # 当前元素:  l[col]
        # 下一个元素:l[col+1]
        # 如果下一个元素比当前元素小 交换
        if l[col]>l[col+1]:
            # 交换
            tmp = l[col]
            l[col]=l[col+1]
            l[col+1] = tmp

        col += 1
    row += 1

print(l)

选择排序

"""
[9,8,7,6,5,4,3,2,1]
通过选择排序 升序排序
"""

# l = [9, 8, 7, 6, 5, 4, 3, 2, 1]
l = [95, 88, 7, 46, 15, 4, 113, 452, 21]

row = 0
while row < len(l) - 1:
    # 新的一轮
    # 假定最小值角标 row
    # 实际最小值角标
    index = row
    # 里层循环
    col = row + 1
    while col < len(l):
        # 对比当前元素和实际最小值角标元素
        if l[col]<l[index]:
            # 修改index
            index = col
        col += 1
    # 一轮结束 如果假定的最小值角标和实际的最小值角标不一致,交换数据
    if row!=index:
        # 交换数据
        tmp = l[row]
        l[row] = l[index]
        l[index] = tmp
    row += 1

print(l)

嵌套列表:

"""
1班有三位同学:林青霞 狄龙 郑少秋
2班有2位同学:张曼玉  梁朝伟
"""
# nameList = ['林青霞','狄龙','郑少秋' ,'张曼玉','梁朝伟']
nameList = [['林青霞','狄龙','郑少秋'],['张曼玉','梁朝伟']]
# 查询张曼玉
print(nameList[1][0])
# 修改狄龙  史泰龙
nameList[0][1] = '史泰龙'
print(nameList)

# 知道梁朝伟角标
index = nameList.index(['张曼玉','梁朝伟'])
print(index)

.列表嵌套练习:

"""
需求:
一个学校,有3个办公室,现在有8位老师等待工位的分配,
请编写程序:
1. 完成随机的分配
2. 获取办公室信息 (每个办公室中的人数,及分别是谁)

分析:
1.3个办公室(办公室:列表) 列表嵌套
2.8位老师 列表中保存
3.遍历老师的列表

4.随机存放到办公室中
"""
import random
"""------------------ 随机分配办公室 ------------------"""

# # 1.3个办公室(办公室:列表) 列表嵌套
# classroomList = [[], [], []]
# # 2.8位老师 列表中保存
# teachers = ['袁腾飞', '罗永浩', '俞敏洪', '李永乐', '王芳芳', '马云', '李彦宏', '马化腾']
# # 3.遍历老师的列表
# for teacher in teachers:
#     # 随机办公室的角标 Ctrl+P查看提示
#     # Ctrl+Alt+V 提取变量
#     index = random.randint(0, 2)
#     # 4.随机存放到办公室中
#     classroom = classroomList[index]
#
#     classroom.append(teacher)
# print(classroomList)

"""------------------ 每一个办公室至少有一个人 ------------------"""
# TDD开发
# 1.3个办公室(办公室:列表) 列表嵌套
classroomList = [[], [], []]
# 2.8位老师 列表中保存
teachers = ['袁腾飞', '罗永浩', '俞敏洪', '李永乐', '王芳芳', '马云', '李彦宏', '马化腾']
# 3.每一个办公室中添加一名老师,遍历办公室还是老师列表  办公室:1  老师 2
for classroom in classroomList:
    # 随机获取一名老师
    # teacher = teachers[random.randint(0,len(teachers)-1)]
    # 添加到办公室中
    classroom.append(teachers.pop(random.randint(0,len(teachers)-1)))
    # 从老师列表中删除这个元素
    # del teachers[index]
    # teachers.remove(teacher)

# print(classroomList)
# print(teachers)
# 4.把剩下的老师随机分配到办公室中
for teacher in teachers:
    # 随机办公室的角标 Ctrl+P查看提示
    # Ctrl+Alt+V 提取变量
    index = random.randint(0, 2)
    # 4.随机存放到办公室中
    classroom = classroomList[index]

    classroom.append(teacher)

# 清空teachers
teachers.clear()

print(classroomList)
print(teachers)

素数练习:

"""
需求:
列出1~1000内的所有素数

素数:除了1和它本身以外,不能被其它数据整除

2:1 2
3:1 3

5:1 5
7
11
13
17
19

分析:
1.1到1000列举出来 while for
2.6  2..5 7 2 6 11 2..10
    看当前数据是否能被从2到当前数据小1的数据整除,只要有一个可以整除,就不是素数
    如果所有都不能整除,就是素数
"""
# 执行效率
# 11 1 11 2..6  7
# 1.1到1000列举出来 while for
for ele in range(1,1001):
    # 看当前数据是否能被从2到当前数据小1的数据整除,只要有一个可以整除,就不是素数
    # 如果所有都不能整除,就是素数
    # for a in range(2,ele):# 1000 减少循环次数
    for a in range(2,ele//2+1):# 1000 减少循环次数
        if ele %a==0:
            # 能够被当前数据整除
            # print('%d 不是素数'%ele)
            break
    else:
        print(ele)

登录验证练习:

"""
需求:
判断登录用户名是否合法(不能用正则表达式)
用户名是数字字母或者_,需要在3到20位,必须有2个或以上大写字母,2个或以上小写字母,3个或以上数字
hhew2383dW_fkf&E@^

分析:
1.数字字母或者_
2.需要在3到20位
3.必须有2个或以上大写字母
4.2个或以上小写字母
5.3个或以上数字

步骤:
1.定义三个容器分别存放数字 大写字母  小写字母
2.遍历用户名字符串
3.查看元素
    1.是否在三个容器中或者是_ 用户名不满足
    2.统计数字 小写字母 大写字母
4.循环结束之后,判断数字 字母是否满足长度需求

"""
name = 'hhew2383dW_fkfE'
# 1.定义三个容器分别存放数字 大写字母  小写字母
numberStr = '0123456789'
lowerStr = 'abcdefghijklmnopqrstuvwxyz'
upperStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

# 数字个数  小写字母个数  大写字母个数
numberCount = 0
lowerCount = 0
upperCount = 0
# 2.遍历用户名字符串
for ele in name:
    # 1.是否在三个容器中或者是_ 用户名不满足
    # if (ele in numberStr) or (ele in lowerStr) or (ele in upperStr) or ele == '_':
    if (ele in numberStr):
        # 数字
        # 2.统计数字 小写字母 大写字母
        numberCount += 1
    elif (ele in lowerStr):
        # 小写字母
        lowerCount += 1
    elif (ele in upperStr):
        # 大写字母
        upperCount += 1
    elif ele == '_':
        pass
    else:
        # 不合法字符
        print('密码不合法')
        # 跳出循环
        break
else:
    # 需要在3到20位, 必须有2个或以上大写字母, 2
    # 个或以上小写字母, 3
    # 个或以上数字
    if (len(name)>=3 and len(name)<=20) and upperCount>=2 and lowerCount>=2 and numberCount>=3:
        print('密码合法')
    else:
        print('密码不合法')

2.元组的定义和特点

"""------------------ 元组的定义 ------------------"""
# 定义元组 保存同学姓名
# t = ('秦海根','朱烜甫','张刚')
"""------------------ 元组特点 ------------------"""
# 获取某一个元素
# ele = t[0]
# print(ele)
# 不能增加元素
# 不能修改元素
# t[0] = '易文'
# 能不能删除元素
# del t[0]

# print(type(t))

"""------------------ 元组元素可以重复的 ------------------"""

"""------------------ 一个元组元组的定义:需要在元组后面加上, ------------------"""
# 空列表
# l = []
# print(type(l))

# 空元组
# t = ()
# print(type(t))

# 定义一个元素的元组
t = ('张曼玉',)
print(type(t))

元组的操作:

t = ('秦海根', '张刚', '朱烜甫', '张刚')

"""------------------ 查询 ------------------"""
# 查询某一个元素
# ele = t[0]
# print(ele)

# 获取元素的索引
# index = t.index('张刚')
# print(index)

# 张刚出现的次数
# print(t.count('张刚'))

for ele in t:
    print(ele)

列表的作用:

# t = ('秦海根', '张刚', '朱烜甫', '张刚')

"""------------------ 元组的自动组包 ------------------"""
# a = 10
# b = 20
# 同时定义了多个变量
# a,b = 10,20

# 自动组包
# a = 10,20
# print(type(a))

"""------------------ 元组的自动解包 ------------------"""
# t = ('秦海根', '张刚', '朱烜甫')
# name1  =t[0]
# name2  =t[1]
# name3  =t[2]
# print(name1,name2,name3)
# 自动解包 保证接收的变量和元组的元素个数保持一致
# name1,name2,name3 = t
# print(name1,name2,name3)


"""------------------ 数据交换 ------------------"""
a = 10
b = 20
# 交换a和b
# tmp = a
# a = b
# b = tmp
# go语言
a,b = b,a # 组包(20,10) 解包:a:20 b:10

# print(a,b)

"""------------------ 格式化输出 ------------------"""
# t = (10,20)
# print('第一个数据:%d,第二个数据:%d'%(t[0],t[1]))
# print('第一个数据:%d,第二个数据:%d'%t)

"""------------------ 让列表不可变 ------------------"""
l = ['秦海根', '张刚', '朱烜甫']
# 可以把列表变成元组 让它不可修改
t = tuple(l)
print(t)

3.集合

"""
python数据类型:
数值型:int  float bool compex
高级变量类型: list tuple set dict str
list:容器  可以增删改查 有序 元素不唯一
"""
# l = ['张三','李四','王五','张三']
# print(l)
# t = ('张三','李四','王五','张三')
# print(t)

"""------------------ 创建集合 ------------------"""
# 集合特点:元素唯一的
# s = {'张三','李四','王五','张三'}
# 容器中元素是无序的
# s = {'张三','李四','王五'}

# print(s)
"""------------------ 数据类型 ------------------"""
# s = {'张三','李四','王五'}
# print(type(s))

"""------------------ 集合的遍历 ------------------"""
# s = {'张三','李四','王五'}
# for ele in s:
#     print(ele)

"""------------------ 获取集合中第二个元素 ------------------"""
# 能  1  不能 2
# ele = s[1]
# print(ele)

"""------------------ 集合中添加元素 ------------------"""
# s = {'张三','李四','王五'}
# l = ['张曼玉','林青霞','赵六']
# # 添加赵六 add
# # s.add('赵六')
# # print(s)
#
# # update添加
# s.update(l)
# print(s)

"""------------------ 删除元素 ------------------"""
s = {'张三','李四','王五'}
# 删除张三 remove 删除元素,如果元素不存在,删除失败
# s.remove('张三')
# print(s)
# s.remove('林青霞')

# pop 随机删除
# s.pop()
# print(s)

# discard 删除元素 如果元素不存在,不做任何处理
s.discard('林青霞')
print(s)

集合的其它操作:

"""------------------ 子集和超集 ------------------"""
# s1 = {1,2,3}
# s2 = {1,2,3}
# result = s2.issubset(s1)
# print(result)
# result = s1.issuperset(s2)
# print(result)

"""------------------ 并集 ------------------"""
# s1 = {1,2,3}
# s2 = {3,4,5}
# result = s1.union(s2)
# print(result)

"""------------------ 交集 ------------------"""
# s1 = {1,2,3}
# s2 = {3,4,5}
# result = s1.intersection(s2)
# print(result)

"""------------------ 抑或 ------------------"""
s1 = {1,2,3}
s2 = {3,4,5}
# result = s1.symmetric_difference(s2)
# print(result)
s1.symmetric_difference_update(s2) # 更新s1为抑或的结果
print(s1)
# s1.symmetric_difference(s2)
# s1.symmetric_difference_update(s2)  更新s1为异或的结果

集合的作用:

l = ['张三','李四','王五','张三']
# newL = []
# for ele in l:
#     if ele not in newL:
#         newL.append(ele)
#
# print(newL)
# 通过集合对列表去重
# s = set(l)
# print(s)
# l = list(s)
# print(l)

"""------------------ list tuple set相互转换 ------------------"""
# list转换成set
# s = set(l)
# print(s)

# list转换成tuple
t = tuple(l)
# print(t)

# tuple转换成set
s = set(t)
# print(s)

l = list(s)
print(l)

4.字符串:

"""------------------ 字符串的定义 ------------------"""
# 字符:a b c d e f 中  过  华
# str = 'hello'
# str = "hello"
# str = 'hel'你好'lo'
# str = 'hel\'你好\'lo'
# # print(str)
#
# str = "hel\"你好\"lo"
# # print(str)
#
# str = "hel'你好'lo"

"""------------------ 获取某一个元素 ------------------"""
# str = 'hello'
# 获取第三个元素
# ele = str[2]
# print(ele)

"""------------------ 遍历字符串中每一个元素 ------------------"""
# for ele in str:
#     print(ele)

"""------------------ 原样输出字符串 ------------------"""
# str = 'hello'
# str = "hello"
# 省
# 市
# 区
# str = '广东省\n深圳市\n宝安区'
# kotlin
str = '''广东省
深圳市
宝安区'''
print(str)

字符串判断:

# str = 'a'
"""------------------ isalpha  ------------------"""
# result = str.isalpha()
# print(result)

"""------------------ isdecimal ------------------"""
# 字符串非空  并且都是数字  返回True
# str = ''
# result = str.isdecimal()
# print(result)

"""------------------ islower ------------------"""
# str = '123123a'
# result = str.islower()
# print(result)

"""------------------ isupper ------------------"""
# str = '1203123A'
# result = str.isupper()
# print(result)
"""------------------ startwith ------------------"""
# str = 'helloworld'
# result = str.startswith('w',5)
# print(result)

"""------------------ endwith ------------------"""
# str = 'helloworld'
# result = str.endswith('o',2,5)
# print(result)

查找和替换:

# str = 'helloworld'
"""------------------ find ------------------"""
# find返回在字符串中的角标  如果不存在返回-1
# result = str.find('z')
# print(result)
# 首字母对应的角标
# result = str.find('loww')
# 返回的角标 3 4 5
# print(result)

# 默认找到第一个当前元素 返回它的角标
# 可以通过start以及end指定查找范围
# result = str.find('l',5)
# print(result)

"""------------------ rfind:从右边开始找到第一个结束 ------------------"""
# str = 'helloworld'
# print(str.find('l'))
# print(str.rfind('l',1,5))

"""------------------ index ------------------"""
# 如果不存在 就报错  存在返回索引
# str = 'helloworld'
# print(str.index('o'))
# print(str.index('z'))
"""------------------ rindex ------------------"""
# 从右边开始  如果存在返回索引  不存在就报错

"""------------------ replace ------------------"""
str = 'helloworld'
# 如果替换的字符串不存在  不做任何处理
# newStr = str.replace("loww",'up')
# 默认 只要遇到字符串就替换 可以通过第三个参数指定替换的个数
newStr = str.replace("l",'up',2)
print(str)
print(newStr)

字符串拆分和连接:

# str = 'helloworld'
"""------------------ partition ------------------"""
# 根据str将字符串拆分 返回元组 (str前 str  str后)
# result = str.partition('low')
# print(result)

"""------------------ rpartition ------------------"""
# str = 'helloworldhelloworld'
# result = str.partition('low')
# result = str.rpartition('low')
# print(result)

"""------------------ split ------------------"""
# 对字符串进行分割  返回列表  不会保存分割字符串
# str = '张三hello李四hello王五hello赵六'
# result = str.split('hello')
# print(result)

"""------------------ splitlines ------------------"""
# 按\n换行符分割
# str = '广东省\n深圳市\n宝安区'
# str = '''广东省
# 深圳市
# 宝安区'''
# result= str.splitlines()
# print(result)

"""------------------ + ------------------"""
# str1 = 'hello'
# str2 = 'world'
# newStr = str1 +str2
# print(newStr)

"""------------------ join ------------------"""
l = ['张三','李四','王五']
str = 'hello'
# 将容器中所有的元素加上当前字符串分割输出
result = str.join(l)
print(result)

大小写转换:

"""------------------ lower ------------------"""
# str = 'HELLOw12312'
# 字符串转换小写
# result = str.lower()
# print(result)
"""------------------ upper ------------------"""
str = 'helloA1231中国'
result = str.upper()
print(result)

文本对齐:

"""------------------ ljust ------------------"""
# str = 'hello'
# result = str.ljust(10,'-')
# print(str)
# print(result)
"""------------------ rjust ------------------"""
# str = 'hello'
# result = str.rjust(10,'*')
# print(result)
"""------------------ center ------------------"""
# str = 'hello'
# result = str.center(10,"&")
# print(result)

去空白:

"""------------------ lstrip ------------------"""
# 去除左边的空白
# str = '   hello   '
# result = str.lstrip()
# print(result)

# str = '----hello   '
# result = str.lstrip('-')
# print(result)

"""------------------ rstrip ------------------"""
# str = '   he**llo****'
# result = str.rstrip('*')
# print(result)

"""------------------ strip ------------------"""
str = '  hello  '
result = str.strip()
print(result)

字符串练习-判断用户名和密码.:

"""
需求:
用户名和密码格式校验程序
要求从键盘输入用户名和密码,校验格式是否符合规则,如果不符合,打印出不符合的原因,并提示重新输入
用户名长度6-20,用户名必须以字母开头
密码长度至少6位,不能为纯数字,不能有空格

分析:
1.从键盘输入用户名(需要while循环)
2.长度6-20
3.必须字母开头

4.输入密码(while循环)
5.密码长度至少6位
6.不能为纯数字
7.不能有空格
"""
while True:
    # 1.从键盘输入用户名(需要while循环)
    name = input('请输入用户名:')
    # 2.长度6-20
    if not (len(name) >= 6 and len(name) <= 20):
        print('用户名必须6到20位')
        continue
    # 3.必须字母开头 ab A-Z
    # 获取第一个字母  是否是a-z A-Z a
    ele = name[0]
    if not ele.isalpha():
        print('用户名第一个必须为字母')
        continue

    # 用户名满足
    print('用户名合法')
    break

# 4.输入密码(while循环)
while True:
    pwd = input('请输入密码')
    # 5.密码长度至少6位
    if len(pwd) < 6:
        print('密码长度至少为6位')
        continue
    # 6.不能为纯数字
    if pwd.isdecimal():
        print('密码不能为纯数字')
        continue
    # 7.不能有空格
    # ' 张 三  '
    if ' ' in pwd:
        print('密码不能有空格')
        continue
    print('密码合法')
    break

print('开始登录')

5.字典

"""------------------ 字典的定义 ------------------"""
# d = {'中国':'China','英国':'England','美国':'America',30:'sadf',(10,20,30):'afdsf'}
# key只能是数字 字符串 元组类型
# d = {'中国':'China','英国':'England','美国':'America',30:'sadf',(10,20,30):'afdsf',1.2323:12,True:243234}

# vlaue可以是任意类型
# d = {'中国':'China','英国':'England','美国':'America',30:[1,2,3],40:{1,2,3}}
# print(d)

"""------------------ key必须是唯一的 ------------------"""
# key必须要唯一  如果出现多个相同的key  后面的会覆盖前面的内容
# key相当于字典的索引
d = {'中国':'China','英国':'England','美国':'America','美国':'USA'}
print(d)

字典的增删改:

"""------------------ 增加 ------------------"""
# d = {'中国':'China','英国':'England','美国':'America'}
# 添加 法国
# 字典[key] = value
# d['法国'] = 'France'
# print(d)

# d.setdefault('法国','France')
# print(d)

"""------------------ 删除 ------------------"""
# d = {'中国':'China','英国':'England','美国':'America'}
# 删除美国 如果键不在字典中,会报错
# del d['法国']
# print(d)

# pop 删除元素 并且返回删除元素的值 如果删除不存在会报错
# result = d.pop('法国')

# print(d)
# print(result)


# del d
# del d # 销毁当前容器  不能再继续使用
# print(d)

# 清空容器中的数据  还可以继续使用
# d.clear()
# print(d)
# d['中国'] = 'China'
# print(d)

"""------------------ 修改 ------------------"""
d = {'中国':'China','英国':'England','美国':'America'}
# 修改美国
# d['美国'] = 'USA'
# d.setdefault('美国','USA')
# d['法国'] = 'France'
# print(d)

字典的查询和遍历:

"""------------------ 字典查询键对应的值 ------------------"""
# d = {'中国':'China','英国':'England','美国':'America'}
# 根据键获取值  如果键值对不存在,就会报KeyError
# ele = d['法国']
# print(ele)

# get 获取键对应的值 如果键值对不存在,不会报错 返回的结果是None
# ele = d.get('英国')
# if ele:
#     print('成功',ele)
# else:
#     print('失败')
"""------------------ 查询所有的键值对 ------------------"""
# d = {'中国':'China','英国':'England','美国':'America'}
# 查询所有的键 视图对象
# result = d.keys()
# 视图转换成列表
# keyList = list(result)
# print(keyList)

# 获取所有的values 返回视图
# result = d.values()
# 视图转换成list
# valuesList = list(result)
# print(valuesList)

# items获取所有的键值对 返回列表  列表中每一个元素是键值对的元组
# result = d.items()
# 视图转换成list
# itemsList = list(result)
# print(itemsList)

"""------------------ 遍历 ------------------"""
d = {'中国':'China','英国':'England','美国':'America'}
print(len(d))
# for ele in 遍历 ele代表键
# for ele in d:
#     print(ele,d[ele])

# 获取所有的键
# for key in d.keys():
#     print(key)

# 打印所有的values
# for value in d.values():
#     print(value)

# items打印所有的键值对
# for ele in d.items():
#     print(ele)

for key,value in d.items():
    print(key,value)

字典的应用场景:

# 描述人 姓名 电话  年纪  性别  动态行为 吃饭 开车 学习
# l = ['张三','12321',40,'男']
# 字典
d = {'name':'张三','phone':'12332','age':40,'性别':'男'}

l = []
l.append(d)
d = {'name':'李四','phone':'12332','age':40,'性别':'男'}
l.append(d)
print(l)

空字典:

# 空列表
l = []
# 空元组
# d = ()
# d = (10,)

# 空字典 {}
# d = {}
# print(type(d))

# 空集合 不能通过{}定义  需要通过set定义
s = set()
print(s)

字典练习:

students = [
    {"name": "阿土",
     "age": 20,
     "gender": True,
     "height": 1.7,
     "weight": 75.0},
    {"name": "小美",
     "age": 19,
     "gender": False,
     "height": 1.6,
     "weight": 45.0},
]
"""------------------ 判断如下列表中是否存在name为'阿土'的元素 ------------------"""
mark = False
# 遍历列表
for ele in students:
    # 遍历每一个字典的数据
    for key,value in ele.items():
        # name=='阿土'是否存在
        if key=='name' and value=='阿土图':
            print('找到了数据')
            mark = True
            break

    if mark:
        break
else:
    print('没有这个数据')

高级变量练习:

"""
需求:
有10个球分别3红、3蓝、4白,现需要将这10个球放入这3个盒子,要求每个盒子至少有一个白球,请用程序实现

一个容器保存所有的球
分析:
1.定义容器保存所有的球
2.定义三个盒子 嵌套列表
3.遍历三个盒子,每个盒子添加一个白球

三个容器保存三种球
1.定义三个容器保存三种球
2.定义三个盒子 嵌套列表
3.白球分配到三个盒子中
4.三个容器合并,再进行分配

"""
"""------------------ 一个容器保存所有的球 ------------------"""
# import random
# # 1.定义容器保存所有的球
# balls = ['白','蓝','白','白','红','白','蓝','蓝','红','红']
# # 2.定义三个盒子 嵌套列表
# boxes = [[],[],[]]
# # 3.遍历三个盒子,每个盒子添加一个白球
# for box in boxes:
#     # 找到白球
#     # 添加白球
#     box.append(balls.pop(balls.index('白')))
#     # 从balls容器把添加的白球删除掉
# # for box in boxes:
# #     # 找到白球
# #     index = balls.index('白')
# #     ball = balls[index]
# #     # 添加白球
# #     box.append(ball)
# #     # 从balls容器把添加的白球删除掉
# #     balls.remove(ball)
#
# # print(balls)
# # print(boxes)
#
# # 4.剩下的球再进行分配
# # 球 1  盒子 2
# for ball in balls:
#     index = random.randint(0,2)
#     # 随机获取box
#     box = boxes[index]
#     # 添加球到盒子中
#     box.append(ball)
#
# balls.clear()
# print(balls)
# print(boxes)
"""------------------ 三个容器保存三种球 ------------------"""
import random
# 1.定义三个容器保存三种球
whiteBalls = ['白','白','白','白']
redBalls = ['红','红','红']
blueBalls = ['蓝','蓝','蓝']

# 2.定义三个盒子 嵌套列表
boxes = [[],[],[]]
# 3.白球分配到三个盒子中
for box in boxes:
    # 找到白球
    # 添加白球
    box.append(whiteBalls.pop(whiteBalls.index('白')))
# print(boxes)
# print(whiteBalls)
# 4.三个容器合并,再进行分配
l = []
l.extend(whiteBalls)
l.extend(redBalls)
l.extend(blueBalls)

whiteBalls.clear()
redBalls.clear()
blueBalls.clear()

for ball in l:
    index = random.randint(0,2)
    # 随机获取box
    box = boxes[index]
    # 添加球到盒子中
    box.append(ball)

print(boxes)

6.内置函数:

# d = {'name':'张三','age':40}
# del d
# print(len(d))
# print(d)

s = {20,50,100}
# print(max(s))
d = {20:60,90:40}
print(max(d))

运算符:

"""------------------ + ------------------"""
str1 = 'hello'
str2 = 'world'
newStr = str1+str2
# result = str1+10
# print(newStr)

# 列表+
# l1 = [1,2,3]
# l2 = [4,5,6]
# newL = l1+l2
# print(newL)

# 元组+
# t1 = (1,2,3)
# t2 = (4,5,6)
# newT = t1+t2
# print(newT)

"""------------------ * ------------------"""
str = 'hello'
# print(str * 5)

# l = [1,2,3]
# print(l * 5)

# t = (1,2,3)
# print(t * 5)


"""------------------ in 和not in ------------------"""
# 字典中in和not in判断的是key是否在字典中

"""------------------ 比较 ------------------"""
# str1 = 'hemlo'
# str2 = 'hfllo'
# print(str1 < str2)

l1 = [1,2,3]
l2 = [1]
print(l1 > l2)

切片:

"""
切片:字符串 列表  元组
"""

# str = '中华人民共和国欢迎您'
"""------------------ 切片的简单使用 ------------------"""
# 获取前三个文字
# newStr = str[0:3:1]
# print(newStr)

# 步长:默认1 省略默认步长
# newStr = str[0:3:]
# 不写步长 可以省略步长前面的:
# newStr = str[0:3]
# 索引从0开始 可以省略开始索引,不能省略:
# newStr = str[:3]

#  后5个元素
# newStr = str[5:10]
# 结束索引是在最后 可以省略结束索引
# newStr = str[5:]
# print(newStr)


"""------------------ 步长 ------------------"""
# str = '中华人民共和国欢迎您'
# newStr = str[0:8:3]
# print(newStr)

倒序索引:

"""
需求:
str = "中华人名共和国欢迎您"
把字符串中从第一个到倒数第二个(不包含)打印出来

"""
str = "中华人名共和国欢迎您"
# 把字符串中从第一个到倒数第二个(不包含)打印出来
# newStr = str[:8]
# 开始位置 正序  结束位置:倒序
newStr = str[:-2]
print(newStr)

负数步长:

"""
需求:
str = "中华人名共和国欢迎您"
把从角标为2到7(包含)倒序打印出来

"""
str = "中华人名共和国欢迎您"
# 把从角标为2到7(包含)倒序打印出来
# 欢国和共名人
# newStr = str[2:8:-1]
# 步长为负  索引也应该逆序索引
newStr = str[7:1:-1]

print(newStr)

高级变量练习:

"""

需求:
完成字符串的逆序以及统计
设计一个程序,要求只能输入长度低于31的字符串,否则提示用户重新输入
打印如下内容:
您输入的字符串: ...
长度: ...
逆序后为: ...
字符统计结果: ...(afsfdsf)  a:1  f:3 s:2 d:1
zhangsanlisi

分析
1.输入字符串(while循环)
2.字符串长度小于31位,否则提示重新输入
3.您输入的字符串: ...
4.长度: ...
5.逆序后为: ...  (切片)
6.字符统计结果: ...(afsfdsf)  a:1  f:3 s:2 d:1
 safljdsfl  s:2 a:1 f:2 l:2 j:1 d:1
"""
while True:
    # 1.输入字符串(while循环)
    str = input('请输入字符串')
    # 2.字符串长度小于31位,否则提示重新输入
    if len(str)>=31:
        print('不能超过31位,请重新输入')
        continue
    # 跳出循环
    break
print('输入正确')
# 3.您输入的字符串: ...
print('您输入的字符串:%s'%str)
# 4.长度: ...
print('长度:%d'%len(str))
# 5.逆序后为: ...  (切片)
# hello  olleh
newStr = str[::-1]
# print('逆序后为:%s'%newStr)
# 6.字符统计结果: ...(afsfadsf)  a:1  f:3 s:2 d:1
# 1.字典 保存结果  {}
resultDict = {}
# 2. 如果字典中没有这个a  a添加进去 {'a':1}
for ele in str:
    # 3.字典中有a 将元素个数+1
    if ele not in resultDict:
        resultDict[ele] = 1
    else:
        resultDict[ele] += 1
print('字符统计结果:{}'.format(resultDict))

7.列表推导式

# l = []
# for ele in range(1,10001):
#     if ele % 2 ==0:
#         l.append(ele)
#
# print(l)
"""------------------ 推导式 ------------------"""
# 需要定义列表保存从1到10000的数据,怎么做?
# l = [ele for ele in range(1,10001)]
# print(l)

"""------------------ 2.创建包含1到10000中所有偶数的列表 ------------------"""
# l = [ele for ele in range(1, 10001) if ele % 2 == 0]
# print(l)

"""------------------ 3.创建嵌套列表(列表每个元素是两个元素的元组) ------------------"""
# l = [(1,2),(2,4),(3,6)..,(100,200)]
# l = [(ele,ele*2)for ele in range(1,101)]
# print(l)

"""------------------ 4.创建嵌套列表(列表每个元素是三个元素的元组) ------------------"""
# l = [(1,2,3),(2,4,6),(3,6,9)..,(100,200,300)]
# l = [(ele,ele*2,ele*3)for ele in range(1,101)]
# print(l)

推导式练习:

"""
需求:
请写出一段 Python 代码实现分组一个 list 里面的元素
比如 [1,2,3,...100]变成 [[1,2,3],[4,5,6]....[100]]

"""
l = [ele for ele in range(1,101)]
# print(l)
# [[1,2,3],[4,5,6]....[100]]
# [[ele,ele+1,ele+2]for ele in l if ]
# 切片 0:3  3:6 6:9
newL = [l[ele:ele+3]for ele in range(0,len(l)) if ele %3==0]
print(newL)
# str = 'hello'
# print(str[3:10])

集合和字典推导式:

"""------------------ 集合推导式 ------------------"""
# s = {ele for ele in range(1,101)}
# print(s)

"""------------------ 字典的推导式 ------------------"""
# 需求:
# 定义{"1":1,"2":4,'3':9,..,'10':100}这样的字典
# d = {str(ele):ele**2 for ele in range(1,11)}
# print(d)

l1 = [ele for ele in range(1,11)]
l2 = [ele for ele in range(21,31)]
# {1:21,2:22,3:23}
# 错误写法
# d = {key:value for key in l1 for value in l2}
# 正确写法 l1和l2打包一起 一起遍历 zip
d = {key:value for key,value in zip(l1,l2)}
print(d)


 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!