Внутри функции twoSum
использование self
допустимо, поскольку это имя параметра функции. Это вводит в заблуждение , потому что обычно первый параметр с именем self
означает, что вы пишете метод класса, а здесь нет. Но это законно .
Но на верхнем уровне нет ничего с именем self
, поэтому, когда вы делаете это:
twoSum(self, nums, target)
… вы получите NameError
.
И неясно, что бы вы хотели, чтобы произошло здесь. Единственные вещи, которые вы определили в любом месте, это переменные nums
и target
и функция twoSum
. В любом месте нет значения, которое кажется подходящим первым аргументом для передачи twoSum
.
На самом деле, вы, кажется, не пользуетесь self
внутри функции.
Вы ссылаетесь на вещи с именами xelf.nums
и self.target
, что означает, что вы ожидали некоторый объект с атрибутами с именами nums
и target
, но вы не определили ни один класс, который имеет такие атрибуты (и есть ничего встроенного, что делает, конечно).
Между тем, у вас есть совершенно хорошие параметры с именами nums
и target
, которые почти наверняка вам действительно нужны здесь.
Также:
Я подумал, может быть, проблема в том, что я не использовал self в определении программы.
Нету; это не го; в Python вполне допустимо иметь переменную, параметр и т. д., которые вы никогда не используете. Обычно это плохая идея, и линтеры могут предупредить об этом, но это не приведет к ошибке.
Что еще более важно, ваша проблема является полной противоположностью этой ситуации: дело не в том, что вы определили self
и не использовали его, а в том, что вы не определили self
и попытались его использовать.
Пробовал две суммы (числа, цель) и ту же проблему.
Нет, у вас другая проблема. Важно прочитать сообщения об ошибках и понять, что они означают.
Когда Python говорит NameError: name 'self' is not defined
, он говорит вам, как решить проблему. Либо вам нужно где-то определить self
, либо не пытаться использовать self
. Нет автоматического способа исправить это - возможно, вы сделали опечатку и определили slef
вместо self
; может быть, вы хотели вызвать переменную self
, но назвали ее this
; может быть, есть более глубокая путаница, как в этом случае, и у вас даже не было переменной, чтобы использовать в первую очередь. Но главная проблема всегда в том, что вы пытаетесь использовать то, что никогда не определяли.
Когда Python говорит TypeError: 'twoSum(num, targets)' missing 1 required positional argument: 'target'
, также говорит вам, как решить проблему. Вы пытались использовать функцию, которая требует три аргумента, и вы дали только два. Опять же, автоматического исправления не существует - возможно, вы забыли аргумент, или вы включили дополнительный параметр, которого не должно быть в определении функции, или вы забыли значение по умолчанию для одного из ваших параметров, или вы можете вызвали неправильную функцию и т. д. Но главная проблема всегда заключается в том, что вы передаете неправильное количество аргументов.
Итак, способ исправить вашу программу, скорее всего:
- Удалите параметр
self
из определения twoSum
.
- Заменить каждые
self.nums
и self.target
внутри тела функции на nums
и target
.
- Удалить аргумент
self
из вызова функции.