Paiza Python入門編6 : 多次元リストを理解しよう

PaizaでPython3が完全無料なのでまとめました。

<a href="https://paiza.jp/works/python3/primer">Paiza Python3入門編</a>

ほとんど標準入力で表示してみようの値なので、そこの分量が多いです。
全ては理解し切れていないです。

##01:２次元リストとは何か学ぼう

```lesson.py
データ構造とは
データの集まりを格納するフォーマット
#１つの値を格納できる
・変数 plyaer="勇者"
#複数の値格納できる
・リスト　player[0]="勇者
#キーがある
・辞書 hp["勇者"]=120
#2つのindexで要素を指定するリスト
・２次元リスト landmap[1][2]="城"

 0123
0城
1  森
2  
3

landmap[0][0]="城"
landmap[1][2]="森"

２次元リストのようと
・RPGマップ
・写真・イラストなどのイメージ
・ゲームの盤面
・表形式データ
・3D-CGの空間座標

```

##02:２次元リストを作成する

```lesson.py
# coding: utf-8
# Your code here!

#リストを作る
player="忍者"
team_a=[player,"勇者","戦士","魔法使い",]

'''
print(team_a[0])
#忍者
print(team_a[1])
勇者
print(team_a)
["忍者","勇者","戦士","魔法使い",]
'''
# 2次元リストを作成する

team_b=[team_a[0],team_a[1],team_a[2]]
print(team_b)
print(team_b[0])

'''
['忍者', '勇者', '戦士']
忍者
'''

#ここからが一番大事!

team_c=["勇者","戦士","魔法使い"]
team_d=["盗賊","忍者","商人"]
team_e=["スライム","ドラゴン","魔王"]

#teamsにteam_c,team_d,team_eを格納する

teams=[team_c,team_d,team_e]
print(teams)

'''
['勇者', '戦士', '魔法使い'], 
['盗賊', '忍者', '商人'], 
['スライム', 'ドラゴン', '魔王']
'''

teams=[team_c,team_d,team_e]
print(teams)


#teamsのteams_dを取り出した
print(teams[1])

'''
print(teams)
[['勇者', '戦士', '魔法使い'], ['盗賊', '忍者', '商人'], ['スライム', 'ドラゴン', '魔王']]
print(teams[1])
['盗賊', '忍者', '商人']
'''

'''
['勇者', '戦士', '魔法使い'], 
['盗賊', '忍者', '商人'], 
['スライム', 'ドラゴン', '魔王']
上記から取り出す
'''
print(teams[0][0])
print(teams[0][1])
print(teams[0][2])
print(teams[2][1])
print(teams[2][2])
'''
勇者
戦士
魔法使い
ドラゴン
魔王
'''

```

##演習

1.リストの中身を出力してみよう

```lesson.py
array = [["勇者","忍者","武士"],["戦士","僧侶","魔法使い"]]
# この下で、arrayを出力してみよう
print(array[0])
 ```
 
 2.２次元リストの中身を出力してみよう
 
 ```lesson.py
 
array = [["勇者","忍者","武士"],["戦士","僧侶","魔法使い"]]
# この下で、arrayを出力してみよう
print(array[1][2])
```

3.２次元リストを作成しよう

```lesson.py

item_1 = ["木の棒", "こん棒", "エクスカリバー"]
item_2 = ["おにぎり", "おにぎり", "むぎ茶"]
item_3 = ["毒消し", "薬草", "アイアンシールド"]

# item_1 ~ 3を、basketリストに代入して、print関数で出力してください。
basket = [item_1,item_2,item_3]
print(basket)
``` 

##03:2次元リストを操作する

```lesson.py

おさらい
team_a=["勇者","戦士","魔法使い"]
team_b=["盗賊","忍者","商人"]
team_c=["スライム","ドラゴン","魔王"]
teams=[team_a,team_b,team_c]
print(teams)
print(teams[0])
print(teams[0][0])
print(teams[0][1])
print(teams[0][2])

[['勇者', '戦士', '魔法使い'], ['盗賊', '忍者', '商人'], ['スライム', 'ドラゴン', '魔王']]
['勇者', '戦士', '魔法使い']
勇者
戦士
魔法使い
```


