Paiza Python 入門編4: リストの基礎



##01リストとは何か学ぼう
データ構造の一種。名とまったデータを扱う

```lesson.py
配列=リスト

変数「1つずつ」

変数 player_1="勇者"
変数 player_2="魔法使い"

リスト[複数ある]

team[0]="勇者"
team[1]="魔法使い"
team[2]="ドラゴン"

0から始まるようになっている

リストの具体例

team[0]="勇者"
team[1]="魔法使い"
team[2]="ドラゴン"(データの追加)、(データの変更)、(データの削除)

番号でデータを参照
print(team[0])

番号を計算で求める
print(team[n+1])

データの個数
print(len(team)

リストの使いどころ
1.並び順管理が必要な処理
・出席番号、座席順、パーティの並び順
・トランプや将棋などのゲームデータ
2.Webフォームの選択肢
.年齢、都道府県など
3.エクセルのような複数行データ
・CSVデータの処理
```

##02:リストを作ろう

```lesson.py

#変数
player_1="勇者"
player_2="魔法使い"

print(player_1)
print(player_2)

#リスト
team = ["勇者","魔法使い",100,player_1]
print(team)

````

##演習

1.

```lesson.py
list = ["戦士","侍","僧侶","魔法使い"]
# この下で、listを出力してみよう
print(list)


```


2.指定の文字のリストにしてみよう

```lesson.py
item = ["ロングソード","ブレードソード","エクスカリバー"]
print(item)
```

3.変数で、リストに代入しよう

```lesson.py
# 変数で、リストに代入する

player_1 = "勇者"
player_2 = "魔法使い"
player_3 = "戦士"

# player_1 ~ 3を、リストに記述して、print関数で出力してください。
team=[player_1,player_2,player_3]

print(team)

```

##03:リストの要素を取り出してみよう

```lesson.py
team = ["勇者", "魔法使い"]
print(team)
print(team[0])
num=0
print(team[num +1 ])

#エラーになるprint(team[10])

#要素数を表示することができる
print(len(team))

リストの参照　要素の番号を指定する

print(team[0]) 直接数値で指定する
print(team[num]) 変数で指定する
print(team[num + 1]) 計算式で指定する

len関数　要素の数
print(len(team))


##演習


・リストのゼロ番の要素を取り出してみよう

```lesson.py

team = ["勇者", "戦士", "侍", "忍者", "魔法使い"]
# teamの1番左の要素をprint関数で出力する
print(team[0])

```

・リストから特定要素を取り出してみよう

```lesson.py

team = ["勇者", "戦士", "侍", "忍者", "魔法使い"]
# teamの3番目の要素をprint関数で出力する
print(team[2])

```lesson.py

weapon = ["木の棒", "鉄の棒", "鉄の剣", "銅の剣", "石斧", "エクスカリバー"]
# ここに、要素数を出力するコードを記述する
print(len(weapon))

```


##04:リストを操作しよう

```lesson.py

team = ["勇者", "魔法使い"]
print(team)
print(team[1])
print(len(team))

team.append("戦士")
print(team)
print(len(team))

team[2]="ドラゴン"
print(team)
print(len(team))

team.pop(2)
print(team)
print(len(team))

```
```
['勇者', '魔法使い']
魔法使い
2
['勇者', '魔法使い', '戦士']
3
['勇者', '魔法使い', 'ドラゴン']
3
['勇者', '魔法使い']
2
```

##演習
 
 1.「リストに要素を追加してみよう」
 
 ```lesson.py
 
 weapon = ["木の棒", "鉄の棒", "鉄の剣", "銅の剣"]
# ここに、要素を追加するコードを記述する
weapon.append("石斧")

print(weapon)

```
 
 2.リストの要素を上書きしてみよう
 
 ```lesson.py
 
 weapon = ["木の棒", "鉄の棒", "鉄の剣", "サビた剣"]
