プログラミング備忘録

プログラミングの学習状況をメモしています

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を指定するとき、ダブルクォーテーションを書き
  • けっこうな頻度でカンマを入力し忘れ、エラーが起きる
  • htmlhtnlと書いてしまう