初学者向けのRuby勉強会で使った資料　(変数と配列,配列問題集)

# 勉強会の状況
・***１００人以上のプログラミング学習コミュニティ***で勉強会開催。
・***初学者の方向け***
・集まったのは***5~8人***

# 工夫したこと　
・講義形式ではなく***名指しで答えてもらう***　
理由は話しているだけだと眠くなってしまうため

・***問題集を作成*** 
あえて***学んでない内容などを問題に出し調べながらやってもらう***
***調べて試行錯誤してもらうことを大切にした***


# 大変だったこと
・***間違ったことを教えられないというプレッシャー***

・***参加者に飽きさせない工夫***が必要だった。



# 変数
***変数とは***
 名前をつけて一時的に数字や文字などのデータを記憶しておく格納庫のようなものです。
 例えば平均点のプログラムと言われて時間が経ったらわかりますか。

```rb
  puts (60 + 40 + 30 + 70 + 40)/5
```
わかりづらいですよね。
でもこれならわかるはず。

```rb
japanese = 60
 puts japanese

#追加すると
 japanese = 60
 english =  40
 science =  30
 history = 70
 math = 40   #これならわかりやすい

#これで平均点はわかります

 puts (60 + 40 + 30 + 70 + 40)/5

# これも平均点はわかります。
 puts (japanese + english + science + history + math)/5
```

文字でもできます。

```rb
 name = "のり"
 message = "エンジニアです。"
 puts name + "さんは"+ message
```

***一度ラベル付けをすると何回も使いまわせます。***

```rb
 me = "僕"

 puts me + "は" + message
```

# 配列

***簡単にいうとデータのかたまり***のことです。
つまり***データをたくさん詰められる箱のような役割***をしています。
そして、データ１つ１つは箱のようなもので、```要素```と呼んでいます。
例えば、***それぞれ名前(文字列)を格納するようなイメージ****になります。

箱１つ１つには番号が振られていて、
この番号を```添字```と呼んでいます。```添字は0から始まります```。

```rb

#平均点を求めたい
 a = 50
 b = 40
 c = 30
 d = 70
 e = 80
 f = 40
 g = 90
 h = 60

 puts (a + b + c + d + e + f + g + h )/10

# ただこれだと何をやっているのかわかりづらいそこで配列を使います。
 scores = [50,40,30,70,80,40,90,60]

 puts scores


 #添字注目 １番目と最後
 puts scores[-] 


#文字でも同じ
 names = ["ルフィ","ゾロ", "悟空","ベジータ","炭治郎"]
 puts names[-1]

```

# 配列の追加　更新　削除

```rb

# scores = [10,20,30,40,50]

#追加
 scores.push(20)       #*rubyは()を省略してもok
 print scores << 100


 #更新
 scores[1] = 10
# => [10, 10, 30, 40, 50, 20]


 #削除
 scores.delete_at(2)　　　 #*3つ目の要素を削除
# => [10, 20, 40, 50]

```


```rb

#他にも
# push pop shift unshift
# insert
# size count length
# uniq
# compact
# reverse
# sort   sort_by

```


# 配列問題集
問1 ライオンとワニを最後を追加してください. ただしputsは使わない。
 おまけ   ライオンとワニを先頭に追加してください。

```rb　
  animal = ["犬","猫","鳥","象","猿"]
```

問2 trueの数を出力してください。

```rb
 number = [10,20,30,40,50,true,false,nil,true,nil,false]
```

問3 やや難問 下の数字の小数点を切り上げて出力させてください。

```rb
  a = 5.4
```

問4　下のコードを変えずに

```rb
name = "SOCCER"
name = name.downcase
puts name

```

```
SOCCER
SOCCER  
```
と出力されるように変えてください。メソッドは1回しか使いません

問5  下の呼吸をランダムに出力させてください

```rb
hashira = ["水の呼吸","炎の呼吸","風の呼吸","岩の呼吸"]
```


問6　配列の２番目から８番目の要素を出力させてください

```rb
 number = [3,5,6,8,40,20,1,5,7,6,3,9]
```

　問7　難　スーパーサイヤ人と出力させてください。

```rb
 animal = "サイヤ人"
 animal.prepend("スーパー")
 puts animal
```


　問8 やや難  下のレベルの最大値と最小値を１つのメソッドで出力させてください

```rb
level = [5,60,80,100,90,30]
puts level.minmax
```

問9 先頭から1番目から3番目の要素を捨てて配列を出力させてください。
ただし[..]を使わないこと

```rb
 score = [10,20,30,40,50,60]
```

　問10 難　下の配列を変えずに40と50を最後に追加してください。
 ただしpushは使わないこと

```rb
 p [10,20,30].
```


# 配列問題集解答

問１

```rb
 animal = ["犬","猫","鳥","象","猿"]
 print animal.push "猿","ワニ"
 print  animal.unshift "猿", "ワニ"

#ポイント
#答えあ1つではないことがポイントです。
#puts 以外が使えるかポイントです。
```


問２

```rb
 number = [10,20,30,40,50,true,false,nil,true,nil,false]
 puts  number.count(true)

#ポイント
#lengthやsizeと混同しないことがポイント
```
問３　やや難問

```rb
  a = 5.4
 puts a.ceil

#ポイント
#Ruby　四捨五入で検索するのがポイント
#やりたいことを言語化できるかがポイント
```
*補足　　floor小数点きりすて　 小数点ceil　切り上げ  round 四捨五入
このサイトがURLです。
https://uxmilk.jp/43388

問4　

```rb
 name = "soccer"
 puts name.upcase!
 puts name

#ポイント
#upcaseと downcaseの理解ができているかどうか
#!は破壊的メソッドでnameの中のものを大文字に書き換えてしまう。
```

問5 下の呼吸をランダムに出力させてください

```rb
hashira = ["水の呼吸","炎の呼吸","風の呼吸","岩の呼吸"]
 kimetsu = hashira.sample
 puts kimetsu

#ポイント
#Ruby ランダムで言語化できるかがポイント
```

URL
https://www.sejuku.net/blog/72965

問6 

```rb
 number = [3,5,6,8,40,20,1,5,7,6,3,9]
 print number[3..9]
```

問7 

```rb
 doragonball = "サイヤ人"
 doragonball.prepend("スーパー") 
 puts doragonball 
#ポイント
#初学者にとってマニアックなのでメソッドを調べて試行錯誤できるかが重要
```
https://techacademy.jp/magazine/19880

問8 

```rb
 level = [5,60,80,100,90,30]
 puts level.minmax
```

問9

```rb
 score = [10,20,30,40,50,60]
 puts score.drop(3)
#ポイント
# 先頭の 要素を捨てて、残りの要素を出力
```

問10

```rb
 p [10,20,30].concat([40,50]) 

# 文字列や配列同士を結合できます。
# 文字列オブジェクト.concat(連結する文字列オブジェクト)
# 配列オブジェクト.concat(連結する配列オブジェクト)
```