我目前正在做一个黑客问题。
目标是找到第一个n
斐波纳契数的立方体。用户输入n
。因此,例如,如果用户输入5,则输出应为[0,1,1,8,27],因为前五个斐波纳契数是[0,1,1,2,3]。
我已经写了以下代码:
cube = lambda x: x**3 # complete the lambda function
def fibonacci(n):
# return a list of fibonacci numbers
initiallist = []
for i in range(n):
if i < 2:
initiallist += [i]
else:
initiallist += [initiallist[-1] + initiallist[-2]]
return initiallist
我给出了以下代码(我无法编辑):
if __name__ == '__main__':
n = int(input())
print(map(cube, fibonacci(n)))
问题是我的代码在测试用例中失败了,因为它返回了一个map对象而不是一个列表。我怎样才能确保它返回一个列表呢?
答案 0 :(得分:4)
只需添加list()
,
if __name__ == '__main__':
n = int(input())
print(list(map(cube, fibonacci(n))))
我取消了我的评论,因为这是地图对象的解决方案,我不认为你可以在实际调用之前修改它。正如Ewoud所说,map
函数在python3和python2中的作用不同。
答案 1 :(得分:2)
你可以在它周围放置列表(...),所以
print(list(map(cube, fibonacci(n))))
(我还没有测试过剩下的代码)
编辑:如果您不想更改主要功能,您必须更改打印或地图功能或使用python 2。
答案 2 :(得分:1)
如果您无法编辑主功能,请使用Python2.X而不是Python3.x.在Python3.x中,map()函数返回迭代器。
答案 3 :(得分:0)
这应该比你需要的更多。为了以防万一,我添加了一些额外的位,如循环和输入验证。希望这有帮助
通用公式 F(n)= F(n-1)+ F(n-2)
获取用户输入
def get_user_input():
while True:
try:
nums_in_list = int(input("Enter the amout of numbers you want in the fibonacci list: "))
if nums_in_list < 1:
print("Please enter a number greater than 0.")
continue
return nums_in_list
except ValueError:
print ("Please enter an integer.")
根据用户输入创建Fabonacci列表
def genterate_list(user_input):
fab_list = [0]
if user_input == 1:
return fab_list
elif user_input == 2:
fab_list.append(1)
return fab_list
else:
count = 1
while user_input > count:
if count == 2:
fab_list.append(1)
elif count > 2:
fab_list.append(fab_list[count - 2] + fab_list[count - 3])
count += 1
return fab_list
def loop_program():
while True:
opts = ['y', 'Y', 'N', 'n']
loop = input("Would you like to run the program again (y/n): ")
if loop not in opts:
print("Please select (y/n): ")
continue
elif loop == 'N' or loop == 'n':
return "N"
else:
return "Y"
主要部分: 调用上面定义的函数 显示输出。
if __name__ == '__main__':
while True:
original = genterate_list(get_user_input())
print("Original Fabonacci")
for x in original:
print(x)
cube_funtion = lambda value : value ** 3
cube_result = map(cube_funtion, original)
print("Cubed Values")
list(map(print, cube_result))
if loop_program() == "N":
break
答案 4 :(得分:0)
我刚刚运行了它,并且在hackerank上成功运行 { cube = lambda x:x ** 3#完成lambda函数
def fibonacci(n):
# return a list of fibonacci numbers
initiallist = []
for i in range(n):
if i < 2:
initiallist += [i]
else:
initiallist += [initiallist[-1] + initiallist[-2]]
return initiallist
if __name__ == '__main__':
n = int(input())
print(list(map(cube, fibonacci(n))))
}