0

私は、自分のイニシャルを内部に出力する関数を作成する任務を負っています。イニシャルがない場合は、真ん中に x が表示されます。私には真ん中のイニシャルがありません。彼は、関数に入力する予定のリストをハードコーディングするように言いました。

したがって、私の関数は、x を出力する列番号のリストを取得します。リスト内の数値を調べて、インデックス番号と等しいかどうかをチェックし、一致する場合は ax を出力し、そうでない場合は空白を出力し、インデックス値を 1 減らして、すべての値になるまでプロセスを繰り返します。リストの番号がチェックされました。関数が2番目のリストの各行(最初のリスト)を通過するようにすべてを行うことになっていますが、それを行うことができないので、最初のリストで2番目のリストを複製し、すべての最初のリストで関数を実行しました。これは私のコードです

import sys
# function thst takes each row of the namelist and determines where to print x
def oned (row) :

        index = 11            
        while index >= 0 :
            for numbers in row :
                if numbers == index :
                    sys.stdout.write('X')
                else :
                    sys.stdout.write(' ')
                index = index - 1
        print


#Main

namelist = [[11, 2, 1, 0],
            [11, 2],
            [11, 2],
            [11, 8, 5, 2, 1, 0],
            [11, 7, 6, 0],
            [11, 7, 6, 0],
            [11, 8, 5, 2, 1, 0]]

testrow0 = [11, 2, 1, 0]
testrow1 = [11, 2]
testrow2 = [11, 2]
testrow3 = [11, 8, 5, 2, 1, 0] #only prints 11, 2, 1, 0 needs 8, 5
testrow4 = [11, 7, 6, 0]       #only prints 11, 0 needs 7,6
testrow5 = [11, 7, 6, 0]       #skips over 7, 6 like other one
testrow6 = [11, 8, 5, 2, 1, 0] #skips over 8, 5 

oned (testrow0)
oned (testrow1)
oned (testrow2)
oned (testrow3)
oned (testrow4)
oned (testrow5)
oned (testrow6)

出力は

X        XXX
X        X  
X        X  
X        XXX
X          X
X          X
X        XXX

これは私が欲しいものですが、その間の x がありません。このエラーの原因が見つからないので、もし見つけたら教えてください。

出力を次のようにしたい:

X        XXX
X        X  
X        X  
X  X  X  XXX
X   XX     X
X   XX     X
X  X  X  XXX
4

1 に答える 1

0

これをテストする機会はありませんでしたが、index=index-1間違っていると思います。を変更するときindexは、この列を終了して次の列に進むことを意味します。これは、x を印刷した直後か、行全体をチェックした後に発生するはずです。indexコードは、 を通過すると同時にデクリメントするようになりましたrow

編集 3 つの変更により、これがよりクリーンで正しいものになります (Python 2.7.3 でテスト済み)。

  1. が行にあるかどうかを確認するために行を反復処理する必要はありませんindex。オペレーターが代行inいたします!
  2. ループは常に 11, 10, ..., 0 を繰り返します。境界は変化せず、増分は常に -1 であるため、代わりにループwhileの候補として適しています。を作りforます。 最初は必要な最後の番号のの番号、2 番目は増分 (増加するのではなく毎回減少) です。range(11,-1,-1)[11, 10, ..., 0]11-1-1
  3. そしてindex、よりわかりやすい名前に変更しました。

    def oned (row):
        for colindex in range(11,-1,-1):   # replaces the while loop
            if colindex in row:            # replaces the for loop
                sys.stdout.write('X')
            else:
                sys.stdout.write(' ')
        print
    
于 2013-10-21T01:53:38.173 に答える