1

我正在尝试在python中编写决策矩阵,到目前为止,我已经设置了二维矩阵,设置列表以保存决策选项和标准的标题,获取(选项和标准的)数量和标题从用户那里获取,然后从用户那里获取标准和选项的值。

我想继续下一步,根据这些值做出决定,但我收到了这个错误:

Traceback (most recent call last): File "/home/michael/std/dev/python/DM/DM0.0.2.py", line 56, in <module> print "\nOut of 10, how do you rate option %s for criteria %s?" % (optionNames[optionCount], criteriaNames[criteriaCount]) IndexError: list index out of range

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

# 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
4

2 回答 2

0

如果在咆哮的 print 语句之前打印optionCount, criteriaCount, len(optionNames), , ,您会发现您很可能错误地处理了您的索引,或者您的列表没有按照您的预期填充。len(criteriaNames)*Names

查看代码,我敢打赌,它criteriaCount会高于len(criteriaNames). 只是有点赌博:)

于 2013-06-27T09:20:21.830 回答
0

据我了解,您想为每个标准和选项组合输入一个分数。

问题在于您的三个时间搞砸了索引。更简洁的方法是双 for 循环:

for option in xrange(num_options):
    for criteria in xrange(num_criteria):
        # read input
        Matrix[option][criteria] = score

对于更清晰的列表初始化,您可以使用

[0]*num_options

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

于 2013-06-27T09:26:44.220 回答