(自学#Python)Day09-容器嵌套练习

本文介绍了Python中的for循环嵌套、二维列表操作、字典列表和字典嵌套,包括列表推导、条件判断、自定义排序以及实战应用如疫情数据处理和彩票生成。
摘要由CSDN通过智能技术生成

(自学Python)Day09-容器嵌套练习

一、for循环嵌套

"""
    for循环嵌套
"""
"""
print("*",end = " ")
print("*",end = " ")
print("*",end = " ")
print("*",end = " ")
print("*",end = " ")
print() # 换行
print("*",end = " ")
print("*",end = " ")
print("*",end = " ")
print("*",end = " ")
print("*",end = " ")
print() # 换行
"""

"""
for c in range(5):
    print("*",end = " ")
print() # 换行

for c in range(5):
    print("*",end = " ")
print() # 换行
"""

# 两层循环
# 外层执行一次,内层执行多次
for r in range(3):  # 0       1       2
    for c in range(5):  # 01234   01234   01234
        print("*", end=" ")
    print()  # 换行

小练习

"""
外层循环 4 次  内层循环
$                1
$$               2
$$$              3
$$$$             4
"""
for r in range(4):          # 0   1   2    3
    for c in range(r + 1):  # 0   01  012  0123
        print("$", end="")  # 在一行
    print()  # 换行

二、二维列表

"""
    二维列表
        列表名[行索引][列索引]
"""
list01 = [
    [1, 2, 3, 4, 5],
    [6, 7, 8, 9, 10],
    [11, 12, 13, 14, 15],
]
print(list01[0][0])
print(list01[1][3])

小练习

"""
    练习:二维列表
        --将元素能被3整除的修改为0
         --以表格状打印
"""
list01 = [
    [1, 2, 3, 4, 5],
    [6, 7, 8, 9, 10],
    [11, 12, 13, 14, 15],
]
# for r in range(3):
#     for c in range(5):
#         if list01[r][c] % 3 == 0:
#             list01[r][c] = 0
#     print()

# 修改
for r in range(len(list01)):  # 0 1 2
    for c in range(len(list01[r])):
        if list01[r][c] % 3 == 0:
            list01[r][c] = 0
    print()

# 读取
for row in list01:
    for item in row:
        print(item, end="\t")  # 在一行输出
    print()  # 换行
"""
	练习:
  --打印于谦的所有爱好(一行一个)
  --打印所有人(一行一个)
  --打印所有爱好(一行一个)
"""
dict_hobbies = {
    "于谦": ["抽烟", "喝酒", "烫头"],
    "郭德纲": ["说", "学", "逗", "唱"],
}

for item in dict_hobbies["于谦"]:
    print(item)

for key in dict_hobbies:
    print(key)

for value in dict_hobbies.values():
    for item in value:
        print(item)

# ----------------------------------------
# dict_hobbies["于谦"].remove("抽烟")
# del dict_hobbies["于谦"][0]

# 添加新数据
dict_hobbies["大爷"] = dict_hobbies["于谦"]
# 删除旧数据
del dict_hobbies["于谦"]
print(dict_hobbies)

三、字典列表嵌套

dict_travel_info = {
    "北京": {
        "景区": ["长城", "故宫"],
        "美食": ["烤鸭", "豆汁焦圈", "炸酱面"]
    },
    "四川": {
        "景区": ["九寨沟", "峨眉山"],
        "美食": ["火锅", "兔头"]
    }
}
# --打印北京的第一个景区
print(dict_travel_info["北京"]["景区"][0])

# --打印所有城市 (一行一个)
for key in dict_travel_info:
    print(key)

# --打印所有城市的所有美食(一行一个)
for value in dict_travel_info.values():
    for item in value["美食"]:
        print(item)

四、列表字典嵌套

在这里插入图片描述

# 疫情信息
list_epidemic = [
    {
        "region": "台湾", "new": 16,
        "now": 2339, "total": 16931,
    },
    {
        "region": "陕西", "new": 182,
        "now": 859, "total": 1573,
    },
    {
        "region": "浙江", "new": 2,
        "now": 505, "total": 2008,
    }
]
# 定位某个单元格
print(list_epidemic[0]["region"])
# 显示某行
item = list_epidemic[1]
print("%s地区新增%s人,现有%s人,累计%s人。" % (item["region"], item["new"], item["now"], item["total"]))
print(f'{item["region"]}地区新增{item["new"]}人,现有{item["now"]}s人,累计{item["total"]}人。')
"""
    打印所有疫情信息,
    查找新增人数大于10的地区名称(将结果存入新列表)
"""
# 疫情信息
list_epidemic = [
    {
        "region": "台湾", "new": 16,
        "now": 2339, "total": 16931,
    },
    {
        "region": "陕西", "new": 182,
        "now": 859, "total": 1573,
    },
    {
        "region": "浙江", "new": 2,
        "now": 505, "total": 2008,
    },
]
for item in list_epidemic:
    print("%s地区新增%s人,现有%s人,累计%s人。" % (item["region"], item["new"], item["now"], item["total"]))

list_region = []
for item in list_epidemic:
    if item["new"] > 10:
        list_region.append(item["region"])
print(list_region)

五、用容器思维写代码

"""
    在终端中获取颜色(RGBA),打印描述信息,否则提示颜色不存在
    "R" -> "红色"
    "G" -> "绿色"
    "B" -> "蓝色"
    "A" -> "透明度"
"""
color = input("请输入颜色(RGBA):")
dict_color_info = {
    "R": "红色",
    "G": "绿色",
    "B": "蓝色",
    "A": "透明度"
}
# print(dict_color_info[color])
if color in dict_color_info:
    print(dict_color_info[color])
else:
    print("颜色不存在")
"""
    将列表中的数字累减
        list02 = [5, 1, 4, 6, 7, 4, 6, 8, 5]
    结果:-36
"""
list02 = [5, 1, 4, 6, 7, 4, 6, 8, 5]
result = list02[0]
for i in range(1, len(list02)):
    result -= list02[i]
print(result)

六、取最大值

"""
    在列表中查找最大值(不使用max,自定义算法实现)
    思路:
        假设第一个元素就是最大值
        依次与后面元素进行比较
        如果发现更大值,则替换
"""
list02 = [5, 3, 4, 6, 7, 4, 6, 8, 5]
max_value = list02[0]
for i in range(1, len(list02)):
    if max_value < list02[i]:
        max_value = list02[i]
print(max_value)

#print(max(list02))

七、容器while循环练习

"""
   彩票:双色球
    红色:6个  1--33之间的整数   不能重复
    蓝色:1个  1--16之间的整数
    1) 随机产生一注彩票(列表(前六个是红色,最后一个蓝色))
    2) 在终端中录入一支彩票
    要求:满足彩票的规则.
"""
import random

# 1) 随机产生一注彩票(列表(前六个是红色,最后一个蓝色))
list_ticket = []
# 前六个红球
while len(list_ticket) < 6:
    number = random.randint(1, 33)
    # for number in list_ticket:
    if number not in list_ticket:
        list_ticket.append(number)
# 第七个蓝球
list_ticket.append(random.randint(1, 16))
print(list_ticket)

# 2) 在终端中录入一支彩票
list_ticket = []
while len(list_ticket) < 6:
    # number = int(input("请输入第%d个红球号码:" % (len(list_ticket) + 1)))
    number = int(input(f"请输入第{len(list_ticket) + 1}个红球号码:"))
    if number in list_ticket:
        print("号码已经存在")
    elif number < 1 or number > 33:
        print("号码不在范围内")
    else:
        list_ticket.append(number)

while len(list_ticket) < 7:
    number = int(input("请输入蓝球号码:"))
    if number < 1 or number > 16:
        print("号码不在范围内")
    else:
        list_ticket.append(number)

print(list_ticket)

八、自定义排序算法

"""
    计算最值
        max_value = list02[0]
        for i in range(1, len(list02)):
            if max_value < list02[i]:
                max_value = list02[i]

    自定义排序算法
        升序:从小到大
        降序:从大到小
"""
list02 = [9, 3, 4, 6, 7, 4, 6, 8, 15]
# 1. 让第一个元素是最大值
"""
    for i in range(1, len(list02)):
        if list02[0] < list02[i]:
            # 因为替换,所以丢失了旧数据
            list02[0] = list02[i]
    print(list02)
"""
# --用第一个数,与后面进行比较,发现更大则交换
"""
for i in range(1, len(list02)):
    if list02[0] < list02[i]:
        # 因为交换,所以新旧数据都在
        list02[0], list02[i] = list02[i], list02[0]
print(list02) 
# 2. 让第二个元素是最大值
for i in range(2, len(list02)):
    if list02[1] < list02[i]:
        # 因为交换,所以新旧数据都在
        list02[1], list02[i] = list02[i], list02[1]
print(list02) 
# 3. 让第三个元素是最大值
for i in range(3, len(list02)):
    if list02[2] < list02[i]:
        # 因为交换,所以新旧数据都在
        list02[2], list02[i] = list02[i], list02[2]
print(list02)
"""
list02 = [9, 3, 4, 6, 7, 4, 6, 8, 15]
# (1)取(前面)数据
for r in range(len(list02) - 1):  # 0       1
    # (2)(与后面)作比较
    for c in range(r + 1, len(list02)):  # 1234    234
        # (3)找更大
        if list02[r] < list02[c]:
            # (4)则交换
            list02[r], list02[c] = list02[c], list02[r]
print(list02)
"""
    自定义排序算法
        升序:从小到大
"""
list02 = [9, 3, 4, 6, 7, 4, 6, 8, 15]
for r in range(len(list02) - 1):
    for c in range(r + 1, len(list02)):
        if list02[r] > list02[c]:
            list02[r], list02[c] = list02[c], list02[r]
print(list02)

在这里插入图片描述

"""
    --查找现有人数最大的地区信息(结果为字典)
    --根据现有人数对疫情信息降序(大->小)排列
"""
list_epidemic = [
    {
        "region": "台湾", "new": 16,
        "now": 2339, "total": 16931,
    },
    {
        "region": "陕西", "new": 182,
        "now": 859, "total": 1573,
    },
    {
        "region": "浙江", "new": 2,
        "now": 505, "total": 2008,
    },
]
max_value = list_epidemic[0]
for i in range(1, len(list_epidemic)):
    if max_value["now"] < list_epidemic[i]["now"]:
        max_value = list_epidemic[i]
print(max_value)

for r in range(len(list_epidemic) - 1):
    for c in range(r + 1, len(list_epidemic)):
        if list_epidemic[r]["now"] < list_epidemic[c]["now"]:
            list_epidemic[r], list_epidemic[c] = list_epidemic[c], list_epidemic[r]

print(list_epidemic)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值