2013-10-21 38 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 –