【问题标题】:Understanding my case insensitive list comparison了解我的不区分大小写的列表比较
【发布时间】:2021-01-23 01:26:48
【问题描述】:

我正在阅读 Python 速成课程这本书。我正在做我主要设法弄清楚的练习之一。只有一点代码我似乎无法获得。

练习:

比较两个列表,current_users 之一,new_users 之一。确保它们不区分大小写。

我想知道为什么当我将current_users 转换为小写时,'andy657' 在第一次打印时仍然被读取为可用?

代码:

current_users = ['nedboy78', 'codingking678', 'johnnykapahala','jam95','python65','ANDY657']
new_users = ['hamlet56', 'python65', 'jam95','todds4','andy657']

current_users_convert = [current_user.lower() for current_user in current_users]

for new_user in new_users:
    if new_user in current_users:
        print("sorry username " + new_user + ' not available pick a new username')
    else:
        print("username " + new_user + ' is available')

    if new_user in current_users_convert:
        print("CANT USE " + new_user + " AS A USERNAME")

输出:

username hamlet56 is available
sorry username python65 not available pick a new username
CANT USE python65 AS A USERNAME
sorry username jam95 not available pick a new username
CANT USE jam95 AS A USERNAME
username todds4 is available
username andy657 is available
CANT USE andy657 AS A USERNAME

【问题讨论】:

  • print("username " + new_user + ' is available') 没有正确缩进到 else 子句中
  • 为什么不呢?你在任何情况下都没有那个 print 语句,所以它总是会执行。
  • 这段代码不会像写的那样编译。即使缩进是固定的,这两个if 语句在逻辑上也不是连接的,也不是不相交的。您可能希望将两个列表都小写,然后使用单个 if-else
  • 如果你想比较这个列表,你可以list(set(current_users_convert ) & set(new_users )),获取可用的用户名。
  • 另外,如果您还没有看到它,Python 速成课程练习的解决方案已经在线提供。这段代码看起来像是来自本书的第一版,该书的解决方案是here。第二版的解决方案是here

标签: python list case


【解决方案1】:

这是因为您的 else 条件在最后一个 if 条件之前执行。所以在这里我改变了顺序。

current_users = ['nedboy78', 'codingking678', 'johnnykapahala','jam95','python65','ANDY657']
new_users = ['hamlet56', 'python65', 'jam95','todds4','andy657']

current_users_convert = [current_user.lower() for current_user in current_users]
for new_user in new_users:
    if new_user in current_users:
        print(f'sorry username {new_user} not available pick a new username')

    elif new_user in current_users_convert:
        print(f"CANT USE {new_user} AS A USERNAME")

    else:
        print(f'username {new_user} is available')

输出:

username hamlet56 is available
sorry username python65 not available pick a new username
sorry username jam95 not available pick a new username
username todds4 is available
CANT USE andy657 AS A USERNAME

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 2013-03-11
    • 2020-03-28
    相关资源
    最近更新 更多