# ここに、要素を上書きするコードを記述する

#print(weapon)
weapon.pop(3)
#print(weapon)
weapon.append("石斧")
print(weapon)

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


```lesson.py

weapon = ["木の棒", "鉄の棒", "鉄の剣", "銅の剣"]
# ここに、要素を削除するコードを記述する
weapon.pop(2)
print(weapon)

```

##05:ループでリストを処理しよう

```lesson.py
team = ["勇者", "戦士", "魔法使い","盗賊"]
#print(team)
#print(team[0])

'''
for i in range(5):
    print(i)
'''
print("<select name='job'>")
for job in team:
    print("<option>" + job +"<optiin>")
print("</select>")
```


##演習

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

```lesson.py

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

2.要素の合計を計算してみよう

```lesson.py

numbers = [12, 34, 56, 78, 90]
total = 0
for num in numbers:
	# ここに、合計を計算するコードを記述する
	total += num

print(total)

```

##06:カンマまで区切りデータを、splitで分割しよう

```lesson.py

line = input().rstrip().split(",")
print(line)
print(len(line))

for enemy in line:
    print(enemy + "が現れた！")

```

##演習

1.「文字列をカンマで分割してみよう」

```lesson.py
team_str = "勇者,戦士,忍者,魔法使い"

print(team_str.split(","))

```

2.カンマ区切りデータを、splitで分割しよう

```lesson.py

str = "One cold rainy day when my father was a little boy he met an old alley cat on his street"
words = str.split(" ")
print(len(words))

```

3.標準入力から読み込んだURLを分割しよう


```lesson.py

入力

https://paiza.jp/cgc/users/ready

url_str = input().rstrip().split("/")
print(url_str)

['https:', '', 'paiza.jp', 'cgc', 'users', 'ready']

```

##07:複数行データをリストに格納しよう

１行のデータだけ格納

```lesson.py
入力
勇者は荒野を歩いていた

line = input().rstrip()
#line = input 標準入力から１行読み込む
#rstrip関数　で文字列の末尾の改行コードを取りのぞく

出力
勇者は荒野を歩いていた
```
line = input().rstrip()
print(line)
```

複数行データをリストに格納

```lesson.py
複数行取り込みたい

for in

sys.stdin.readlines関数 ファイルを全て読み込み、１行毎に処理

import sys
line = sys.stdin.readlines()


よって

import  sys
for line in sys.stdin.readlines():
    print(line.rstrip())#文字列の末尾の改行コードを抜き出す

```

```lesson.py

入力
勇者は荒野を歩いていた
勇者はモンスターと戦った
勇者はモンスターを倒した
勇者は世界を救った

import  sys
for line in sys.stdin.readlines():
    print(line.rstrip())



出力
勇者は荒野を歩いていた
勇者はモンスターと戦った
勇者はモンスターを倒した
勇者は世界を救った
```

詳しい説明

```lesson.py

import  sys
for line in sys.stdin.readlines():
#readlines()変数は１度のすべての行を標準入力から読み込む
#正常に読み込めた場合は、ループ処理でline変数に渡してprintで出力
    print(line.rstrip())
#for in の１行目ではrstripが使えないのでfor ループの中で実行
#空の行でも読み込んで空の行も表示される

入力
勇者は荒野を歩いていた
勇者はモンスターと戦った

勇者は世界を救った

出力
勇者は荒野を歩いていた
勇者はモンスターと戦った

勇者は世界を救った

```

```lesson.py

#読み込んだデータをリストに追加してループの後でまとめて表示う

import  sys
array = []#1.ループの外にarrayという空のリストを追加する
for line in sys.stdin.readlines():
    array.append(line.rstrip())#2.引数にlune.rstrip
    #print(line.rstrip())

print(array)#3.ループの後ろでprint

入力


勇者は荒野を歩いていた
勇者はモンスターと戦った
勇者はモンスターを倒した
勇者は世界を救った

出力
['勇者は荒野を歩いていた', '勇者はモンスターと戦った', '', '勇者はモンスターを倒した', '勇者は世界を救った']

#からの行含まれている

```


