gpt4 book ai didi

Python 类型错误 : 'type' object does not support item assignment

转载 作者:行者123 更新时间:2023-12-02 06:54:35 24 4
gpt4 key购买 nike

我必须设计并实现一个 TwoSum 类。它应该支持以下操作:

  • add - 将数字添加到内部数据结构中。
  • find - 查找是否存在任何总和等于该值的数字。

这是我的代码:

class TwoSum(object):

dict = {}

def add(self,n):
dict[n] = n #TypeError: 'type' object does not support item assignment

def find(self,n):
for i in range(0,len(dict)+1):
if dict[i] == None:
continue

val = n - dict[i]
if dict[val] != None and val != i+1:
return True
return False

test = TwoSum()
test.add(1)
test.add(3)
test.add(5)
print(test.find(4)) # True
print(test.find(7)) # False

我收到错误消息

TypeError: 'type' object does not support item assignment for "dict[n] = n"

有什么帮助或建议吗?非常感谢!

最佳答案

这里有很多问题,我会尝试一一解决

数据结构

dict = {}

这不仅覆盖了 python 的字典(请参阅 mgilson 的评论),而且对于该项目来说这是错误的数据结构。您应该使用列表(如果您有唯一的无序值,则应使用集合)

使用数据结构

数据结构是一个实例变量,需要用self定义并在__init__函数内部。你应该使用这样的东西:

class TwoSum(object):
def __init__(self):
self.numbers = []

定义添加

def add(self,n):
dict[n] = n

将项目分配给字典并不是正确的方法。您应该将其附加到您的列表中。此外,您需要使用 self.variableName = value

附加到该实例的列表中

定义查找

这个范围是错误的,你需要一个嵌套范围,或者 itertools.combinations 因为你必须检查任何两个数字的总和是否等于某个值,pythons sum() 在这里很方便.

要循环遍历数字,您可以使用两个范围或 itertools.combinations

代码

import itertools

class TwoSum(object):
def __init__(self):
self.numbers = []

def add(self, num):
self.numbers.append(num)

def find(self, desiredSum):
for nums in itertools.combinations(self.numbers, 2):
if sum(nums) == desiredSum:
return True
return False


test = TwoSum()
test.add(1)
test.add(3)
test.add(5)
print(test.find(4))
print(test.find(7))
#True
#False

Def find 无需 itertools

def find(self, desiredSum):
for num1 in self.numbers:
for num2 in self.numbers:
if num1 + num2 == desiredSum and num1 != num2:
return True
return False

关于Python 类型错误 : 'type' object does not support item assignment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37758228/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com