```lesson.py

'''
team_a=["勇者","戦士","魔法使い"]
team_b=["盗賊","忍者","商人"]
team_c=["スライム","ドラゴン","魔王"]
teams=[team_a,team_b,team_c]
'''
↓のようにも書ける
teams=[["勇者","戦士","魔法使い"],["盗賊","忍者","商人"],["スライム","ドラゴン","魔王"]]
print(teams)
print(teams[0])
print(teams[0][0])
print(teams[0][1])
print(teams[0][2])

```

```lesson.py
#２次元リストの更新
teams[0][0]="魔道士"
print(teams)

#temasの個数 3
print(len(teams))


teams=[["勇者","戦士",],["盗賊","忍者","商人"],["スライム","ドラゴン","魔王"],["魔法使い"]]
#にteamsを変更

print(len(teams))
#teams0["勇者","戦士"]に個数を変更するので個数 2
print(len(teams[0]))

```

##演習
1.２次元リストに要素を更新する

```lesson.py
basket = [["木の棒", "こん棒", "エクスカリバー"], ["おにぎり", "おにぎり", "むぎ茶"], ["毒消し", "薬草", "アイアンシールド"]]

# ここに、要素を更新するコードを記述する
basket[0][2]="石斧"

print(basket)

```

2.２次元リストの要素の個数を出力する
インデックス1の要素数を出力する

```lesson.py

# 2次元リストの要素の個数を出力する

basket = [["木の棒", "こん棒"], ["おにぎり", "おにぎり", "むぎ茶"], ["アイアンシールド"], ["毒消し","毒消し","毒消し","毒消し"]]

# ここに、要素の個数を出力するコードを記述する
print(len(basket[1]))

```

##04:2次元リストを操作する
```lesson.py

teams = [["勇者", "戦士"], ["盗賊", "忍者", "商人"], ["スライム", "ドラゴン", "魔王"], ["魔法使い"]]
print(teams)

[['勇者', '戦士'], ['盗賊', '忍者', '商人'], ['スライム', 'ドラゴン', '魔王'], ['魔法使い']]

```

```lesson.py

teams.append(["メタルモンスター","シルバーモンスター","ブラックモンスター"])
print(teams)
print(len(teams))

[['勇者', '戦士'], ['盗賊', '忍者', '商人'], ['スライム', 'ドラゴン', '魔王'], ['魔法使い'], ['メタルモンスター', 'シルバーモンスター', 'ブラックモンスター']]
5
````

```lesson.py

#要素を加える
teams[0].append("レッドドラゴン")
print(teams[0])
print(len(teams))
print(len(teams[0]))

['勇者', '戦士', 'レッドドラゴン']
5
3
```


```lesson.py

#要素の削除
del teams[1]
print(teams)
print(len(teams))
#['勇者', '戦士', 'レッドドラゴン']のこと
print(len(teams[0]))

[['勇者', '戦士', 'レッドドラゴン'], ['スライム', 'ドラゴン', '魔王'], ['魔法使い'], ['メタルモンスター', 'シルバーモンスター', 'ブラックモンスター']]
4
3
```

##演習

1.リストに要素を追加してみよう

```lesson.py
# 2次元リストに要素を追加する

basket = [["木の棒", "こん棒", "エクスカリバー"], ["おにぎり", "おにぎり", "むぎ茶"], ["毒消し", "薬草", "アイアンシールド"]]

# ここに、要素を追加するコードを記述する
basket[0].append("石斧")


print(basket)

```

2.リストから要素を削除してみよう

```lesson.py

# 2次元リストに要素を削除する

basket = [["木の棒", "こん棒", "エクスカリバー"], ["おにぎり", "おにぎり", "むぎ茶"], ["毒消し", "薬草", "アイアンシールド"]]

# ここに、要素を削除するコードを記述する

del basket[2][2]
print(basket)


```

##05:ループでリストを処理する

```lesson.py
# ループでリストを処理する
team =["勇者","戦士","魔法使い"]
print(team)
print(team[0])

#リストの繰り返し
for person in team:
    print(person + "が、スライムと戦った")
    
```

```lesson.py
#enumrateで数字と一緒に取り出す
for (i,person) in enumerate(team):
    print(str(i+1)+"番目の" +person + "が、スライムと戦った")
```


```lesson.py

