#python #python-3.x #filenames #fibonacci #os.path
#python #python-3.x #имена файлов #фибоначчи #os.path
Вопрос:
У меня есть этот код о load_fib, write_fib, fib и return_fib. Мне дано число n, и мне нужно загрузить последнюю вычисленную последовательность fib и добавить n дополнительных терминов Фибоначчи в имя файла и вернуть последнее число Фибоначчи, записанное в файле. Мне было интересно, почему я получаю 0
for data вместо 0 1 1 2
when trying global_fib(3, filename)
and then with open(filename, "r") as f: ... data = f.read()
.
fib_called = False
def global_fib(n, filename):
global gf
gf = load_fib(filename)
i = 0
write_fib(filename)
while i < n:
fib()
write_fib(filename)
i = 1
return return_fib()
import os
def fib():
global fib_called
if len(gf) == 1:
gf.append(1)
else:
gf.append(int(gf[-1] gf[-2]))
fib_called = not fib_called
def write_fib(filename):
global fib_called
if fib_called == True:
filename.open('w')
filename.write(str(gf[-1]) ' ')
fib_called = not fib_called
import os.path
def load_fib(filename):
if os.path.exists(filename):
filename.open('r')
content == filename.read()
return list(content)
else:
f = open(filename,'w')
f.write('0' ' ')
return [0]
def return_fib():
return gf[-1]
Ответ №1:
В вашей load_fib
функции есть опечатка при назначении переменной, содержащей данные файла —
def load_fib(filename):
if os.path.exists(filename):
filename.open('r')
content == filename.read() # <-- this line
return list(content)
Должно быть изменено с double equals (который используется для проверки на равенство)
content == filename.read()
К одиночным равенствам (присвоение)
content = filename.read()
Комментарии:
1. Спасибо! но я все равно получил ‘0’ вместо ‘0 1 1 2’ для global_fib (3, filename). Нужно ли мне также изменять другую часть load_fib?
2. В настоящее время в
else
частиload_fib
кажется, что он просто открывает файл и записывает a0
, за которым следует пробел. Я полагаю, что если есть другое поведение, то да, его нужно было бы изменить (т. Е.continue
Заменить часть записи …)