【发布时间】:2013-06-24 17:10:54
【问题描述】:
我正在尝试在 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
【问题讨论】:
-
已排序。使用双 for 循环是解决方案,非常感谢 indmg。显然太多的while循环是我的问题,但我也尝试添加建议的打印和criteriaCount没有高于len(criteriaNames)。
标签: python list matrix indexing