【代码随想录python笔记整理】第十八课 · 开房门

前言:本笔记仅仅只是对内容的整理和自行消化,并不是完整内容,如有侵权,联系立删。

一、映射

       在之前两节中,我们依次介绍了哈希表的列表和集合,这节课我们介绍最后一种形式——映射。在数学中,我们把 x\rightarrow y 称为一种映射,而在计算机中,映射类似地指的是将一个元素键(key)与一个相对应的值(value)关联起来。打比方说:一个学生有一个固定的学号,这是一一对应的。

       在 Python 中,通常用字典 dict 实现映射这种数据结构。字典是用 { } 来包裹,每个键值对之间用逗号 ,分隔,具体我们可以看如下例子:

# 字典示例
dict = {
    "Li He": 901,
    "Xi Ran": 902,
}

       此外,也使用内置函数 dict ( ) 创建字典,如果想要给字典添加键值对,可以直接通过 dict [key] = value 的形式。

# 使用 dict ( ) 函数

# 创建一个空字典
my_dict = dict()
# 添加键值对
my_dict["mike"] = 99
my_dict["tom"] = 98
my_dict["jerry"] = 100

       如果需要删除字典中的键值对,我们可以使用 del ( ) 方法或者是使用 clear ( ) 方法。

# 删除键值对
dict1 = {
    "no1":1,
    "no2":2
}

del dict1["no1"] # 删除对应的键值对
dict1.clear() # 清空字典
del dict1 # 删除字典

       如果想要检查字典中的键是否存在,与之前一样是使用关键字 in 来判断,如果存在,则返回 true,否则返回 false。而在遍历字典中,我们常用的是 items ( ) 方法返回字典中的所有键值对的相应对象。

# 遍历字典
for key, value in dict1.items():
    print(f"key: {key},value: {value}")

二、利用所学解决问题

       针对这个问题,总体而言是比较简单的。但它十分综合,把我们所学的知识都用上了!

       首先,第一次输入是测试的数据组数,因此这里需要一个循环来确定输入的数据组数满足要求。接着,我们在每一个循环内部进行操作:

1、每组数据第一行为一个整数 n ,表示钥匙串上有多少把钥匙, 之后进行 n 行数据的输入,每行两个整数,第一个整数 k 表示钥匙编号,第二个整数 d 表示房门编号。

2、此时,所有输入的数据都已经被放置到字典中,我们要获取需要查询的房门编号,并判断房门编号是否在字典中,如果存在,输入对应的钥匙编号,如果不存在,输出对应的语句。

       完整代码如下:

# Open the suitable door

# 测试数据共有 n 组
n = int(input())

# 创建一个空字典
key_dict = dict()

# 定义一个变量用来判断能否打开
cons = False

# 总共循环 n 次
for _ in range(n):
    
    # 钥匙的数量
    n_key = int(input())
    
    # 循环依次输入键值对
    for _ in range(n_key):
        key, value = map(int, input().split())
        key_dict[key] = value

    # 房间编号
    room_num = int(input())

    # 遍历字典,寻找是否有满足要求的房间编号
    for ky, val in key_dict.items():
        if val == room_num:
            cons = True
            print(ky)
            break

    # 如果找不到的话,就按要求输出指令
    if !cons:
        print("Can't open the door")

    # 最后记得将字典清空,从而进入下一次循环
    key_dict.clear()
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值