函数使用x来编写首字母

时间:2013-10-21 01:44:59

标签: python

我的任务是编写一个函数,在我自己的首字母中打印。如果你没有首字母,它在中间打印x,我没有中间的首字母。他告诉我们继续硬编码我们要输入函数的列表。

所以我的函数抓取一个列表,列表中应该打印x。它遍历列表中的数字,检查它是否等于索引号,如果是,它打印ax,如果它不打印空白,则它将索引值减1,并重复该过程直到所有已检查列表中的数字。我应该做所有这些,以便函数遍历第二个列表的每一行(第一个列表),但我不能让它这样做所以我只是复制第一个列表中的第二个列表并运行所有第一个列表的函数。这是我的代码

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)

out put是

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

1 个答案:

答案 0 :(得分:0)

我没有机会测试这个,但我相信index=index-1是错误的。当您更改index时,表示您已完成此列并进入下一列。当你刚刚打印了一个x,或者你已经检查了整行之后,就会发生这种情况。代码现在在index走过的同时递减row

修改 三个更改使这更清晰和正确(在Python 2.7.3上测试)。

  1. 您无需遍历该行以查看index是否在行中。 in运算符会为您执行此操作!
  2. while循环始终是步骤11,10,...,0。因为边界永远不会改变,并且增量始终为-1,所以它是for循环的良好候选者。 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