【问题标题】:My ussername checker keeps saying all names are available, despite if/else test我的用户名检查器一直说所有名称都可用,尽管进行了 if/else 测试
【发布时间】:2020-09-17 12:31:56
【问题描述】:

我正在尝试使用 if-elif-else 语句制作一个简单、小型的练习程序来检查用户名。

current_users = ['Enrique', 'Jose', 'Pablo', 'John', 'Jake']
new_users = ['Mike', 'Tom', 'Bowser', 'John', 'Howard', 'Ben']

'''for user in current_users:
        user = user.lower()
        print(user)

   for user in new_users:
        user = user.lower()
        print(user)
'''


for user in new_users:
    if user.lower() == current_users:
        print(f"{user}: That username is taken.")
    else:
        print(f"{user}: That username is available.")

我希望它为 new_user 列表和 current_user 列表中的用户名打印消息“使用该用户名”,但是当我在 Sublime 文本编辑器中运行它们时,它们都评估 True。

我知道这是一个逻辑错误,因为没有给出实际的错误消息,但我还不能完全看到它。

我尝试通过检查 new_users 列表中的用户名是否不在 current_users 列表中来反转循环。

如您所见,我已尝试将所有用户名更改为小写,看看是否有帮助,但没有。

【问题讨论】:

  • 它无法给出您预期的结果,因为您正在将相等性与列表对象进行比较。将== 交换为in。您想测试一个集合的成员资格,而不是将其与整个集合进行比较
  • current_users 是一个列表;它永远不等于一个名字。

标签: python for-loop if-statement logic


【解决方案1】:

当您在列表中查找值时,请使用“in”运算符。

    current_users = ['Enrique', 'Jose', 'Pablo', 'John', 'Jake']
    new_users = ['Mike', 'Tom', 'Bowser', 'John', 'Howard', 'Ben']


    for user in new_users:
        if user in current_users:
            print(f"{user}: That username is taken.")
        else:
            print(f"{user}: That username is available.")

【讨论】:

  • 代表我的菜鸟错误。谢谢你,拉克什。
【解决方案2】:

问题是您将字符串与字符串列表进行比较 user.lower() = current_user

此外,您将user.lower()user 进行比较。

例子意味着"Jhon".lower() == "Jhon"会给你False

试试这个:

创建一个current_user 的临时列表,所有名称都小写 然后检查它是否已经被占用或可用。

current_users = ['Enrique', 'Jose', 'Pablo', 'John', 'Jake']
new_users = ['Mike', 'Tom', 'Bowser', 'John', 'Howard', 'Ben']

t_current_user = [x.lower() for x in current_users]

for user in new_users:
    if user.lower() in t_current_user:
        print(f"{user}: That username is taken.")
    else:
        print(f"{user}: That username is available.")

【讨论】: