鱼C论坛

 找回密码
 立即注册
查看: 1631|回复: 2

[已解决]判断键是否存在返回的为什么是False

[复制链接]
发表于 2023-6-28 16:42:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
想问一下,为什么在这段代码中,当我判断2是否在字典的键里,它直接执行了else命令(明明2是在keys里的)
ku={2:"ddd",3:222}
def register():
    re_name=input("请输入用户名:")
    if re_name in ku.keys():
        print("该用户已注册")
        re_name=input("请输入用户名:")
    else:
        re_password=input("请输入密码:")
        ku[re_name]=re_password
        print("恭喜,注册成功")
register()
截图未命名.jpg
最佳答案
2023-6-28 16:45:17
在你的代码中,变量  re_name  会被  input()  函数赋值,这个函数总是返回一个字符串类型的数据。而你的字典  ku  中的键是整数。这就导致了当你输入 '2' 时,它与字典中的键 2(整数类型)进行比较,并没有匹配,因此执行了 else 子句。

你可以尝试将输入的  re_name  转换为整数,然后进行键的匹配,如下:
ku={2:"ddd",3:222}
def register():
    re_name=input("请输入用户名:")
    if int(re_name) in ku.keys():  # 注意这里我们用了int()函数
        print("该用户已注册")
        re_name=input("请输入用户名:")
    else:
        re_password=input("请输入密码:")
        ku[int(re_name)]=re_password  # 注意这里我们用了int()函数
        print("恭喜,注册成功")
register()
请注意,这段代码假设用户输入的总是一个整数。如果用户输入的不是整数, int(re_name)  会抛出  ValueError 。因此,你可能需要添加一些错误处理代码以确保输入的是有效的整数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-28 16:45:17 | 显示全部楼层    本楼为最佳答案   
在你的代码中,变量  re_name  会被  input()  函数赋值,这个函数总是返回一个字符串类型的数据。而你的字典  ku  中的键是整数。这就导致了当你输入 '2' 时,它与字典中的键 2(整数类型)进行比较,并没有匹配,因此执行了 else 子句。

你可以尝试将输入的  re_name  转换为整数,然后进行键的匹配,如下:
ku={2:"ddd",3:222}
def register():
    re_name=input("请输入用户名:")
    if int(re_name) in ku.keys():  # 注意这里我们用了int()函数
        print("该用户已注册")
        re_name=input("请输入用户名:")
    else:
        re_password=input("请输入密码:")
        ku[int(re_name)]=re_password  # 注意这里我们用了int()函数
        print("恭喜,注册成功")
register()
请注意,这段代码假设用户输入的总是一个整数。如果用户输入的不是整数, int(re_name)  会抛出  ValueError 。因此,你可能需要添加一些错误处理代码以确保输入的是有效的整数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-28 16:50:03 | 显示全部楼层
根据您提供的代码和问题描述,可以看出存在以下问题:

1. 在使用字典 (`ku`) 进行用户名查重时,将用户输入的 `re_name` 作为键来判断是否已经注册。但是,根据代码中的逻辑,输入的 `re_name` 实际上是字符串类型,而不是之前定义的整数类型键。因此,在第一个检查语句 `if re_name in ku.keys():` 中,无论输入什么用户名,都会被判断为不在字典的键里。

2. 在 else 分支中,将用户输入的 `re_name` 和密码 `re_password` 作为字典的键和值进行添加。然而,由于之前的键判定失败,新的用户名实际上还是会替代原有的键对应的值,而不是新增加一个键值对。

针对上述问题,我们可以进行如下修正:
ku = {2: "ddd", 3: 222}

def register():
    re_name = input("请输入用户名:")
    if int(re_name) in ku.keys():
        print("该用户已注册")
        return  # 若已注册,直接返回,不再执行后续代码
    else:
        re_password = input("请输入密码:")
        ku[int(re_name)] = re_password
        print("恭喜,注册成功")

register()

修正方案包括以下改动:

1. 在键判定部分,将用户输入的 `re_name` 转换为整数类型,并与字典的键进行比较,以实现检测用户名是否已经注册的功能。

2. 在 else 部分中,将用户输入的 `re_name` 转换为整数作为字典的键,并将输入的 `re_password` 作为对应的值进行添加。

请注意,根据您的代码和问题描述,我假设输入的用户名是整数类型与字典键相匹配。如果输入的用户名是字符串类型,则需要相应调整代码逻辑。另外,在实际开发中,还需要加入适当的异常处理和错误检测机制,以确保代码的健壮性。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 15:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表