1

Pythonで決定マトリックスをコーディングしようとしています.これまでのところ、2次元マトリックスを設定し、決定オプションと基準のタイトルを保持するリストを設定し、(オプションと基準の)量とタイトルを取得しています.次に、ユーザーから基準とオプションの値を取得します。

これらの値に基づいて決定を行い、次のステップに進みたいのですが、次のエラーが発生しています。

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

私が理解している限りでは、各基準とオプションの組み合わせのスコアを入力したいと考えています。

問題は、インデックス作成を台無しにする 3 つの while にあります。よりクリーンなアプローチは、二重の 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 に答える