是否可以在for循环中返回True?

时间:2019-06-09 06:10:30

标签: python return-type

在这段代码中,我在列表中使用两个数字,并检查它是否等于K。唯一的问题是我无法返回True。

但是,如果我使用打印功能而不是返回功能,它将起作用。是否存在一些约束,我不能在for循环或条件中使用返回类型?

def funcSum():
    NumList = []

    Number = int(input("Please enter the total number of list elements: "))
    for i in range(1, Number + 1):
        value = int(input("Please enter the value of %d element : " %i))
        NumList.append(value)

    k = int(input("Enter the value of K: "))

    for i in range (Number):
        for j in range(i + 1, Number):
            if NumList[i] + NumList[j] == k:
                return True
                break
funcSum()

如果两个数字加到K,我想返回True,否则它将返回False。

3 个答案:

答案 0 :(得分:1)

正如其他人所说,以True的方式返回操作完全没有错。在我看来,如果您从未找到匹配项,那么您只是想返回False。我想你只想要这个:

def funcSum():
    NumList = []

    Number = int(input("Please enter the total number of list elements: "))
    for i in range(1, Number + 1):
        value = int(input("Please enter the value of %d element : " %i))
        NumList.append(value)

    k = int(input("Enter the value of K: "))

    for i in range (Number):
        for j in range(i + 1, Number):
            if NumList[i] + NumList[j] == k:
                return True

    return False

funcSum()

我拿走了你在那里的break。该行是无法访问的代码,因此是不必要的。

您的代码可以按原样工作,具体取决于您对返回值的处理方式。如果您从未匹配并返回“ True”,那么我的加法将导致返回“ False”而不是“ None”。在许多情况下,对于“错误”的测试将通过FalseNone的值成功完成,因此您可能还是可以的。但是在任何情况下都强烈建议添加显式返回...这可以确保您的函数将始终返回布尔值(True或False)。

答案 1 :(得分:0)

如果您想使用原始代码:

def funcSum():
    NumList = []

    Number = int(input("Please enter the total number of list elements: "))
    for i in range(1, Number + 1):
        value = int(input("Please enter the value of %d element : " %i))
        NumList.append(value)

    k = int(input("Enter the value of K: "))
    equal = False
    for i in range (Number):
        for j in range(i + 1, Number):
            if NumList[i] + NumList[j] == k:
                equal = True
                break
        if equal:
            break
    return equal

但是您也可以在最后一点:

    equal = False
    for i in list(NumList):
        for u in list(NumList):
            if i == u:
                equal = True
                break
        if equal :
            break

希望它会有所帮助:)

答案 2 :(得分:-2)

中断for循环不是一个好习惯-至少我要避免这种情况。因此,我认为一种更清晰的方法是利用某些现有工具(itertools.combinationsany)来避免编写所有算法-但是,正如其他用户所强调的那样,在您的break循环中使用for

import itertools

def func_sum2(num_list, k):
  """Return true if at least the sum of one combination of 2 elements in the list is equal to k.

  Use 
    - `itertools.combinations` to get the list of all combinations of 2 elements in the list
    - `any` to return true when at least one of the elements is Truth

  """
  return any(comb[0] + comb[1] == k 
         for comb in itertools.combinations(num_list, 2))

# Some tests
assert func_sum2([1,2], 3) == True
assert func_sum2([1,2], 4) == False
assert func_sum2([1,2,3], 5) == True

注意

我跳过了与获取用户输入相关的部分上方的答案,以便对其进行更有效的测试。因此,这种格式的原始代码是

def func_sum(num_list, k):
    answer = False

    for i in range (len(num_list)):
      for j in range(i + 1, len(num_list)):
        if num_list[i] + num_list[j] == k:
          answer = True
          break
    return answer

# Some tests
assert func_sum([1,2], 3) == True
assert func_sum([1,2], 4) == False
assert func_sum([1,2,3], 4) == True