ume

ruby エラーから学んだこと

前書き

標準入力で入力された文字が大文字の場合YESと表示 小文字の場合NOと出力するというプログラムを練習で作ろうとしたところその中で失敗をしたのでそこから学んだことを共有させていただきます。

作ろうとしたもの

入力例 B ↓ 入力された文字が大文字ならYES 小文字ならNOと出力されるシンプルなものを作ろうとしました。

私の作るためのプロセス

①入力をするためのコードを書こう⇨ inputs = gets.
②①で作成した変数を大文字か小文字化を判断しよう→includeメソッドを使おう.
③②で判断した後大文字ならYES ,小文字ならNOと出力しよう.

私の失敗

includeメソッドを使ってしまったこと。 私の実際のコード↓

1a = gets 
2if a.include?("A".."Z")
3puts "YES"
4elsif a.include?("a".."z")
5puts "NO"
6end

このコードを実行すると

no implicit conversion of Range into String (TypeError)
2

このようなエラーメッセージが出てきた。 意味はinclude(引数)メソッドの引数がrangeになっているよ。文字列を入力してくれないと変換できないよ という意味でした。 なので

a.include?("A".."Z")

a.include?("A")

("A".."Z") ⇨range.

("A")⇨文字列

学んだこと

文字列の中に指定の文字が入っているか調べる方法はincludeメソッドより正規表現を使うのが一般的です。

a =gets
# puts a =~ /[A-Z]/
if a =~ /[A-Z]/ 
  puts "YES"
elsif 
a =~ /[a-z]/ 

文字列 =~ /[指定の文字]/ ↑文字列の中に指定の文字が含まれているかどうかを調べる。 指定の文字含んでいた場合⇨インデックスを返す 含んでいない場合⇨nilを返す

irb(main):006:0> 1,"aBcd" =~ /[A-Z]/
2=> 1
3irb(main):007:0>2, "abcd" =~ /[A-Z]/
4=> nil

1は大文字のBが1番目にきているから1と出力されている。 プログラミングは0から数える