##演習

1.〜が現れた!と出力する

```lesson.py
入力
スライム
モンスター
ゾンビ
ドラゴン
魔王

コード
import sys
for line in sys.stdin.readlines():
	msg = line.rstrip()
	print(msg +"が現れた")

出力
スライムが現れた
モンスターが現れた
ゾンビが現れた
ドラゴンが現れた
魔王が現れた
```


2.「AがB匹現れた」


```lesson.py

入力
スライム,30
モンスター,23
ゾンビ,15
ドラゴン,3
魔王,1

コード
import sys
for line in sys.stdin.readlines():
	# ここに、文字列を分割して、出力するコードを書く
	enemy = line.rstrip().split(",")
#.split
	print(enemy[0]+ "が" + enemy[1]+ "匹現れた")
#print(enemy[0]+ "が" + enemy[1]+ "匹現れた")

出力
スライムが30匹現れた
モンスターが23匹現れた
ゾンビが15匹現れた
ドラゴンが3匹現れた
魔王が1匹現れた
```

##08:リストを使ったランダムくじ

```lesson.py

前回のおさらい

line = input().rstrip().split(",")
for enemy in line:
	print(enemy + "が現れた！")

入力
スライム,モンスター,ドラゴン

出力
スライムが現れた！
モンスターが現れた！
ドラゴンが現れた！

```


```lesson.py
line = input().rstrip().split(",")
for enemy in line:
	print(enemy + "が現れた！")

#ランダムな数を作る範囲を調べる

num=len(line)
#print(line)
print("敵は" +str(num)+ "匹")

入力
スライム,モンスター,ドラゴン

出力
スライムが現れた！
モンスターが現れた！
ドラゴンが現れた！
敵は3匹

```


```lesson.py
import random
# 標準入力から1行取得
line = input().rstrip()

# カンマで分割して、リストに代入
janken = line.split(",")

# リストの要素数を変数に代入
num = len(janken)

# リストの中身を出力
print(janken)

# ランダムに選んだリストの要素を出力
print(janken[random.randrange(num)])

```.lessonpy

##randomモジュールをインポート
import random

line = input().rstrip().split(",")
for enemy in line:
	print(enemy + "が現れた！")

#ランダムな数を作る範囲を調べる
num=len(line)
print(line)
print("敵は" +str(num)+ "匹")

##ランダムな数を生成→会心の一撃の対象
attack=random.randrange(num)
#print(attack)

##選んだ数に、「会心の一撃!」と表示
print(line[attack] + "に会心の一撃" + line[attack] +"を倒した")

入力
スライム,モンスター,ドラゴン,魔王

出力
スライムが現れた！
モンスターが現れた！
ドラゴンが現れた！
魔王が現れた！
['スライム', 'モンスター', 'ドラゴン', '魔王']
敵は4匹
魔王に会心の一撃魔王を倒した

```

##演習

1.じゃんけんプログラムを作ろう

```lesson.py

import random
# 標準入力から1行取得
line = input().rstrip()

# カンマで分割して、リストに代入
janken = line.split(",")

# リストの要素数を変数に代入
num = len(janken)

# リストの中身を出力
print(janken)

# ランダムに選んだリストの要素を出力
print(janken[random.randrange(num)])

```

2.おみくじを作ろう

```lesson.py

import random
#標準入力から１行取得
line = input().rstrip()

# 今回は自力で全部書いてみよう！

# カンマで分割して、リストに代入
omikuji = line.split(",")
##リストが生成されたことの確認
print(omikuji)
# リストの要素数を変数に代入
num = len(omikuji)
# リストの中身を出力
print(omikuji)
# ランダムに選んだリストの要素を出力
print(omikuji[random.randrange(num)])

```