pionrrt 发表于 2023-6-28 16:42:26

判断键是否存在返回的为什么是False

想问一下,为什么在这段代码中,当我判断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_password
      print("恭喜,注册成功")
register()

isdkz 发表于 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=re_password# 注意这里我们用了int()函数
      print("恭喜,注册成功")
register()

请注意,这段代码假设用户输入的总是一个整数。如果用户输入的不是整数, int(re_name)会抛出ValueError 。因此,你可能需要添加一些错误处理代码以确保输入的是有效的整数。

sfqxx 发表于 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 = re_password
      print("恭喜,注册成功")

register()

修正方案包括以下改动:

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

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

请注意,根据您的代码和问题描述,我假设输入的用户名是整数类型与字典键相匹配。如果输入的用户名是字符串类型,则需要相应调整代码逻辑。另外,在实际开发中,还需要加入适当的异常处理和错误检测机制,以确保代码的健壮性。
页: [1]
查看完整版本: 判断键是否存在返回的为什么是False