7日目
今日の学習
Ruby
昨日に引き続き、クイズのプログラムを作成。
問題30問くらい作ってランダムに出題したいな〜と息巻いていたが、ランダムに問題を出すやり方が全く分からず挫折。
とりあえず、用意した問題を順番に出題してもらう形に変更。
classを作るとコンパクトで良いのかなと思い、四苦八苦しながら作成。
こんな感じ。
class Question
attr_accessor :quiz
attr_accessor :answer
attr_accessor :hint
def initialize(quiz, answer, hint)
@quiz = quiz
@answer = answer
@hint = hint
end
def quiz
@quiz
end
def answer
@answer
end
def hint
@hint
end
end
quiz1 = Question.new("整数のオブジェクト名は何でしょうか?", "Integer", "I○○○○r")
quiz2 = Question.new("多次元の配列やハッシュを一次元配列にするためのメソッドは?", "flatten", "f○○○○○n")
quiz3 = Question.new("空の文字列や空の配列の場合、trueを返す真偽判定メソッドは?", "empty?", "e○○○y?")
quiz4 = Question.new("文字列や配列の要素に対して、指定した文字列が存在するか\n確認するための真偽判定メソッドは?", "include?", "i○○○○○e?")
quiz5 = Question.new("特定の文字の出現回数や、配列の要素の数を数えるメソッドは?", "count", "c○○○t")
quiz6 = Question.new("指定した数値の中からランダムな値を表示してくれるメソッドは?", "rand", "r○○d")
quiz7 = Question.new("対象の数値が偶数かどうかを判断するメソッドは?", "even?", "e○○n?")
quiz8 = Question.new("配列に格納されている要素から、nilを取り除くメソッドは?", "compact", "c○○○○○t")
quiz9 = Question.new("配列から重複した要素を取り除いた、新しい配列を返すメソッドは?", "uniq", "u○○q")
quiz10 = Question.new("複数のハッシュを結合させるメソッドは?", "merge", "m○○○e")
$questions = [quiz1, quiz2, quiz3, quiz4, quiz5, quiz6, quiz7, quiz8, quiz9, quiz10]
もっとスマートなやり方がありそうな上に、書いているものが必要なのかどうか、何の役割を果たしているのかも完全に理解していないままとりあえず作成。
このファイルを読み込んで、クイズを出してもらう。
こういう形になった。
require './question'
#何問目か表示
count_q = 1
#得点加算
count_point = 0
puts "Rubyに関するクイズです。"
$questions.each do |question|
puts <<~TEXT
#{count_q}問目
#{question.quiz}
*「hint」と入力すると、ヒントが出ます*
TEXT
loop do
guess = gets.chomp
if question.answer == guess
puts <<~TEXT
正解です!
------------------------------
TEXT
count_point += 10
count_q += 1
break
elsif guess == "hint"
puts <<~TEXT
#{question.hint}
答えを入力してください!
TEXT
else
puts <<~TEXT
不正解です...
答えは、#{question.answer}でした
------------------------------
TEXT
count_q += 1
break
end
end
end
puts "100点満点中「#{count_point}」点でした!"
はじめに、require
で問題のファイルを読み込もうと思ったが、何度やっても問題を呼び出せない。
同じファイルに問題一覧を貼り付けるとしっかり動いたので、呼び出し方に問題があるということが分かる。
rubyで別ファイルの変数を読み込むときに気を付けること - Qiita
この記事を参考にして、変数question
をグローバル変数にしてみると、うまく読み込むことができた。
結局、大文字と小文字の区別の付け方もいまいち分からず、/i修飾子
を試してみたが使い方が悪かったのか、上手くいかなかった。
また、昨日はfor count_q in 1..10
と記述し10問目まで出題してもらおうと思っていたが、問題数が2問以上になるとひとつの問題を10回聞くという悲惨な状況になったので、その部分を削除した。
妥協の上にひとまず完成はしたが、機会があればサロンの方に添削していただこうと思う。
Ruby on Rails
提出した課題のうち、「編集」機能が正常に動作していないとご指摘をいただいた。
自分でも確認してみたところ、確かに編集がうまくできない。
原因は、URLの書き損じや、不要な情報が入っていたことだった。
一連の動作確認をしっかりと行う癖をつけるようにしたい。
また、ドットインストールでの学習も行う。
何度も繰り返して体に染み込ませたい。
Actice Recordに対する理解がかなり足りていない気がするので、明日はそこを重点的に学習する。
今日のやらかし
- URLを指定するとき、ダブルクォーテーションを書き
- けっこうな頻度でカンマを入力し忘れ、エラーが起きる
html
をhtnl
と書いてしまう