2013-10-21 40 views
0

我的任务是编写一个函数,它将自己打印我的首字母缩写。如果您没有首字母缩写,则会在中间打印x,我没有中间首字母。他告诉我们继续前进,并硬编码我们要输入到函数中的列表。函数使用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 

回答

0

我还没有机会测试这一点,但我相信index=index-1是错误的。当您更改index时,您的意思是说您已完成此专栏并正在进入下一专栏。这应该发生在你刚刚打印一个x时,或者在你检查完整行之后。代码现在在步行通过row的同时递减index

编辑 三个变化使得这个更清洁和正确(在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 
    
+0

我尝试过了,它只是抬高了整个代码,虽然你说的话让SENCE –