有什么办法可以缩短Python的if语句?

时间:2020-05-19 18:51:31

标签: python if-statement

我无法缩短CodingBat中关于Python问题的if语句。 问题是这样的:给定一个int数组,如果该数组中的前4个元素之一为9,则返回True。该数组的长度可能小于4。 我写的原始代码运行良好,看起来像这样:

def array_front9(nums):
  if len(nums) >= 4:
    count = 4
  else:
    count = len(nums)
  for n in range(count):
    if nums[n] == 9:
      return True
  return False

我试图缩短第2行和第4行之间的if和else:

def array_front9(nums):
    return count = 4 if len(nums) >= 4 else count = len(nums)
  for n in range(count):
    if nums[n] == 9:
      return True
  return False

但是,它在我更改后变成了无效的语法。我不确定我在哪里做错了。有什么方法可以缩短2号线和4号线之间的距离吗? 谢谢!

4 个答案:

答案 0 :(得分:4)

关于您的代码:

  • 缩进是错误的。第一个return语句的缩进为4,而for语句的缩进仅为2。
  • 第一个return语句不能同时是赋值。
  • if/else构造不需要第二次分配。只需将数字放在else块中。作业已经在该行的开头

因此您的代码成为

def array_front9(nums):
    count = 4 if len(nums) >= 4 else len(nums)
    for n in range(count):
        if nums[n] == 9:
            return True
    return False

还有一个更短的解决方案:

def array_front9(nums):
    return 9 in nums[0:4]

in是用于检查是否在数组中找到元素的关键字。通过切片[0:4],您可以将其限制为数组的前4个元素。如果数组较短,这仍然有效。

答案 1 :(得分:1)

类似的事情应该是可能的:

def array_front9(nums):
    count = 4 if len(nums) >= 4 else len(nums)
    return any(nums[n] == 9 for n in range(count))

答案 2 :(得分:1)

您无法在Python中返回作业:

In [14]: def func():
    ...:     return count = 4
  File "<ipython-input-14-918fc0e49446>", line 2
    return count = 4
                 ^
SyntaxError: invalid syntax

Thomas也是正确的,因为您的return语句后有代码,该代码被错误地缩进,并且即使返回Python也不会抱怨,因为它在返回后仍不会运行。

如果您想使用原始的三元想法:

In [20]: def array_front9(nums):
    ...:     return 4 if len(nums) >= 4 else len(nums)

In [21]: array_front9([1,2,3])
Out[21]: 3

In [22]: array_front9([1,2,3,4])
Out[22]: 4

In [23]: array_front9([1,2,3,4,5])
Out[23]: 4

答案 3 :(得分:0)

签出:https://jaxenter.com/implement-switch-case-statement-python-138315.html 这称为switch语句,这可以使else块更简单。