所以我有这个课程:
#!/usr/bin/python3
class MyClass(object):
def __init__(self, length):
self._list = length
def get(self, index):
try:
return self._list[index]
except IndexError:
return None
它接受一个列表并返回一个值,我认为是一个列表索引。我想要获得这个价值:
def my_function(a_list):
a_list = MyClass
for x in (10**p for p in range(1, 9)):
if a_list:
print(a_list)
def main():
length = my_function(MyClass([i for i in range(0, 543)]))
但我一直只获得列表的内存位置,我认为这应该返回一个int。
我希望这是一个可行的代码,但我正在努力,传递一个"对象"在课堂上,这对我没有任何意义。
这是我应该使用的测试:
def test_large_list():
s_list = My_Class([i for i in xrange(0, 100000)])
assert len(s_list._list) == list_length(s_list)
好的,这是我的完整功能,它完成了,我这样做的方式,以便第一行采取参数
#!/usr/bin/python3
#def list_length(single_method_list): This is what I am supposed to work with
from single_method_list import SingleMethodList
def my_function(): # This is how I have done it and it works.
a_list = MyClass([i for i in range(0, 234589)])
for x in (10**p for p in range(1, 8)):
if a_list.get(x):
print("More than", x)
first = x
else:
print("Less than", x)
last = x
break
answer = False
while not answer:
result = (first + last)/2
result = int(round(result))
print(result)
if s_list.get(result):
first = result
print('first', result)
else:
last = result
print('last', result)
if s_list.get(result) and not s_list.get(result + 1):
answer = True
print(result + 1)
my_function()
我不知道还有什么可以解释我被困在哪里,这是OOP的一部分,我不知道我在这里需要相同的结果,只是把它传递给函数而不是在我为完成算法所做的功能中创建它。
答案 0 :(得分:0)
你的班级做了其他事情。MyClass
旨在初始化时采用List
,因此命名length
不是一个好主意。
此类的get()
方法接受一个数字,并返回位于初始化self._list
中该特定索引处的元素。
你的逻辑应该是:
def my_function(a_list):
a_list = MyClass(a_list)
...
def main():
length = my_function([i for i in range(0, 543)])
答案 1 :(得分:0)
只是澄清一些你可能会有的误解。
Class不会返回任何内容。这是创建对象的蓝图。
什么可以返回值是方法(函数)。例如,如果要编写一个返回某个列表长度的方法:
def my_function(some_list):
return len(some_list)
或者在你的情况下:
def my_function(a_list):
return len(a_list._list)
请注意,您不应该调用变量list
。它是python中的内置函数,用于创建列表。
正如你所看到的,python中还有另一个内置函数len
,它返回list,tuple,dictionary等的长度。
希望这会有所帮助,尽管你仍然有点不清楚你想要实现的目标。