#リストの各要素を処理してその結果を別のリストに格納する
numbers = [3,1,4,1,5]
results = []
for item in numbers:
    results.append(item*10)

print(results)

[30, 10, 40, 10, 50]
```

##演習

1.リストの中身を１行ずつ表示してみよう

```lesson.py

enemies = ["スライム", "モンスター", "ゾンビ", "ドラゴン", "魔王"]
# ここに、要素をループで表示するコードを記述する
for (i,enemy) in enumerate(enemies):
    print(str(i+1)+"番目の" +enemy + "が現れた")
```

2.各要素を3倍にして新しいリストを作成

```lesson.py

# 各要素を3倍にして新しいリストを作成する

numbers = [12, 34, 56, 78, 90]

# ここに、各要素を3倍にして新しいリストを作成するコードを記述する
numbers2 =[]

for item in numbers:
    numbers2.append(item*3)
#間違えた    numbers2.append(numbers*3)はだと、リストを増やすことになる

print(numbers2)
```


##06:2次元リストをforで作成する

```lesson.py

# 2次元リストをforで作成する
numbers=[1,2,3]
print(numbers)

#１を10回書くリストを作ることができる
numbers2=[1 for i in range(10)]
#全て要素が1で初期化されたリストが表示される[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
print(numbers2)
 #要素数10
print(len(numbers2))

#(0,1,2,3,..9)*2を10回繰り返す
numbers3=[i*2 for i in range(10)]
#[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
print(numbers3)
#要素数10個
print(len(numbers3))

```

```lesson.py

#[[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]]
numbers2=[[1 for i in range(3)] for j in range(4)]
#for j in range(4)でforの前に来る処理を４回繰り返した結果を要素を持つリスト
#その繰り返す処理として３つの要素が1で初期化されたリストを作る
#リストを繰り返す処理で２次元リストを作ることができる

print(numbers2)
numbers2[0][1]=2
#[[1, 2, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]]
print(numbers2)


```

 ##演習
 
 1.forでリストを作成してみよう
 
 期待する出力
 ['paiza', 'paiza', 'paiza', 'paiza', 'paiza']
 
 ```lesson.py
 
numbers=["paiza" for i in range(5)]
print(numbers)

```

2.２次元リストを作成してみよう

期待する出力値
[[7, 7, 7, 7], [7, 7, 7, 7], [7, 7, 7, 7], [7, 7, 7, 7], [7, 7, 7, 7]]

```lesson.py

numbers=[[7 for i in range(4)] for j in range(5)]

print(numbers)

```

##07:ドット絵を表示する


```lesson.py

# ドット絵を表示する

#元になるイラストのドットの有無を数字の0,1として持っている

#２次元リストになっている

#各行がドットの並びになっている

