Python

Задание с LeetCode через Python3

Сама задача находится на простейшем уровне, вот она собственно: Вам предлагается создать функцию, которая принимает два параметра. Первый параметр, nums, представляет собой массив чисел. Второй параметр, target – это одно число. Выходные данные функции должны быть двухэлементным массивом, который представляет собой пару чисел в nums, которые при суммирование равны target.
Естественно я создал нужную функцию, которая спокойно работает, вот только один момент меня озадачил, в VSCode вылетает ошибка:
Operator "+" not supported for types "int | None" and "int | None"
Operator "+" not supported for types "int" and "None"
Operator "+" not supported for types "None" and "int"
Operator "+" not supported for types "None" and "None"

Сам код выглядит так:
def twosum(nums: list[int], target: int):
nums_dict = dict(enumerate(nums))
for i in nums_dict:
for o in nums_dict:
if nums_dict.get(i) + nums_dict.get(o) == target and i != o:
return [i,o]

Он работает, можете проверить, но что за ошибка тогда?
IL
Iurie Lapicus
167
 def twosum(nums, target):
for i in range(len(nums) - 1):
for j in range(i + 1, len(nums)):
if nums[i] + nums[j] == target: return [nums[i], nums[j]]
И никаких словарей.
Иван Хроменков
Иван Хроменков
78 272
Лучший ответ
Ошибки, которые вы видите, связаны с возможностью наличия значения `None` в переменных `nums_dict.get(i)` и `nums_dict.get(o)`.

Проблема заключается в том, что метод `.get()` словаря возвращает значение по указанному ключу, но если ключа нет в словаре, то он возвращает значение `None`. При сложении `None` с числом возникает ошибка, поскольку оператор `+` не поддерживает сложение `None` с числом.

Для решения проблемы вам следует добавить проверку наличия значения в словаре перед сложением. Можно использовать условные выражения или проверку на равенство `None` для предотвращения возникновения ошибок.

Вот исправленный код с добавленными проверками:
```python
def twosum(nums: list[int], target: int):
nums_dict = dict(enumerate(nums))
for i in nums_dict:
for o in nums_dict:
num1 = nums_dict.get(i)
num2 = nums_dict.get(o)
if num1 is not None and num2 is not None and num1 + num2 == target and i != o:
return [i, o]
```

Теперь код будет работать без ошибок, и вы получите ожидаемый результат.
Erkin Niyazov
Erkin Niyazov
1 217
Erkin Niyazov def twosum(nums: list[int], target: int):
nums_dict = dict(enumerate(nums))
for i in nums_dict:
for o in nums_dict:
num1 = nums_dict.get(i)
num2 = nums_dict.get(o)
if num1 is not None and num2 is not None and num1 + num2 == target and i != o:
return [i, o]
Iurie Lapicus Спасибо за помощь
def twosum(nums: list[int], target: int):
nums_dict = dict(enumerate(nums))
for i in nums_dict:
for o in nums_dict:
if nums_dict.get(i, 0) + nums_dict.get(o, 0) == target and i != o:
return [i, o]

# Пример использования функции
nums = [2, 7, 11, 15]
target = 9
result = twosum(nums, target)
print(result)
B@)(@ !
B@)(@ !
528
Iurie Lapicus Спасибо за более облегченное решение