【问题标题】:(Python) I want to put the following for loop with return statement on a single line:(Python)我想将以下带有 return 语句的 for 循环放在一行上:
【发布时间】:2020-03-23 08:58:35
【问题描述】:

第一行代码是我尝试将以下三行放在一行中的失败:

return (False for char in pin if char not in "0123456789")

for char in pin:
    if char not in "0123456789":
        return False

如果pin 中的所有字符都是数字,我想返回True

【问题讨论】:

  • 您想为 有效 pin 返回什么? True?
  • 我不清楚你在问什么,你想检查char 的每个元素以确定它是否在字符串0123456789 中吗?

标签: python-3.x for-loop return boolean


【解决方案1】:

如果您想使用list comprehension,则必须使用[...] 而不是(...),如x = [False for char in pin if char not in "0123456789"]

但我猜你实际上需要检查指定pin 中的每个字符是否是数字。您可以使用 .isdigit() 函数来实现类似

if not pin.isdigit():
    // Handle the error

【讨论】:

  • isdigit 在这里不是一个好的选择。它将允许各种疯狂的 pin 像 "꘠꧓???"
  • 你确定isdigit() 就在这里吗,看起来 OP 正在尝试将char 的每个元素与一串数字进行比较。
  • @wim 如果有外语的人想用自己的语言输入他的密码,这可能是个好主意,对吧?如果这不是我们想要的,isdigit() 在这里当然是一个糟糕的选择。你有什么建议?
  • 我的建议是不要改变 OP 代码的行为,至少不要不提行为正在改变
【解决方案2】:

return [] == [0 for char in pin if char not in "0123456789"]

代码: [0 for char in pin if char not in "0123456789"] 如果满足此 for 循环,则返回 0。否则返回空数组。 因此,如果您将其与 [] 进行比较,那么您将得到正确/错误的答案。

【讨论】:

    【解决方案3】:

    此答案假定您要返回 True 以获得有效的 pin(所有字符都在“0123456789”中)和False 用于无效的 pin(一个或多个字符不在“0123456789”中)。

    解决此问题的一种方法是使用带有列表理解的内置 all() 函数。如果列表为空或列表中的每个值都是True,则all() 函数返回True。如果列表中出现一个或多个False 值,则返回False

    首先,要生成False 值列表,请使用方括号将表达式转换为list comprehension,如下所示:

    [False for char in pin if char not in "0123456789"]
    

    将此列表解析传递给all() 函数。这将在一行中完成,如下所示:

    return all([False for char in pin if char not in "0123456789"])
    

    如果列表为空(即所有字符都在"0123456789" 中),它将返回True。如果任何字符不在"0123456789" 中,它将返回False

    见: https://docs.python.org/3/library/functions.html#all

    【讨论】:

      猜你喜欢
      • 2011-08-26
      • 1970-01-01
      • 2011-08-17
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多