使单个字符串成为列表的一部分

你们能帮帮我吗..我试图找到如何将单个字符串放入列表中的方法。


问题是这样的:


系统使用 validate_users 函数来检查用户列表是否有效。有效用户是至少 3 个字符长的用户。例如,['taylor', 'luisa', 'jamaal'] 都是有效用户。在这个例子中调用它时,有些地方是不对的。你能找出要解决的问题吗?


 def validate_users(users):

      for user in users:

        if is_valid(user):

          print(user + " is valid")

        else:

          print(user + " is invalid")

    

    validate_users("purplecat")

我试过但仍然没有得到正确的结果,


purplecat is valid

结果应该是这样的,但仍然喜欢


p is invalid

u is invalid

r is invalid

p is invalid

l is invalid

e is invalid

c is invalid

a is invalid

t is invalid

有人可以解释吗?


开满天机
浏览 79回答 4
4回答

largeQ

您将 'purplecat' 作为字符串传递,因此当循环通过时,它会将字符串的每个元素视为要迭代的一件事。尝试将其放入单元素列表中:validate_users(['purplecat'])

一只萌萌小番薯

问题是你在这里迭代一个字符串:for user in users但是users == "purplecat"。尝试这样调用您的函数:validate_users(["purplecat"])

小怪兽爱吃肉

在此示例中,您将字符串“purplecat”作为函数 validate_users 的参数传递。所以,用户=“紫猫”在 validate_users 函数中,您使用了迭代参数用户的 for 循环。在python中,如果对字符串类型的变量使用for循环,那么for循环会遍历字符串中的所有字符。如果你想得到像“purplecat is valid”这样的输出,那么你需要使用“validate_users(["purplecat"])”。在这种情况下,您传递了一个字符串列表,因此 validate_users 中的 for 循环将迭代列表中的所有字符串(在这种情况下,它只会迭代一次,因为列表只有 1 个元素)。

眼眸繁星

正如其他人所指出的那样,如果您想制作一个包含字符串的单元素列表,您可以使用字符串对象[my_string]在哪里,例如。my_string"purplecat"如果在参数中传递字符串,则有几个备选方案可以让您的函数更优雅地执行操作users。一种选择是接受字符串作为列表的替代,users如果变量不是列表,则将其重新分配给单元素列表:def validate_users(users):    if not isinstance(users, list):        users = [users]    # then carry on as before另一种选择是以更可预测的方式失败:def validate_users(users):    if not isinstance(users, list):        raise ValueError("users must be a list")    # then carry on as before然后,您可以编写函数的其余部分,而不必担心是否向您传递了列表以外的内容。在后一种情况下,由调用者确保它传入列表或处理任何ValueError.为简单起见,我在这里不考虑元组,尽管您可能希望接受元组作为列表的替代方案,例如    if not isinstance(users, list):你可以有    if not isinstance(users, (list, tuple)):
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python