0

我的任务是编写一个函数,该函数将在其内部打印我的姓名首字母。如果你没有首字母,它会在中间打印 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)

输出是

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

编辑 三处更改使其更清晰和正确(在 Python 2.7.3 上测试)。

  1. 您无需遍历该行即可查看是否index在该行中。in接线员会为你做的!
  2. 循环总是步长 11 , while10, ..., 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
    
于 2013-10-21T01:53:38.173 回答