2017-06-06 39 views
-2

我想蟒蛇紋知道我怎麼能在Python 3.X以下模式代碼:打印24多種不同的原材料,並在for循環

24 23 22 21 20 19 

13 14 15 16 17 18 

12 11 10 9 8 7 

1 2 3 4 5 6 

這是我的嘗試:

rows = 16 
for i in range(rows): 
    k = i*8+1 
    for j in range(k,k+8): 
     print '{0:4d}'.format(j), 
    print " "  
+0

行數= 16 對於i在範圍(行): K = 1 * 8 + 1 在範圍Ĵ(K,K + 8): 打印 '{0:4D}' 格式(j)的。 , print「」 – Dhrumil

+0

是的,它的15我被改變了 – Dhrumil

+0

你的標籤是'python-3.x',但是print語句只適用於python-2.x。你真的想要哪個?此外,您所需輸出的間距不一致。你想要什麼間距? –

回答

0

您所需輸出的間距不明確。我假設你想要每個數字取4個空格,就像你的代碼一樣。這是Python 3.6.1代碼,它使用多個範圍並避免列表,字典,理解和聯接,因爲您的代碼也是如此。這些功能可能會使代碼更加簡潔。此代碼使用布爾標誌變量和使用三元運算符的範圍。

rows = 4 
cols = 6 

increasing = True 
for j in range(rows * cols, 0, -cols): 
    increasing = not increasing 
    for k in range(j-cols+1, j+1) if increasing else range(j, j-cols, -1): 
     print('{0:4d}'.format(k), sep='', end='') 
    print() 

我得到的結果是:

24 23 22 21 20 19 
    13 14 15 16 17 18 
    12 11 10 9 8 7 
    1 2 3 4 5 6 

這裏是不使用布爾標誌變量,直接使用連續的最大值來決定,如果該行是一個版本遞增或遞減順序:

rows = 4 
cols = 6 

for j in range(rows * cols, 0, -cols): 
    for k in range(j-cols+1, j+1) if j // cols % 2 else range(j, j-cols, -1): 
     print('{0:4d}'.format(k), sep='', end='') 
    print() 

此代碼比我以前的代碼短兩行,但不那麼清晰。對於4行和6列,給出與我以前的代碼相同的輸出。但是,我以前的代碼始終打印第一遞減秩序,而這種代碼總是打印最後增加秩序。如果行數是奇數,則只會看到差異,並且問題描述不會清晰地表明您想要的內容。最後的代碼可以修改爲始終與我的第一個代碼一致,但這會使其更加複雜。

A Boolean value是一個真值,只有兩個可能的值,編碼到計算機中。在Python中,兩個值分別爲TrueFalse。該類型以George Boole之後的名字命名,他們首先創造了邏輯代數。 A flag variable是保存兩個可能值中的一個的變量,通常但不總是布爾值。它代表了系統的某些狀態,並將該狀態傳達給程序的各個部分。這就像老式的美國郵政信箱上的「旗幟」,它被提出來表明該郵箱包含外發郵件,並且被放低以顯示沒有外發郵件。許多鐵路系統都有類似的標誌 - 只有兩個州顯示/提出或不顯示/不提出。

在我的第一個代碼中,increasing是一個布爾標誌變量。它表示要打印「當前行」中的數字的方向 - True表示遞增順序,而False表示遞減順序。每條線的標誌都是顛倒的,以獲得所需的「蛇形圖案」。我在檢查任何行之前將其設置爲True(遞增順序),因此第一行打印的行將按降序打印。該標誌的狀態用於選擇行的適當範圍 - 行的兩個可能範圍具有相同的值,但順序不同。

在我的第二個代碼中,我通過檢查行中最大的數字j的值直接計算某一行的正確順序,從而避免了一個標誌變量。我將它除以列數,得到當前行的行號,其中1是最後一行。然後,通過在將行號除以2之後檢查剩餘行數,看看該行號是偶數還是奇數。所有這些都在表達式j // cols % 2中完成。如果該值爲奇數,則餘數爲1,並且Python considers any non-zero number to be "Truthy"並將該表達式視爲True。如果行號是偶數,則計算的餘數爲零,因此爲「Falsey」並被視爲False。所以我得到一個邏輯結果,根本不使用標誌變量或任何布爾值。正如我所說,這比我的第一個代碼更短,但更難理解。

+0

完美,但我們可以做到這一點沒有布爾標誌變量??你能向我解釋在這段代碼中究竟有什麼確切的布爾標誌變量嗎? – Dhrumil