Недавно я задал вопрос программирования для предварительного собеседования в определенной компании. Вопросы были:
Создайте приложение django, управляемое тестами, конечно, чтобы показать последовательность Фибоначчи миру. Приложение должно взять порядковый номер и отобразить полученную последовательность Фибоначчи. Кроме того, должна быть страница, которая показывает самые последние сгенерированные последовательности. Кроме того, Фибоначчи немного нетерпелив и не хочет ждать вечно, поэтому убедитесь, что вы предпринимаете шаги для обеспечения эффективной работы вашего веб-сервера.
Я придумал следующее:
from django.views.generic.simple import direct_to_template
from django.http import Http404
LARGEST_SEQUENCE = [0,1]
LARGEST = 1
LATEST = []
def fib(n):
"""Calculate the nth fibonacci sequence"""
global LARGEST
if n > LARGEST:
while n > LARGEST:
next = LARGEST_SEQUENCE[LARGEST] + LARGEST_SEQUENCE[LARGEST-1]
#print 'appending ', next
LARGEST_SEQUENCE.append(next)
LARGEST += 1
return LARGEST_SEQUENCE
else:
return LARGEST_SEQUENCE[0:n+1]
def latest(request):
results=[]
for n in LATEST:
result = fib(n)
results.append((n,result))
return direct_to_template(request, 'latest.html', {'results':results})
def index(request):
if request.method=="POST":
try:
n=int(request.POST.get('n'))
except:
return Http404
result = fib(n)
if len(LATEST) >= 5:
LATEST.pop()
LATEST.insert(0,n)
else:
result = None
return direct_to_template(request, 'base.html', {'result':result})
«Последний» вид - моя вторая версия, потому что первая версия не работала согласованно. Исходная версия хранила результат из «index» в LATEST. LATEST изначально был списком последовательностей fib (списков) вместо списка недавних значений N.
Полагаю, мой главный вопрос заключается в том, плохо ли хранить наибольшую последовательность fib, сгенерированную во время выполнения, в файле views.py? Я знаю, что это не является постоянным, но инструкции никогда не давали подробностей о том, как все должно быть сделано. Как вы думаете, ребята, и как бы вы подошли к проблеме?
Спасибо, ребята!