首页 > 解决方案 > 在我引用之前未分配全局变量的问题

问题描述

我有这个关于斐波那契数列的代码,并将 n 个斐波那契数写入文件。我想知道为什么我在这里得到一个未绑定的本地错误。它说我在赋值之前引用了变量 fib_call 。

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():
    if len(gf) == 1:
        gf.append(1)
else:
    gf.append(int(gf[-1] + gf[-2]))
fib_called = not fib_called    


def write_fib(filename):
    if fib_called == True:
        filename.open('w')
        filename.write(str(gf[-1]) + ' ')
    fib_called = not fib_called


def load_fib(filename):
    if os.path.exists(filename):
        filename.open('r')
        content == filename.read()
        return list(content) 
    else:
        f = open("newfile",'w')
        f.write('0' + ' ')
        return [0]   

def return_fib():
    return gf[-1]    

标签: python

解决方案


您需要添加global fib_calledfibwrite_fib功能。

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


def load_fib(filename):
    if os.path.exists(filename):
        filename.open('r')
        content == filename.read()
        return list(content) 
    else:
        f = open("newfile",'w')
        f.write('0' + ' ')
        return [0]   

def return_fib():
    return gf[-1]   

推荐阅读