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

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

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

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

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

1回答

2329閲覧

星座を返すアプリケーションを作成したい

xyjs

総合スコア13

Ruby

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

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

2クリップ

投稿2020/06/17 16:51

編集2020/06/17 18:04

前提・実現したいこと

ユーザーから生年月日を受け取って星座を返すプログラムを作成したい。

要件

  • 生年月日の標準入力を受け取る
  • 当てはまる星座を返却する

参考

  • 生年月日入力フォーマット: {yyyy-mm-dd}
  • 出力星座フォーマット: あなたの星座は{ 当てはまる星座名 }です!

該当のソースコード

Ruby

1puts "生年月日を入力してください" 2puts "{yyyy-mm-dd}" 3input = gets.chomp 4yyyy, mm, dd = input.split("-").map(&:to_i) 5 6if mm == 3 7 if 21 <= dd && dd <= 31 8 puts "あなたの星座は牡羊座です!" 9 elsif 1 <= dd && dd <= 20 10 puts "あなたの星座は魚座です!" 11 else 12 puts "" 13 end 14end 15 if mm == 4 16 if 1 <= dd && dd <= 19 17 puts "あなたの星座は牡羊座です!" 18 elsif 20 <= dd && dd <= 30 19 puts "あなたの星座は牡牛座です!" 20 else 21 puts "" 22 end 23end 24if mm == 5 25 if 1 <= dd && dd <= 20 26 puts "あなたの星座は牡牛座です!" 27 elsif 21 <= dd && dd <= 31 28 puts "あなたの星座は双子座です!" 29 else 30 puts "" 31 end 32end 33if mm == 6 34 if 1 <= dd && dd <= 21 35 puts "あなたの星座は双子座です!" 36 elsif 22 <= dd && dd <= 30 37 puts "あなたの星座はかに座です!" 38 else 39 puts "" 40 end 41end 42if mm == 7 43 if 1 <= dd && dd <= 22 44 puts "あなたの星座はかに座です!" 45 elsif 23 <= dd && dd <= 31 46 puts "あなたの星座は獅子座です!" 47 else 48 puts "" 49 end 50end 51if mm == 8 52 if 1 <= dd && dd <= 22 53 puts "あなたの星座は獅子座です!" 54 elsif 23 <= dd && dd <= 31 55 puts "あなたの星座は乙女座です!" 56 else 57 puts "" 58 end 59end 60if mm == 9 61 if 1 <= dd && dd <= 22 62 puts "あなたの星座は乙女座です!" 63 elsif 23 <= dd && dd <= 30 64 puts "あなたの星座は天秤座です!" 65 else 66 puts "" 67 end 68end 69if mm == 10 70 if 1 <= dd && dd <= 23 71 puts "あなたの星座は天秤座です!" 72 elsif 24 <= dd && dd <= 31 73 puts "あなたの星座は蠍座です!" 74 else 75 puts "" 76 end 77end 78if mm == 11 79 if 1 <= dd && dd <= 22 80 puts "あなたの星座は蠍座です!" 81 elsif 23 <= dd && dd <= 30 82 puts "あなたの星座は射手座です!" 83 else 84 puts "" 85 end 86end 87if mm == 12 88 if 1 <= dd && dd <= 21 89 puts "あなたの星座は射手座です!" 90 elsif 22 <= dd && dd <= 31 91 puts "あなたの星座は山羊座です!" 92 else 93 puts "" 94 end 95end 96if mm == 1 97 if 1 <= dd && dd <= 19 98 puts "あなたの星座は山羊座です!" 99 elsif 20 <= dd && dd <= 31 100 puts "あなたの星座は水瓶座です!" 101 else 102 puts "" 103 end 104end 105if mm == 2 106 if 1 <= dd && dd <= 18 107 puts "あなたの星座は水瓶座です!" 108 elsif 19 <= dd && dd <= 29 109 puts "あなたの星座は魚座です!" 110 else 111 puts "" 112 end 113end

どこがおかしいか教えていただきたいです。

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

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

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

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

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

dodox86

2020/06/17 17:06

現在のコードで、どういう問題があるのですか?
stdio

2020/06/18 01:10

PHPの仕様は詳しくありませんが、文字列と数字を比較しようとして違うとか言われているとかですかね。 それなら一度mmとddの型変更をしてみてはいかがでしょうか?
dodox86

2020/06/18 01:42

>stdioさん PHPではなく、Rubyですが。。。(タグにも付いています)また、オブジェクトのクラス自体はInteger(整数)になっているようです。 irb(main):006:0> yyyy,mm,dd = gets.chomp.split("-").map(&:to_i) 2020-06-18 => [2020, 6, 18] irb(main):007:0> p yyyy.class Integer => Integer irb(main):008:0> p mm.class Integer => Integer irb(main):009:0> p dd.class Integer => Integer
stdio

2020/06/18 05:25

Rubyでしたか、これは失礼しました。 それなら、どんな問題があるのでしょうかね。 プログラムを見ている限り、特にエラー等もなさそうですが...
winterboum

2020/06/18 07:52

ざっと見ではおかしくないですが、期待どおりの動きでないとすると、どこでしょう? それをいただかないときついです
winterboum

2020/06/18 08:01

んでもって、星座の変わる日が年に依ってすこしずつ動くのご存知ですか?
guest

回答1

0

ベストアンサー

勝手に推定するに「一応動くものはできたのだが、『より良いプログラム』にするという視点でおかしな所はないか?」という問いであろうと考えます。
良い の判断にはどういう物差しを使うのか、がありここは好みとか思想とか哲学が入ってくるので色々ですが

  1. 短い
  2. 場合分けやloopのネストが浅い
  3. 似たような処理の繰り返しが(すく)ない

辺りはまぁ共通だろうと思います。
その視点でみると、2はまぁ良いとして 1,3に引っかかります。

例えば

[["牡羊",[3,21..31],[4,1..19], ["牡牛",[4,20..30],[5,1..20], : : ]

と言うような配列を用意して、loopしてif,elsif を一組で済ませるというのを考えてみてください。

個人的な好みとしては
yday = Time.new(*(input.split("-").map(&:to_i))).ydayして1/1からの経過日数を得て、["牡羊",81..110],,,, にしたいところです。
これだとloopも無くすことができるかも。
なのですがこれだとうるう年かどうかで二組用意してどちらを使うかの判定が必要になるからちとやだな、、との思いもあります。

投稿2020/06/18 23:43

winterboum

総合スコア23567

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問