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

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

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

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

Q&A

2回答

1351閲覧

ruby 数字以外の文字列の判別方法

nanakusa5

総合スコア1

Ruby

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

0グッド

0クリップ

投稿2021/05/13 03:58

現在していること

FizzBuzzの応用問題を解いています。
やりたいことはコード内の「#」に記載しています。

現在、このようなコードでおこなっています。

def fizz_buzz?(str) str =~ /\A\s*[+\-]?[0-9]+\s*\z/ end puts "数字を入力してください" str = gets if fizz_buzz?(str) fizz_buzz = str.to_i begin #指定した文字の出力 if fizz_buzz == 3 puts fizz_buzz #0以下の数字 elsif fizz_buzz <= 0 puts "0以下です" #数字以外の文字列 elsif fizz_buzz != str.to_i puts "数字以外の文字列です" #全角数字 #else #puts "数字が全角入力です" end rescue InputError puts 'エラー!! 数字の読み込みに失敗しました。' end end

ききたいこと

0以下の数字までは正常に動きます。

数字以外の文字列と、全角数字をelsifで判別したいのですが、どのように指定すればよいでしょうか。
正規表現の指定などもやってみましたが、うまくいきませんでした

※今コードに入っているstr.to_iは無視してください。

追記

上記のコードは、以前別ファイルでFizzBuzzの基本問題を解いたコードを参考にしています。

def number?(str) str =~ /\A\s*[+\-]?[0-9]+\s*\z/ end loop{ puts "Please type numbers in half size." str = gets if number?(str) number = str.to_i if number == 0 puts "エラー。0以上の文字を入力してください" break elsif number % 3 == 0 && number % 5 == 0 puts "FizzBuzz" break elsif number % 5 == 0 puts "Buzz" elsif number % 3 == 0 puts "Fizz" elsif number puts number end else puts "エラー。半角数字を入力してください" break end }

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

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

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

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

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

maisumakun

2021/05/13 04:11

> 正規表現の指定などもやってみましたが、うまくいきませんでした どのようなコードを書いて失敗したのでしょうか?
nanakusa5

2021/05/13 04:56

fizz_buzz =~ /[^ -~。-゚]/ こういう感じで、イコールでつなぎました。(指定方法がわからなくて...)
guest

回答2

0

このコードを研究してみてください。

ruby

1def number?(str) 2 str =~ /\A\s*[+\-]?[0-9]+\s*\z/ 3end 4 5def zenkaku_number?(str) 6 str =~ /\A\s*[+ー]?[0-9]+\s*\z/ 7end 8 9loop do 10 begin 11 puts '数字を入力してください' 12 str = gets 13 break if str.nil? # CTRL-D を入力するとループを抜ける 14 rescue StandardError => e 15 puts 'エラー!! 数字の読み込みに失敗しました。' 16 end 17 18 if zenkaku_number?(str) 19 puts '数字が全角入力です' 20 elsif !number?(str) 21 puts '数字以外の文字列です' 22 elsif number = str.to_i 23 if number <= 0 24 puts '0以下です' 25 elsif (number % 3 == 0) && (number % 5 == 0) 26 puts 'FizzBuzz' 27 elsif number % 5 == 0 28 puts 'Buzz' 29 elsif number % 3 == 0 30 puts 'Fizz' 31 else 32 puts number 33 end 34 end 35end 36

投稿2021/05/17 22:51

katoy

総合スコア22324

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

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

0

fizz_buzz?(str)というメソッドを何のために作ったのか、プログラムを書いている途中で忘れてしまったように見えます。
きちんと意識した上で考え直しましょう。

全角数字の判断は半角数字の判断と同じようにやれば良いです。

投稿2021/05/13 04:47

otn

総合スコア84798

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問