【问题标题】:IndexError: What am I doing wrong?IndexError:我做错了什么?
【发布时间】: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


【解决方案1】:

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

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

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

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

[0]*num_options

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

【讨论】:

    【解决方案2】:

    如果您在发出咆哮的打印语句之前打印optionCountcriteriaCountlen(optionNames)len(criteriaNames),您会发现您很可能错误地处理了您的索引,或者您的*Names 列表'没有像你期望的那样填充。

    看看代码,我敢打赌criteriaCountlen(criteriaNames) 更高。只是有点赌博:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-19
      • 2011-06-01
      • 1970-01-01
      • 2021-04-14
      • 2021-04-19
      • 2017-03-13
      • 2017-01-18
      • 1970-01-01
      相关资源
      最近更新 更多