2016-08-24 21 views
0

この複合input()の背後にあるメカニックスを理解しようとしているのですが、ループ& list-comprehension; Codegamingの "MarsRover"パズルから。シーケンスは、6999ユニット幅(x軸)の領域にトポロジの切り抜きを表す2D線を作成します。理解。私は範囲内で、x、y = [int(i)in i .... Python3

わかりやすく、私の元の質問は、広範になっていた。私は、リストの理解を基本的に理解しています。私はfor-loopsでよく経験しました。リストカンプ同様

land_y = [int(j) for j in range(k)] 
    if k = 5; land_y = [0, 1, 2, 3, 4] 

forループ:

for i in the range(4) 
    a = 2*i  = 6 
    ab.append(a) = 0,2,4,6 

しかし、ここでは、それだけで(私の頭の中で)アップを追加しません: 6999ポイントは、xに沿って作成されています6軸(x、y)からの軸です。

surface_n = int(input()) 
    for i in range(surface_n): 

     land_x, land_y = [int(j) for j in input().split()] 

"i"の違いがわかりません。 データが入力内にどのように「パッケージ化」されているかわかりません。私は整数の文字列をほぼ同じコードで別のタスクに分割しました。簡単に新しいリストを作成して作業することができました。私が解凍していた構造を理解していました。

"game"-while-loopの中でこの行が続くという事実は、ゲームの状態が変わると動的に更新されるので、もっと混乱させます。

x, y, h_speed, v_speed, fuel, rotate, power = [int(i) for i in input().split()] 

たぶん誰かが、これはjavascriptの、Haskellのか、C#で書かれたことができる方法の例を与えることができますか?構文に合致する必要はありませんが、私はここのコンセプトに苦しんでいます。

+0

Pythonを使い始めたばかりの人は、他のコードに焦点を当てることをおすすめします。誰かがここでコードゴルフをしていて、ここには説明が必要なものがたくさんあります。申し訳ありませんが、これはスタックオーバーフローのためには広すぎます。 –

+0

'input()'はstdinから* text *の行をとります。このコードは空白で区切られた数字を期待しています。数字は整数のリストに変換されます。スクリプトのstdinの '42 81'は' ['42'、 '81'] 'に分割され、リストの理解がループして' [42、81] 'が生成されます。 2つの変数。他の式と同じですが、入力する数字は7つだけです。 –

+0

ねえ、私は非常によく理解しています、と私は迷惑を謝罪します。とにかくお返事いただきありがとうございます。私はそれを短縮し、少し指定しましたが、私は好きではありません。私はそれがまだ修飾されていない場合は尊敬します。 – NorwegianViking

答えて

1

input()は、標準入力から行を取ります。基本的にあなたのプログラムに価値を感じています。

コードの仕組みによって、入力文字列の形式について非常に難しい前提があります。それが混乱する(そして確認するのが難しい)という点まで。

さんが最初にこの行を見てみましょう:

land_x, land_y = [int(j) for j in input().split()] 

あなたは既にリストの内包を理解したので、これはこれと本質的に同じである:

inputs = input().split() 
result = [] 
for j in inputs: 
    results.append(int(j)) 
land_x, land_y = results 

これは、複数のものを組み合わせたものですここで起こるinput()はプログラムにテキスト行を読み込み、split()は空白文字が現れるたびにその文字列を分割して複数の部分に分割します。したがって、文字列'foo bar'['foo', 'bar']に分割されます。

次に、リスト内包が起こります。これは基本的には、分割された入力文字列内のすべての項目を繰り返し処理し、int(j)を使用して各項目を整数に変換します。したがって、'2 3'の入力は、最初に['2', '3'](文字列のリスト)に変換され、[2, 3](intのリスト)に変換されます。

最後に、land_x, land_y = resultsという行が評価されます。これは、と呼ばれ、の展開アンパックとなります。基本的には、右の反復可能プログラムは、左に変数があるのと同じ数の項目があります。そのような場合、それは次のように記述するだけで素敵な方法です:

land_x = results[0] 
land_y = results[1] 

だから、基本的には、全体のリスト内包表記は、空白で区切られた2つの数字の入力があることを前提とし、それはその後、別の文字列にそれらを分割し、それらを数値に変換し、各数値を個別の変数land_xland_yに割り当てます。

まったく同じことを次の行で、後に再び起こる:

x, y, h_speed, v_speed, fuel, rotate, power = [int(i) for i in input().split()] 

それは、この時間は、それは入力だけで7つの数字の代わりに、2を持っていることを想定しているだけです。しかしそれはまったく同じです。

関連する問題