在这段代码中,我在列表中使用两个数字,并检查它是否等于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。
答案 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”。在许多情况下,对于“错误”的测试将通过False
或None
的值成功完成,因此您可能还是可以的。但是在任何情况下都强烈建议添加显式返回...这可以确保您的函数将始终返回布尔值(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.combinations
,any
)来避免编写所有算法-但是,正如其他用户所强调的那样,在您的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