enemy_img = [[0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
             [1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1],
             [1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1],
             [1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1],
             [0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
             [0,0,0,1,1,1,0,0,0,0,0,1,1,1,0,0],
             [0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1]]

#リストの各行をループで出力する

'''
for line in enemy_img:
    print(line)
'''

```lesson.py

for line in enemy_img:
    for dot in line:
    #end引数は表示した文字列の後に何を表示するか指定するためのもの
    #プリント関数はデフォルトでは改行されるが改行させないようにすることができる
    #0,1が改行なしで出力される
        print(dot,end= "")
    #改行するための空のプリント
    print()

0011111111111100
1100000000000011
1001110001110001
1100001100000011
0111111111111110
0001110000011100
0000111000000111
```

```lesson.py
for line in enemy_img:
    for dot in line:
    #0=スペース,1=#を表示する 
        if dot==1:
            print("#",end="")
        else:
            print(" ",end="")
    #改行するための空のプリント
    print()
```

```text.txt
  ############  
##            ##
#  ###   ###   #
##    ##      ##
 ############## 
   ###     ###  
    ###      ###
```

##演習

リストの中身を1行ずつ表示してみよう

```lesson.py

# ドットで文字を出力しよう

letter_A = [[0,0,1,1,0,0],
            [0,1,0,0,1,0],
            [1,0,0,0,0,1],
            [1,1,1,1,1,1],
            [1,0,0,0,0,1],
            [1,0,0,0,0,1]]

# ここに、ドットを表示するコードを記述する

for line in letter_A:
    for dot in line:
    #0=スペース,1=#を表示する 
        if dot==1:
            print("@",end="")
        else:
            print(" ",end="")
    #改行するための空のプリント
    print("")

```

```text.txt
  @@  
 @  @ 
@    @
@@@@@@
@    @
@    @
```


##08:3次元リストで複数のドット絵を表示する

```lesson.py

enemy_img = [[0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
             [1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1],
             [1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1],
             [1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1],
             [0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
             [0,0,0,1,1,1,0,0,0,0,0,1,1,1,0,0],
             [0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1]]
for line in enemy_img:
    for dot in line:
        if dot ==1:
            print("#",end="")
        else:
            print(" ",end="")
    print()
    
```

```text.txt

  ############  
##            ##
#  ###   ###   #
##    ##      ##
 ############## 
   ###     ###  
    ###      ###
```

```lesson.py
#最初のドット絵だけ取り出す

enemy_img = [[[0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
              [1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1],
              [1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1],
              [1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1],
              [0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
              [0,0,0,1,1,1,0,0,0,0,0,1,1,1,0,0],
              [0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1]],
              #0のところがドットなし、1のところがドットあり
             [[0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
              [1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1],
              [1,0,0,1,1,1,0,0,0,0,1,1,1,0,0,1],
              [1,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1],
              [0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
              [0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0],
              [0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0]],
             [[0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
              [1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1],
              [1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,1],
              [1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1],
              [0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
              [0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0],
              [1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0]]]
              
#最初のドットだけ取り出す

#enemy_imgの[]の中身を変える

for line in enemy_img[0]:
    for dot in line:
        if dot ==1:
            print("#",end="")
        else:
            print(" ",end="")
    print()
```

```text.txt

  ############  
##            ##
#  ###   ###   #
##    ##      ##
 ############## 
   ###     ###  
    ###      ###
 ```

```lesson.py
#lineをimgにする
#1番外側のforでドット絵のパターンを１つずつ取り出しimg(変数)に代入
for img in enemy_img:
    #lineをimgに
    #２番目のforでドット絵のパターンから１行デずつデータ取り出しline変数に代入
    for line in img:
        #各行から0と1のデータ取り出してdot変数変数に代入
        for dot in line:
            #dot変数が1ならば#
            if dot ==1:
                print("#",end="")
            #0だったらスペース
            else:
                print(" ",end="")
        print()
        

```


```text.txt]

  ############  
##            ##
#  ###   ###   #
##    ##      ##
 ############## 
   ###     ###  
    ###      ###
  ############  
##            ##
#  ###    ###  #
##     ##     ##
 ############## 
   ###    ###   
   ###    ###   
  ############  
##            ##
#   ###   ###  #
##      ##    ##
 ############## 
  ###      ###  
###       ###   

```


##演習

リストの中身を1行ずつ表示してみよう

全くわからん!

```lesson.py

letters = [[[0,0,1,1,0,0],
             [0,1,0,0,1,0],
             [1,0,0,0,0,1],
             [1,1,1,1,1,1],
             [1,0,0,0,0,1],
             [1,0,0,0,0,1]],
            [[1,1,1,1,1,0],
             [1,0,0,0,0,1],
             [1,1,1,1,1,0],
             [1,0,0,0,0,1],
             [1,0,0,0,0,1],
             [1,1,1,1,1,0]],
            [[0,1,1,1,1,0],
             [1,0,0,0,0,1],
             [1,0,0,0,0,0],
             [1,0,0,0,0,0],
             [1,0,0,0,0,1],
             [0,1,1,1,1,0]]]

# ここに、ドットを表示するコードを記述する
for letter in letters:
    for line in letter:
        for dot in line:
            if dot == 1:
                print("@", end="")
            else:
                print(" ", end="")
        print()    
    print()
```

##09:enumerareで2次元リストを操作する

```lesson.py
landmap=[["森" for i in range(20)] for j in range(10)]
#landmapの各行を取り出す
for line in landmap:
    #行から各行を取り出す
    for area in line:
        #取り出したエリアをプリント関数で改行なしで出力している
        print(area,end="")
    print()
```

```text.txt
森森森森森森森森森森森森森森森森森森森森
森森森森森森森森森森森森森森森森森森森森
森森森森森森森森森森森森森森森森森森森森
森森森森森森森森森森森森森森森森森森森森
森森森森森森森森森森森森森森森森森森森森
森森森森森森森森森森森森森森森森森森森森
森森森森森森森森森森森森森森森森森森森森
森森森森森森森森森森森森森森森森森森森森
森森森森森森森森森森森森森森森森森森森森
森森森森森森森森森森森森森森森森森森森森
```

```lesson.py
landmap=[["森" for i in range(20)] for j in range(10)]
landmap[0][0]= "城"
landmap[0][19]= "町"
landmap[9][19]= "町"

#landmapの各行を取り出す
for line in landmap:
    #行から各行を取り出す
    for area in line:
        #取り出したエリアをプリント関数で改行なしで出力している
        print(area,end="")
    print()
```

```text.txt
一番左上に城
一番右上に町
一番右下に町
城森森森森森森森森森森森森森森森森森森町
森森森森森森森森森森森森森森森森森森森森
森森森森森森森森森森森森森森森森森森森森
森森森森森森森森森森森森森森森森森森森森
森森森森森森森森森森森森森森森森森森森森
森森森森森森森森森森森森森森森森森森森森
森森森森森森森森森森森森森森森森森森森森
森森森森森森森森森森森森森森森森森森森森
森森森森森森森森森森森森森森森森森森森森
森森森森森森森森森森森森森森森森森森森町
```


```lesson.py

landmap=[["森" for i in range(20)] for j in range(10)]
landmap[0][0]= "城"
landmap[0][19]= "町"
landmap[9][19]= "町"

#間違ってこんなふうに書いていたlandmap=[0][0] = "城"
# イコールが多い

#landmapの各行を取り出す
#一番左に番号を振るためにforに iをたす
for i,line in enumerate(landmap):
    #一番左に番号を振るために:をたす
    print(str(i) + ":" , end="")
    #行から各行を取り出す
    for area in line:
        #取り出したエリアをプリント関数で改行なしで出力している
        print(area,end="")
    print()
    
```

```text.txt
0:城森森森森森森森森森森森森森森森森森森町
1:森森森森森森森森森森森森森森森森森森森森
2:森森森森森森森森森森森森森森森森森森森森
3:森森森森森森森森森森森森森森森森森森森森
4:森森森森森森森森森森森森森森森森森森森森
5:森森森森森森森森森森森森森森森森森森森森
6:森森森森森森森森森森森森森森森森森森森森
7:森森森森森森森森森森森森森森森森森森森森
8:森森森森森森森森森森森森森森森森森森森森
9:森森森森森森森森森森森森森森森森森森森町
```

##演習

複数行テキストに行番号を追加する

```lesson.py

# 複数行テキストに行番号を追加する

text = ["吾輩は猫である",
        "名前はまだ無い",
        "どこで生まれたか",
        "とんと見当がつかぬ"]

#ここに、行番号を表示するコードを記述する
for i,line in enumerate(text):
    print(str(i+1)+":"+line)
```

```text.txt

1:吾輩は猫である
2:名前はまだ無い
3:どこで生まれたか
4:とんと見当がつかぬ

```

##10:２次元リストのマップに道を追加する

```lesson.py
landmap = [["森" for i in range(20)] for j in range(10)]
landmap[0][0] = "城"
landmap[0][19] = "町"
landmap[9][19] = "町"
for i,line in enumerate(landmap):
    print(str(i) + ":", end="")
    for area in line:
        #横に道を作る
        if i % 2 ==0:
            print("＋",end="")
        else:
            print(area,end="")
        
    print()
```

```text.txt
これだと城と町が消えてしまう
0:＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
1:森森森森森森森森森森森森森森森森森森森森
2:＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
3:森森森森森森森森森森森森森森森森森森森森
4:＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
5:森森森森森森森森森森森森森森森森森森森森
6:＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
7:森森森森森森森森森森森森森森森森森森森森
8:＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
9:森森森森森森森森森森森森森森森森森森森町
```

```lesson.py
landmap[0][0] = "城"
landmap[0][19] = "町"
landmap[9][19] = "町"
for i,line in enumerate(landmap):
    print(str(i) + ":", end="")
    for area in line:
        #横に道を作る #2の倍数かつ森のところは、道を作る
        if i % 2 ==0 and area=="森":
            print("＋",end="")
        else:
            print(area,end="")
        
    print()
```

```text.txt

0:城＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋町
1:森森森森森森森森森森森森森森森森森森森森
2:＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
3:森森森森森森森森森森森森森森森森森森森森
4:＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
5:森森森森森森森森森森森森森森森森森森森森
6:＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
7:森森森森森森森森森森森森森森森森森森森森
8:＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
9:森森森森森森森森森森森森森森森森森森森町

```


```lesson.py

# coding: utf-8
# Your code here!

# 2次元リストで地図を表示する

landmap = [["森" for i in range(20)] for j in range(10)]
landmap[0][0] = "城"
landmap[0][19] = "町"
landmap[9][19] = "町"
for i,line in enumerate(landmap):
    print(str(i) + ":", end="")
    #ここにfor文にjを入れる(縦なので)
    for j,area in enumerate(line):
    #2 or(または)3で割った余りが0ノオどちらかが成立していたら、
    #and(かつ)　森ならば +
        if (i % 2 == 0 or j % 3==0) and area=="森":
            print("＋",end="")
        else:
            print(area,end="")
        
    print()

```


```text.txt
0:城＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋町
1:＋森森＋森森＋森森＋森森＋森森＋森森＋森
2:＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
3:＋森森＋森森＋森森＋森森＋森森＋森森＋森
4:＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
5:＋森森＋森森＋森森＋森森＋森森＋森森＋森
6:＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
7:＋森森＋森森＋森森＋森森＋森森＋森森＋森
8:＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
9:＋森森＋森森＋森森＋森森＋森森＋森森＋町
```

##演習
```lesson.py

# 初期の地図
landmap = [["森" for i in range(19)] for j in range(10)]
landmap[2][9] = "城"
landmap[0][0] = "町"
landmap[0][18] = "町"
landmap[9][0] = "町"
landmap[9][18] = "町"

# 地図に道を作る
for i, line in enumerate(landmap):
    for j, area in enumerate(line):
        # ここから足りないところを入力してください
        if (i % 9 == 0 or j % 9==0) and area=="森":
            print("＋", end="")
        else:
            print(area, end="")
    print()
```

```text.txt

町＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋町
＋森森森森森森森森＋森森森森森森森森＋
＋森森森森森森森森城森森森森森森森森＋
＋森森森森森森森森＋森森森森森森森森＋
＋森森森森森森森森＋森森森森森森森森＋
＋森森森森森森森森＋森森森森森森森森＋
＋森森森森森森森森＋森森森森森森森森＋
＋森森森森森森森森＋森森森森森森森森＋
＋森森森森森森森森＋森森森森森森森森＋
町＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋町
```

<strong> AND(論理積)について</strong>

ANDは、両方の条件が成立した場合、全体の条件が成立します。
全てが不成立、どれか1つでも不成立の場合には、不成立となります。
Pythonでは、「and」と記述します。

<strong>OR(論理和)について</strong>
ORは、どれか１つの条件が成立した場合、全体の条件が成立します。
全てが不成立の場合には、不成立となります。
Pythonでは、「or」と記述します。


##11:標準入力から２次元リスト

```lesson.py

入力
0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0
1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1
1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1
1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1
0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0
0,0,0,1,1,1,0,0,0,0,0,1,1,1,0,0
0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1
_

while True:
    #標準入力から１行ずつデータをline変数に読み込んで
    line =input()
    #_であれば繰り返し処理から抜け出す
    if line =="_":
        break
    #そうでなければ繰り返し出力する
    print(line)
```


```text.txt
0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0
1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1
1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1
1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1
0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0
0,0,0,1,1,1,0,0,0,0,0,1,1,1,0,0
0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1
```

```lesson.py
while True:
    #標準入力から１行ずつデータをline変数に読み込んで
    line =input()
    #_であれば繰り返し処理から抜け出す
    if line =="_":
        break
    #そうでなければ繰り返し出力する
    #読み込んだ行データをカンマごとに分割するためにsplit(",")を使う
    #line変数に読み込んでカンマで分割して、分割したデータがリストになって、それがそのまま出力されている
    print(line.split(","))

```

```text.txt

['0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0']
['1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1']
['1', '0', '0', '1', '1', '1', '0', '0', '0', '1', '1', '1', '0', '0', '0', '1']
['1', '1', '0', '0', '0', '0', '1', '1', '0', '0', '0', '0', '0', '0', '1', '1']
['0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0']
['0', '0', '0', '1', '1', '1', '0', '0', '0', '0', '0', '1', '1', '1', '0', '0']
['0', '0', '0', '0', '1', '1', '1', '0', '0', '0', '0', '0', '0', '1', '1', '1']
 ```
 
 
 ```lesson.py
 enemy_img=[]
while True:
    #標準入力から１行ずつデータをline変数に読み込んで
    line =input()
    #_であれば繰り返し処理から抜け出す
    if line =="_":
        break
    enemy_img.append(line.split(","))

print(enemy_img)

```

```text.txt
[['0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0'], ['1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1'], ['1', '0', '0', '1', '1', '1', '0', '0', '0', '1', '1', '1', '0', '0', '0', '1'], ['1', '1', '0', '0', '0', '0', '1', '1', '0', '0', '0', '0', '0', '0', '1', '1'], ['0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0'], ['0', '0', '0', '1', '1', '1', '0', '0', '0', '0', '0', '1', '1', '1', '0', '0'], ['0', '0', '0', '0', '1', '1', '1', '0', '0', '0', '0', '0', '0', '1', '1', '1']]
```

 ```lesson.py
 
 #enemy_imgというからのリストを用意する
enemy_img=[]
while True:
    #標準入力から１行ずつデータをline変数に読み込んで
    line =input()
    #_であれば繰り返し処理から抜け出す
    if line =="_":
        break
    #分割したリストをenemy_imgというリストに追加する
    #リストをリストに入れるので２次元リストになる
    enemy_img.append(line.split(","))

#print(enemy_img)

#標準入力殻読み込んだデータは文字列になっているので、==1では表示できない
for line in enemy_img:
    for dot in line:
        if dot ==1:
            print("#",end="")
        else:
            print(" ",end="")
    print()
```

```lesson.py

#enemy_imgというからのリストを用意する
enemy_img=[]
while True:
    ##標準入力から１行ずつデータをline変数に読み込んで
    line =input()
    #_であれば繰り返し処理から抜け出す
    if line =="_":
        break
    #分割したリストをenemy_imgというリストに追加する
    #リストをリストに入れるので２次元リストになる
    enemy_img.append(line.split(","))

#print(enemy_img)

#標準入力殻読み込んだデータは文字列になっているので、==1では表示できない
for line in enemy_img:
    for dot in line:
    ##int(dot)=1とすると、文字列から数値に変換されるので表示される
        if int(dot) ==1:
            print("#",end="")
        else:
            print(" ",end="")
    print()
```
 
 ```text.txt
   ############  
##            ##
#  ###   ###   #
##    ##      ##
  ############  
   ###     ###  
    ###      ###
```


##演習

標準入力から、２次元リストを読み込む

```lesson.py

# 標準入力のデータ
# 0,0,1,1,0,0
# 0,1,0,0,1,0
# 1,0,0,0,0,1
# 1,1,1,1,1,1
# 1,0,0,0,0,1
# 1,0,0,0,0,1
# _

letter_A = []
while True:
    line = input()
    if line == "_":
        break
    # ここに、読み込んだデータをリストに追加するコードを記述する
    letter_A.append(line.split(","))
print(letter_A)

```

```text.txt
[['0', '0', '1', '1', '0', '0'], ['0', '1', '0', '0', '1', '0'], ['1', '0', '0', '0', '0', '1'], ['1', '1', '1', '1', '1', '1'], ['1', '0', '0', '0', '0', '1'], ['1', '0', '0', '0', '0', '1']]
```


##12:2次元リストで画像を配置

```lesson.py
'''
・チームの隊列を表示
・配置を２次元配列で管理
・tableタグと画像を使う
・同じキャラの画像ファイルは１つを共有



tableタグで表示

    敵    | 敵  |  敵   |敵|
          |     |      |
クリスタル|勇者|魔法使い|クリスタル

のようにしたい

team配列　標準入力から読み込む
['1','1','1,''1'],
['0','0','0','0']
['2','3','4','2']

playaers_img配列
0:Empty.png
1:Dragon.png
2:Crystal.png
3:Hero.png
4:Heroine.png

として
team配列から
team[0][0]を出力
に対して
playaers_img配列して
出力

playaers_img[[team[0][0]]]

↓
Dragon.pngを[0][0]に配列

```


```lesson.py

# 画像用リスト
players_img = [
    "https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Empty.png",
    "https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Dragon.png",
    "https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Crystal.png",
    "https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Hero.png",
    "https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Heroine.png"]
    
 入力
 
1,1,1,1
0,0,0,0
2,3,4,2
_

#配列データ読み込み
team = []
while True:
    line=input()
    if line=="_":
        break
    team.append(line.split(","))
print(team)
    
```


```text.txt
[['1', '1', '1', '1'], ['0', '0', '0', '0'], ['2', '3', '4', '2']]
```

```lesson.py

#配列データ読み込み
team = []
while True:
    line=input()
    if line=="_":
        break
    team.append(line.split(","))
##ここはコメントアウトする
#print(team)
    
##配列に合わせて表示(そのまま配置データを表示する)
##１行ずつ表示
for line in  team:
    #print(line)
    for person in line:
        print(person)
```

```text.txt
1
1
1
1
0
0
0
0
2
3
4
2
```

```lesson.py

#配列データ読み込み
team = []
while True:
    line=input()
    if line=="_":
        break
    team.append(line.split(","))
#print(team)
    
#配列に合わせて表示(そのまま配置データを表示する)
##<table>,<tr>,<td>タグをつける
print("<table>")
for line in  team:
    print("tr")
    ##ここのプリント関数はプリントアウトする
    #print(line)
    for person in line:
        print("<td>"+person+"</td>")
    print("</tr>")
print("</table>")

````

```text.txt

1111
0000
2342

```

```lesson.py

#配列データ読み込み
team = []
while True:
    line=input()
    if line=="_":
        break
    team.append(line.split(","))
#print(team)
    
#配列に合わせて表示(そのまま配置データを表示する)
print("<table>")
for line in  team:
    print("<tr>")
    #print(line)
    for person in line:
    ##画像を表示する
    ##<img src='" "'>を加える
    ##インデックスにはpersonを指定しているが、標準入力から読み込んだデータは
    ##文字列になっているのでint関数で数値としていているint(person)
        print("<td><img src='"+players_img[int(person)]+"'></td>")
    print("</tr>")
print("</table>")
```

##演習

```lesson.py

# 2次元リストで画像を表示する

# 画像用リスト
players_img = [
    "https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Empty.png",
    "https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Dragon.png",
    "https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Crystal.png",
    "https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Hero.png",
    "https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Heroine.png"]

# 配置データを読み込み
team = []
while True:
    line = input()
    if line == "_":
        break
    team.append(line.split(","))

# ここから先を入力してください
print("<table>")
for line in  team:
    print("<tr>")
    #print(line)
    for person in line:
    ##画像を表示する
    ##<img src='" "'>を加える
    ##インデックスにはpersonを指定しているが、標準入力から読み込んだデータは
    ##文字列になっているのでint関数で数値としていているint(person)
        print("<td><img src='"+players_img[int(person)]+"'></td>")
    print("</tr>")
print("</table>")
```

``` text.txt
<table>
<tr>
<td><img src='https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Dragon.png'></td>
<td><img src='https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Dragon.png'></td>
<td><img src='https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Dragon.png'></td>
<td><img src='https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Dragon.png'></td>
<td><img src='https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Dragon.png'></td>
</tr>
<tr>
<td><img src='https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Crystal.png'></td>
<td><img src='https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Hero.png'></td>
<td><img src='https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Hero.png'></td>
<td><img src='https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Hero.png'></td>
<td><img src='https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Crystal.png'></td>
</tr>
<tr>
<td><img src='https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Crystal.png'></td>
<td><img src='https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Heroine.png'></td>
<td><img src='https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Heroine.png'></td>
<td><img src='https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Heroine.png'></td>
<td><img src='https://paiza-webapp.s3.amazonaws.com/files/learning/rpg/Crystal.png'></td>
</tr>
</table>

```