2017-06-06 14 views
-2

用と異なる生と蛇パターンの中で私は、パターン以下のpython 3.xの中でコーディングできる方法を知りたい:プリント24数は、ループ

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

行=範囲のI 16 (行): K = i *が範囲内のjについて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のコードでは、複数の範囲を使用し、リスト、辞書、補完、および結合を避けます。コードもそうです。これらの機能により、コードがより簡潔になる可能性があります。このコードでは、ブール値フラグ変数と3進演算子を使用する範囲を使用します。

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() 

このコードは2行短くても私の前のコードよりはっきりしていません。私の前のコードと同じ出力を与える4行6列の場合。このコードは常に昇順最後行を印刷しながら、しかし、私の以前のコードは常に、最初行を印刷します。行の数が奇数で、問題の説明でわかりやすくなっていない場合にのみ違いが表示されます。この最後のコードは、最初のコードと常に一致するように変更することができますが、それはより複雑になります。

Boolean valueは、コンピュータにエンコードされた2つの値しかない真理値です。 Pythonでは、2つの値はTrueFalseです。タイプは、最初に論理の代数を作ったGeorge Booleにちなんで命名されます。 A flag variableは、2つの可能な値の1つを保持する変数ですが、必ずしもブール値ではありません。これは、システムのある状態を表し、その状態をプログラムの一部に伝えます。これは、ボックスに送信メールが含まれ、送信メールが表示されないことを示すために提起された昔ながらのアメリカの郵便箱の「旗」のようなものです。多くの鉄道システムには同様のフラグがあり、2つの状態のみが表示され、表示されたり表示されたり表示されたりしませんでした。

私の最初のコードでは、increasingはブールフラグ変数です。これは、「現在の行」の数字が印刷される方向を表します。Trueは昇順を意味し、Falseは降順を意味します。このフラグは、各行で反転され、目的の「スネークパターン」が得られます。行を調べる前にTrue(昇順)に設定して開始するので、最初に印刷される行は降順で印刷されます。そのフラグの状態は、行の適切な範囲を選択するために使用されます。行の可能な2つの範囲は、同じ値ではあるが異なる順序です。

私の2番目のコードでは、行内の最大数であるjの値を調べて、行の正しい順序を直接計算してフラグ変数を回避しました。これを列の数で割って、現在の行の行番号を返します。ここで、1が最後の行です。行番号を2で割った後に余りを調べることによって、行番号が偶数か奇数かを確認します。すべては式j // cols % 2で行われます。その値が奇数の場合、剰余は1で、Python considers any non-zero number to be "Truthy"であり、その式はTrueと扱われます。行番号が偶数の場合、計算された剰余はゼロであり、したがって「偽」であり、Falseとして扱われます。だから私は、フラグ変数やブール値を全く使わずに論理的な結果を得る。私が言ったように、これは私の最初のコードよりも短く、理解するのが難しいです。

+0

パーフェクトですが、ブールフラグ変数なしでこれを行うことはできますか?このコードで正確なブールフラグ変数が何をしているのかを私に説明できますか? – Dhrumil

関連する問題