Python中容易出现逻辑错误-我的函数调用无法正常工作

Python中容易出现逻辑错误-我的函数调用无法正常工作,python,function,oop,csv,functional-programming,Python,Function,Oop,Csv,Functional Programming,我无法使我的doLogicForColumn5函数影响我的程序。CSV输出的第5列应该填入各种值,但都是相同的数字12.12 第14-27行具体来说,它们根本不起作用 非常感谢您的帮助 # -*- coding: utf-8 -*- import csv import string # for capwords date = "7/5/2015" monthlybudget = 100000 dailybudget = monthlybudget/30 #campaign variab

我无法使我的doLogicForColumn5函数影响我的程序。CSV输出的第5列应该填入各种值,但都是相同的数字12.12

第14-27行具体来说,它们根本不起作用

非常感谢您的帮助

     # -*- coding: utf-8 -*-
import csv
import string # for capwords
date = "7/5/2015"
monthlybudget = 100000
dailybudget = monthlybudget/30
#campaign variables
levels = [["1"], ["2"], ["3"], ["4"], ["5"], ["6"]]
language = [["english"], ["spanish"]]
variables = [["1"], ["2"]]
nouns = [["wordA1"], ["+wordA2"]]
adjectives1 = [["wordB1"], ["wordB2"]]
adjectives2 = [["wordC1"], ["wordC2"]]
def doLogicForColumn5(self): # budget
    self.column5 = dailybudget/36 
    if self.language == ["spanish"]: 
        self.column5 = self.column5 * .6
        if self.level == ["1"]:
            self.column5 = self.column5*.8
        else:
            self.column5 = self.column5*.1
    else: #if spanish
        self.column5 = self.column5*.4
        if self.level == ["1"]:
            self.column5 = self.column5*.2
        else:
            self.column5 = self.column5*.3
class Row(object):
    column1 = "column1"
    column2 = "column2"
    column3 = "column3"
    column4 = "column4"
    column5 = "budget"
    def __init__(self, level, language, noun, adjective1, adjective2, variable):
        self.level = level
        self.level = str(self.level)
        self.language = language
        self.language = str(self.language)
        self.noun = noun
        self.noun = str(self.noun)
        self.adjective1 = adjective1
        self.adjective1 = str(self.adjective1)
        self.adjective2 = adjective2
        self.adjective2 = str(self.adjective2)
        self.variable = variable
        self.variable = str(self.variable)
    def rowEntry(self, level, language, noun, adjective1, adjective2, variable):
        doLogicForColumn5(self)
        lol = [[self.column1], [self.column2], [self.column3], [self.column4], [self.column5]]
        lol[0] = self.column1
        lol[1] = self.column2
        lol[2] = self.column3
        lol[3] = self.column4
        lol[4] = self.column5
        file_writer.writerow([o for o in lol])
with open("test.csv", "wb") as test_file:
    file_writer = csv.writer(test_file)
    for a in range(0, len(levels)):
        for e in range(0, len(language)):    
            for y in range (0, len(nouns)):
                for x in range (0, len(adjectives1)):
                    for w in range (0, len(adjectives2)):
                        for n in range(0, len(variables)):
                            city = "n/a"
                            stateVersion = "n/a"
                            food = Row(levels[a], language[e], nouns[y], adjectives1[x], adjectives2[w], variables[n])                    
                            food.rowEntry(levels[a], language[e], nouns[y], adjectives1[x], adjectives2[w], variables[n])                    
第一:

所以a是一个数字。然后:

food = Row(levels[a],
所以levels[a]是一个类似于[1]的列表。然后,当您初始化一行时:

现在self.level是一个字符串。然后,在Dologicforc5列中:

回想一下,self.level在前面被转换为字符串。因此self.level永远不会等于[1]的列表。然而,它可能等于一个字符串['1'],因此与之相比更有意义。更好的是,将全球水平变成一个平面列表,如[1,2,3,4,5,6]。最好的选择是将级别设置为“123456”,并重构程序以使用更简单的结构

self.language和任何其他变量也是如此,这些变量已设置为较大列表中的单个元素列表


检查您的代码是否存在其他不必要的复杂性实例,因为这类事情最终会影响您。另一个例子是,doLogicForColumn5函数实际上应该只是行中的一个方法,正如评论者所建议的。

请使用itertools.product,这样我就不必看到您嵌套循环,因为任何deeperAlso def doLogicForColumn5self在您的类上下文中都不存在。。。。所以它只是一个自由函数,碰巧有一个参数,你把它命名为selfOhh,所以我应该把这个函数放在类里面?对不起,你说的itertools.product是什么意思?我不熟悉它,您必须将它定义为一个方法,以便它绑定到一个变量,因此有一个变量的实例可访问。对于另一个注释,您可以删除6个for循环,并在itertools.productlevels、language、名词、形容词1、形容词2中用1个for a、e、y、x、w、n循环替换它,变量非常感谢您的响应!我对你关于把变量转换成字符串的观点有点不理解。即使我将if self.level==[1]更改为if self.level='[1]',我最终得到的每一行都具有相同的值。至于将级别作为一个平面列表,不是吗?不,它目前是一个列表,其中每个元素本身就是一个列表。每个嵌套列表都包含一个字符串。由于您只需迭代“1”、“2”等,您只需将其设置为字符串“123456”,然后重构程序以使用更简单的结构。我不知道如何做到这一点,但我确实在寻找阻力最小的路径,让我的doLogicForColumn5函数正确地影响我的coumn5。关于这件事你能给我什么建议吗?问题是,“[1]”['1']. 当Python将对象强制转换为str时,它会尽可能地使用单引号来表示。这意味着您需要告诉程序使用适当的引号来期望某些东西,正如我在这个答案中指定的那样。
food = Row(levels[a],
self.level = level
self.level = str(self.level)
if self.level == ["1"]