我设法使代码正常工作,但我相信可以对其进行优化……很多。
输入是一串数字,用空格分隔。类似于-4 2 8 6
或1 2 3 4 5 6 7
必须找到与该condition a + b == c
匹配的3个数字。当'b'
始终位于'a'
和for every time the condition is met
的右侧时,以以下格式-'a + b == c'
在控制台上打印数字。如果没有一个匹配项,则打印“否”。
'b'
的唯一限制是与'a'
至少有1个索引。
这是我想出的。
lineOfNums = input('Line of numbers: ') # User input: example - 4 2 6 8
arrNums = lineOfNums.split()
conMet = False # Is the condition met at least once
for a in range(0, len(arrNums)):
for b in range(a + 1, len(arrNums)):
for c in range(0, len(arrNums)):
if int(arrNums[a]) + int(arrNums[b]) == int(arrNums[c]):
print(f'{arrNums[a]} + {arrNums[b]} == {arrNums[c]}')
conMet = True
if conMet == False: print('No')
首先,在创建arrNum
时执行一次整数转换,而不是每次循环都执行。
arrNum = [int(x) for x in lineOfNums.split()]
外部循环只需要转到len(arrNums)-1
,因为它需要在其右侧留出空间给B
。
for a in range(0, len(arrNums)-1):
for b in range(a + 1, len(arrNums)):
for c in range(0, len(arrNums)):
if arrNums[a] + arrNums[b] == arrNums[c]:
print(f'{arrNums[a]} + {arrNums[b]} == {arrNums[c]}')
conMet = True
您可以用itertools
完成,当然首先要转换为int
from itertools import combinations
# Convert to int
arr= [int(i) for i in arrNums]
# Get all the combinations
psums = {sum(i): i for i in combinations(arr, 2)}
# Then loop once
for i, v in enumerate(arr):
if v in psums:
print(f'{psums[v][0]} + {psums[v][1]} == {v}')