Почему эта функция суммы двух чисел возвращает «None» вместо [-1, 11]? - PullRequest
0 голосов
/ 17 июня 2020
def twosum(array, targetSum):
    for i in range(len(array) - 1):
        firstNum = array[i]
        for j in range(i + 1, len(array)):
            secondNum = array[j]
            if firstNum + secondNum == targetSum:
                return sorted(firstNum, secondNum)

if __name__ == '__main__':
    print(twosum(['3', '5', '-4', '8', '11', '1', '-1', '6'], 10))

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Ваша основная проблема в том, что вы обрабатываете строки как целые числа. Однако большая часть сложности вашей функции уже реализована в стандартной библиотеке в виде itertools.combinations.

from itertools import combinations


def twoSum(array, target):
    for x, y in combinations(map(int, array), 2):
        if x + y == target:
            return [x, y] if x <= y else [y, x]  # sorted is overkill here
0 голосов
/ 17 июня 2020

Проблема в том, что элементы в array были str, вы можете преобразовать их в int, а функция сортировки выполняет итерацию, поэтому вы можете добавить оба числа в список.

def twosum(array, targetSum):
    for i in range(len(array) - 1):
        firstNum = array[i]
        for j in range(i + 1, len(array)):
            secondNum = array[j]
            #print(firstNum, secondNum, firstNum + secondNum)
            if firstNum + secondNum == targetSum:
                return sorted([firstNum, secondNum])

if __name__ == '__main__':
    print(twosum([int(i) for i in ['3', '5', '-4', '8', '11', '1', '-1', '6']], 10))

Вывод

[-1, 11]
...