как работает ввод аргументов в функцию?

class Solution:
    def twoSum(self, nums, target):
        solList = []
        for i in range (0, len(nums)):
            for j in range (i+1, len(nums)):
                if nums[i]+nums[j] == target:
                    solList = solList.append(i)
                    solList = solList.append(j)
                    return solList

nums = [2, 7, 11, 15]
target = 9
Solution.twoSum(nums, target)

первая задачка с литкода

как передавать nums и target в функцию twoSum

помогите новичку


Ответы (1 шт):

Автор решения: MarianD

Измените немножко вашу программу:

class Solution:
    def twoSum(self, nums, target):
        solList = []
        for i in range (0, len(nums)):
            for j in range (i+1, len(nums)):
                if nums[i]+nums[j] == target:
                    solList.append(i)
                    solList.append(j)
                    return solList

nums = [2, 7, 11, 15]
target = 9
Solution().twoSum(nums, target)

и вы получите вывод

[0, 1]

(очевидно, индексы чисел 2 и 7 в списке nums).


Объяснение:

  1. Метод .append() возвращает None («ничто»), значит, первая из ваших команд

                 solList = solList.append(i)
                 solList = solList.append(j)
    

    присвоит переменной solList значение None. Таким образом, в переменной solList уже не будет никакого списка, и вторая команда закончит программу ошибкой, потому что невозможно применить метод .append(j) к значению None.

    Решение:
    Метод .append() не возвращает новый список, он прямо меняет исходный:

                 solList.append(i)
                 solList.append(j)
    

     

  2. twoSum() это метод не для класса Solution, а метод для объектов этого класса.

    Значит, он не применяется прямо к классу:

    Solution.twoSum(nums, target)       # неправильно!
    

    Нужно сначала создать объект этого класса, к чему достаточно добавить за его имя скобки, и затем применить метод на таким образом созданный объект:

    Solution().twoSum(nums, target)
    
→ Ссылка