Получение неполных данных при попытке добавить термины Фибоначчи в имя файла

#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 кажется, что он просто открывает файл и записывает a 0 , за которым следует пробел. Я полагаю, что если есть другое поведение, то да, его нужно было бы изменить (т. Е. continue Заменить часть записи …)