Python 我的项目赢了';我不能接受我的职责。但是,该功能在控制台中运行良好

Python 我的项目赢了';我不能接受我的职责。但是,该功能在控制台中运行良好,python,Python,我正在写一个小程序,打印出前6任总统中第一个月和最后一个月的职位数量。我已经编写了一个名为presidents()的函数,但由于某些原因,我无法在我的程序中使用它。当我尝试在python控制台中运行presidents()函数时,效果非常好。但是当我试图在我的主程序中使用unsorted_pres list和numberPres变量时,我得到一个错误,它们没有定义 另外,为了进行测试,我复制了控制台中presidents()函数的输出。这是注释掉的两行 import csv def readc

我正在写一个小程序,打印出前6任总统中第一个月和最后一个月的职位数量。我已经编写了一个名为presidents()的函数,但由于某些原因,我无法在我的程序中使用它。当我尝试在python控制台中运行presidents()函数时,效果非常好。但是当我试图在我的主程序中使用unsorted_pres list和numberPres变量时,我得到一个错误,它们没有定义

另外,为了进行测试,我复制了控制台中presidents()函数的输出。这是注释掉的两行

import csv

def readcsv(file,y,m):
    with open(file) as f:
        reader = csv.reader(f)
        next(reader)
        list = []
        for row in reader:
            list.append(row)
    year = int(y)
    yIndex = year - 1974
    return list[yIndex][m]


def presidents():
    f = open("presidents.txt", 'r')
    unsorted_pres = []
    for line in f:
        pList = line.split(", ")

        name_raw = pList[0]
        name_split = name_raw.split(" ")
        name_list = name_split[-1:]
        name = "".join(name_list)
        pList.insert(0, name)
        pList.pop(1)

        years_raw = pList[1]
        years_split = years_raw.split("-")
        firstYear = years_split[0]
        lastYear = int(years_split[1]) - 1
        pList.insert(1, firstYear)
        pList.insert(2, lastYear)
        pList.pop(3)

        party_raw = pList[3]
        party_split = party_raw.split("\n")
        party = party_split[0]
        pList.insert(3, party)
        pList.pop(4)

        unsorted_pres.append(pList)

    return unsorted_pres, numberPres

print "Government Employment by President (thousands):"
print "%10s%15s%16s%15s%15s%16s" % ("President","Party","First Month","Last Month","Difference","Percentage")

presidents()
#unsorted_pres = [['Carter', '1977', 1980, 'Democrat'], ['Reagan', '1981', 1988, 'Republican'], ['Bush', '1989', 1992, 'Republican'], ['Clinton', '1993', 2000, 'Democrat'], ['Bush', '2001', 2008, 'Republican'], ['Obama', '2009', 2015, 'Democrat']]
#numberPres = 6 #len(unsorted_pres)

while numberPres > 0:
    for element in unsorted_pres:
        firstMonth = readcsv("government.csv", element[1],1)
        lastMonth = readcsv("government.csv", element[2],12)
        diff = int(lastMonth) - int(firstMonth)
        perc = diff / float(firstMonth) * 100
        print "%10s%15s%16s%15s%15s%15s%%" % (element[0],element[3],format(int(firstMonth), ",d"),format(int(lastMonth), ",d"),format(diff, ",d"), round(perc,1))
        numberPres -= 1
这是总统()使用的“president.txt”文件:


我可以看出你有两个问题。首先是
numberPres
似乎在任何地方都没有定义。您从函数返回它,但它从未定义过

其次,从函数返回
未排序的\u pres
numberPres
,但没有将它们分配给任何对象。您需要将返回值分配给以下内容:
unsorted\u pres,numberPres=presidents()

在你使用它之前

numberPres
不是在
presidents()
方法中声明的。你的作用域到处都是。@TigerhawkT3“作用域”是什么意思?是的,我是一个彻头彻尾的n00b,所以我的代码可能很糟糕…@cricket\u 007谢谢!但是那也不行。去读链接的副本,你就会明白我所说的范围是什么意思。这是非常彻底的。
James Earl Carter, 1977-1981, Democrat
Ronald Wilson Reagan, 1981-1989, Republican
George Herbert Walker Bush, 1989-1993, Republican
William Jefferson Clinton, 1993-2001, Democrat
George Walker Bush, 2001-2009, Republican
Barack Hussein Obama, 2009-2016, Democrat