質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

3回答

2425閲覧

Ruby:数値以外のものが入力された場合の対応について

saki_program

総合スコア31

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2020/06/27 15:07

ruby

1puts "数当てゲーム。0から9までの数字を1つ選んで、数字を当ててみて。" 2 3loop do 4 boobs = gets.to_i 5 6 if boobs <= 4 7 puts "入力した数値より大きいよ!" 8 9 elsif boobs >= 6 && boobs <= 9 10 puts "入力した数値より小さいよ!" 11 12 else 13 break 14 end 15end 16 17puts "あたり!"

こちらのコードですが、
文字列を入力したとしても、それを数値と判断して答えを返してしまいます。
gets.to_iが数値に変換させるからと分かってはいるのですが・・・。

やりたいことは、数値以外の何かが入力された場合、
”数値以外は入力しないでね。もう一回入力してね。”と返したいのです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

Ruby

1 boobs = loop do 2 line = gets 3 break line.to_i if /^\d$/ =~ line 4 puts "1桁の数字以外は入力しないでね。もう一回入力してね。" 5 end

メソッドに分ける方が良いかもしれません。

投稿2020/06/27 16:46

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saki_program

2020/06/30 10:14

シンプルでわかりやすいコードです。 しかし、私コードの理解ができてはいません。 break line.to_i if /^\d$/ =~ line to_i で変数で受け取った文字列を整数に変換し、 さらに正規表現で判定しているのだと思いますが、 if /^\d$/ =~ line この記述の理解が追いついてません・・・。 甘えてばかりいないで、自分でも調べてみます。
guest

0

str.matchで文字列が数になっているか(0-9のどれかの1回以上の繰り返し)を判定し、str.matchはマッチしなかった場合nilを返すのでnil?で分けてます

ruby

1puts "数当てゲーム。0から9までの数字を1つ選んで、数字を当ててみて。" 2 3def get_int 4 loop do 5 i = gets 6 if !i.match(/[0-9]+/).nil? 7 return i.to_i 8 end 9 puts "数値以外は入力しないでね。もう一回入力してね。" 10 end 11end 12 13loop do 14 boobs = get_int 15 16 if boobs <= 4 17 puts "入力した数値より大きいよ!" 18 19 elsif boobs >= 6 && boobs <= 9 20 puts "入力した数値より小さいよ!" 21 22 else 23 break 24 end 25end 26 27puts "あたり!" 28

投稿2020/06/27 15:21

編集2020/06/28 14:50
tsumugi02

総合スコア29

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saki_program

2020/06/27 15:42

回答ありがとうございます。しかし、こちらは"数値以外は入力しないでね。もう一回入力してね。"と表示された後で、処理そのものが終了してしまい、再度ファイル実行させる必要がございます。再実行をせずに、再入力をうながすようにするにはどうすればよろしいでしょうか?
tsumugi02

2020/06/28 14:50 編集

編集しました
saki_program

2020/06/30 10:15

すみません、ありがとうございます!!
guest

0

r.py

ruby

1def integer?(str) 2 str =~ /\A *[+|-]?\d+ *\z/ 3end 4 5target_num = 5 6puts '数当てゲーム。0から9までの数字を1つ選んで、数字を当ててみて。' 7 8loop do 9 str = gets.chomp 10 unless integer?(str) 11 puts '数値以外は入力しないでね。もう一回入力してね。' 12 next 13 end 14 15 guess = str.to_i 16 if guess == target_num 17 puts 'あたり!' 18 break 19 elsif guess < target_num 20 puts '入力した数値より大きいよ!' 21 elsif target_num < guess 22 puts '入力した数値より小さいよ!' 23 end 24end 25

実行例
イメージ説明

SPACE を許すか、(TAB コードを許すか) 等は適宜 調整してください。

投稿2020/06/28 04:42

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saki_program

2020/06/30 10:16

ありがとうございます。自分じゃまだ書けそうにないコードです!これからも精進します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問