LoginSignup
1

More than 5 years have passed since last update.

【超初学者向け】近所の小学生のために九九勉強アプリをつくろう

Posted at

※この記事は「FizzBuzz・・・聞いたことあるけどよくわからんぞ」「とりあえず繰り返しとかifとかはなんとなくやったやで」「プロゲートの初級編は一応一周したけど自信全く無いやで」というあたりのガチ初学者向けです。


こんにちは。以前も初学者の分際で初学者向け記事を書きましたが、大器晩成型なのでまた初学者向けの記事を書いています。

せっかくプログラミングを始めたなら、やっぱ人の役に立ちたい!日本社会の発展に貢献したい!

ということで九九の勉強に四苦八苦してる子のために超シンプルプル九九勉強アプリケーションを作りました。


kuku.rb
puts "九九のおべんきょうをはじめよー!!"
puts "一桁の掛け算の問題を10問出すよ"
puts "答えの数字を入力してエンターキーを押してね!"
puts "じゃあいくよー!"
sleep(0.5)
puts "3"
sleep(1)
puts "2"
sleep(1)
puts "1"
sleep(1)

count = 0
wrong_questions = Array.new
10.times do
  x = rand(9) + 1
  y = rand(9) + 1
  puts "#{x} ×  #{y} = "
  user_answer = gets.chomp.to_i
  true_answer = x*y

  if user_answer == true_answer
    puts "正解!"
    count += 1
    puts ""
  else
    puts "ちがうよ!"
    puts "正解は#{true_answer}"
    wrong_questions << [x, y, true_answer]
    puts ""
  end
end

puts "おつかれさまー!"
puts ""
puts "正解数:#{count}"
puts "間違えた問題は・・・"
if count == 10
  puts "なし!全問正解!すごい!!天才!!!!!!"
else
  wrong_questions.each do |w|
    puts "#{w[0]} ×  #{w[1]} = #{w[2]}"
  end
end

できる人から見たらこれをアプリと呼ぶのか・・?というレベルだと思いますが、勉強始めたてのころの僕が見たらわけがわからなさすぎて白目むく程度には複雑だと思うので簡単に解説していきます!


【解説】

流れとしては
①1~9からランダムに数字を一つ選んで、xyとする
②内部でx × yを計算して、答えをtrue_answerとする
③ユーザーが入力した数字をuser_answerとして、user_answertrue_answerが一致しているかを確認する
④一致してたら正解とし、count を1増やす。このcountが最後にそのまま正解数になる
⑤一致してなかったらその時のxytrue_answerを配列wrong_questionsに追加、つまり保存して、最初に戻る
⑥10回繰り返したらループが終わり、正解数countを表示。全問正解ならそのまま終わり、間違えていたらwrond_questionsに値が残ってるのでそれを九九の問題になるように表示

こんな感じです。


10.times do
これは「10回以下の内容を繰り返してね」というコマンドです。使いやすいのでサクッとググったら覚えちゃいましょう。

  x = rand(9) + 1
  y = rand(9) + 1

ここでは「0~8からランダムな数字をひとつ得る」というrand()に1を足すことで、「1~9からランダムな数字をひとつ得る」ようにしています。

answer = gets.chomp.to_i
これは「ユーザーから入力(標準入力)を受け付ける」というgets.chompに、得た値をinteger(整数型)に変換するというto_iをくっつけたものです。
ユーザーから整数の入力を受付ける時のテンプレです。詳しくはググれば出てくると思いますが、この部分は全体のロジックには全然関わらないので、まずは「こういうもの」と覚えてしまった方がいいと思います。


if user_answer == true_answer
    puts "正解!"
    count += 1
    puts ""
  else
    puts "ちがうよ!"
    puts "正解は#{x*y}"
    wrong_questions << [x, y, true_answer]
    puts ""
  end

ここが九九アプリのキモになっている部分、つまり「答えが合ってるか否かの判断」と「正解数のカウント」と「間違えた問題の保存」をやってます。

まず
if user_answer == true_answer
で一致しているかを確認し・・・

もし一致してる、つまりユーザーの入力が合ってたら
"正解!"と表示し、countを1増やします。
このcountはこのループの外側にあるので、この10.times doのループが最初に戻ってもcountはリセットされません。
こうやって「正解数」をcountという変数に「保存」と言えます。

また、wrong_questionsも同じです。間違えた問題のx, y, true_answerの組み合わせを、ループの外側にある配列wrong_questinosに入れておくことで「保存」してます。


あとは、ループが終わったら正解数countをそのまま表示し、wrong_questionsに保存されている間違えた問題をいい感じに表示するだけです。

wrond_questionsは二重配列で入っています。
例えば2 x 3 = 6という問題と5 x 8 = 40という問題を間違えたならば
wrong_questions = [[2, 3, 6], [5, 8, 40]]という形で入っているはずです。

これを順番に取り出していきたいので・・・
wrong_questions.each do |w|
とすることで「配列から配列を順番に取り出して」、wに入れています。
x, y, true_answerの順番は決まっているので、あとは普通に配列から取り出すように
x = w[0]y = w[1]true_answer = w[2]
として表示していくだけです。


以上です!Qiitaはデキるプログラマの方が多いので、ほんとうに初学者向けの記事が少ないように感じます。
僕も詰まったことがあるし、ほんとうに初学者の人が詰まりそうなところを解説できれば・・・!と思って書きました。

ではでは、ちょうど春休みですし、さっそく九九アプリを作って近所の小学生相手にイキり倒し、ご近所の算数力向上に貢献しましょう!!!!!!!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1