Python 索引器:我做错了什么?

Python 索引器:我做错了什么?,python,list,matrix,indexing,Python,List,Matrix,Indexing,我试图用python编写一个决策矩阵,到目前为止,我已经做到了,设置二维矩阵,设置列表来保存决策选项和标准的标题,从用户那里获取选项和标准以及标题的数量,然后从用户那里获取标准和选项的值 我想进入下一步,根据这些值做出决定,但我得到了以下错误: 回溯最近一次呼叫上次: 文件/home/michael/std/dev/python/DM/DM0.0.2.py,第56行,in 打印\n共10页,您如何为选项%s的标准%s评分?%optionNames[optionCount],criteriaNam

我试图用python编写一个决策矩阵,到目前为止,我已经做到了,设置二维矩阵,设置列表来保存决策选项和标准的标题,从用户那里获取选项和标准以及标题的数量,然后从用户那里获取标准和选项的值

我想进入下一步,根据这些值做出决定,但我得到了以下错误:

回溯最近一次呼叫上次: 文件/home/michael/std/dev/python/DM/DM0.0.2.py,第56行,in 打印\n共10页,您如何为选项%s的标准%s评分?%optionNames[optionCount],criteriaNames[criteriaCount] 索引器:列表索引超出范围

我已经尝试了各种方法来修复它,使用一些流控制的样式重新排列了代码,等等,我想不出来。正如您可以从下面的完整代码中看到的,我已经包含了一些打印语句,以给自己一些关于代码到底发生了什么的反馈,这对我来说似乎是正确的。。有人能告诉我哪里出了问题吗?谢谢

# DM2 - Decision Matrix 2

print "Decision Matrix"
print "Please enter integers"
bl = "------------------------------"
print bl
# Get the ammount of options and criteria to work with
print "How many options do you have?"
num_options = int(raw_input("> "))
print bl

print "How many criteria do you have?"
num_criteria = int(raw_input("> "))
print bl

# Define some lists to keep names of options and criteria
optionNames = [0 for x in range(0, num_options)] 
criteriaNames = [0 for x in range(0, num_criteria)] 

# Define our matrix
Matrix = [[0 for x in range(0, num_criteria)] for x in range(0, num_options)] 

# Get names for options and criteria
count = 0
while count < num_options:
    modCount = count +1
    optionNames[count] = raw_input("Name option %s:" % modCount)
    count = count +1

print optionNames
print bl

count = 0
while count < num_criteria:
    modCount = count +1
    criteriaNames[count] = raw_input("Name criteria %s:" % modCount)
    count = count +1

print criteriaNames
print bl

# Print the matrix so far (should be empty)
print "The Matrix:"
print Matrix
print bl

print "\nNow we will talk about how well the options match the criteria."

#take scores out of 10 for the matrix
optionCount = 0
criteriaCount = 0

while criteriaCount < num_criteria * num_options +1:
    while optionCount < num_options:
        print "\nOut of 10, how do you rate option %s for criteria %s?" % (optionNames[optionCount], criteriaNames[criteriaCount])
        print Matrix
        print "opCount: ", optionCount
        print "critCount: ", criteriaCount
        criteriaScore = int(raw_input("> "))
        Matrix[optionCount][criteriaCount] = criteriaScore
        optionCount +=1
    criteriaCount +=1
    optionCount = 0
    while criteriaNames < num_criteria * num_options +1:
        while criteriaCount < num_criteria:
            print "\nOut of 10, how do you rate option %s for criteria %s?" % (optionNames[optionCount], criteriaNames[criteriaCount])
            print Matrix
            print "opCount: ", optionCount
            print "critCount: ", criteriaCount
            criteriaScore = int(raw_input("> "))
            Matrix[optionCount][criteriaCount] = criteriaScore
            optionCount +=1



# Calculate best decision based on the best scoring option
如果在发出汪汪声的print语句之前打印optionCount、criteriaCount、lenoptionNames、lencriteriaNames,您会发现您很可能是在错误处理索引,或者您的*名称列表没有按预期填充


看看代码,我敢打赌criteriaCount比lencriteriaNames高。不过这只是一场赌博:

据我所知,您希望为每个标准和选项组合输入一个分数

问题是你的三个while把索引搞砸了。更干净的方法将是双for循环:

for option in xrange(num_options):
    for criteria in xrange(num_criteria):
        # read input
        Matrix[option][criteria] = score
对于清理器列表初始化,您可以使用

[0]*num_options

如果我的理解是正确的,并且符合您的期望,那么现在尝试将此代码重写为while循环以理解错误。

。使用双for循环是解决方案,非常感谢。很明显,while循环太多是我的问题,但我也尝试添加建议的打印,criteriaCount没有超过lencriteriaNames。