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

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

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

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

Q&A

解決済

3回答

2213閲覧

rubyのunless文内にif分の条件を付け加えたときの実行の有無

ayu

総合スコア212

Ruby

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

0グッド

0クリップ

投稿2015/08/24 11:25

rubyの文法を勉強していて、自分なりに改造しようとして、実行されない理由がわかりませんでした。

puts "パスワードを入力してください" password = gets.chomp # 変数password_lengthにpasswordの文字数を代入してください password_length = password.length # password_lengthが0でない場合に"パスワードが入力されました"とputsしてください unless password_length == 0 puts "パスワードが入力されました" else puts "ちゃんと入れろゴルァ!" password = gets.chomp if password_length > 4 && password_length < 10 puts "パスワードは適切な長さです" end end # password_lengthが4文字以上10文字以下の場合に"パスワードは適切な長さです" とputsしてください if password_length > 4 && password_length < 10 puts "パスワードは適切な長さです" end

この文章のここの部分です。

unless password_length == 0 puts "パスワードが入力されました" else puts "ちゃんと入れろゴルァ!" password = gets.chomp if password_length > 4 && password_length < 10 puts "パスワードは適切な長さです" end end # password_lengthが4文字以上10文字以下の場合に"パスワードは適切な長さです" とputsしてください if password_length > 4 && password_length < 10 puts "パスワードは適切な長さです" end

ここのunlessからのif分で入力せずに、パスワードを再入したときに、パスワードを5文字にしても、数値が表示されるだけです。
また、条件分の中で入力されない限りループを回したいとも考えましたが、なかなか思いつきませんでした。
何かいい手はありますでしょうか?
if notでもif分でも構いません。
宜しくお願いしますm(_ _)m

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

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

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

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

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

guest

回答3

0

passwordを再入力して貰った後に、password_lengthにパスワードの長さを再代入しないと、古いパスワードの長さのままになります。

Ruby

1 puts "ちゃんと入れろゴルァ!" 2 password = gets.chomp 3 password_length = password.length # もう一回長さを入れないと! 4 if password_length > 4 && password_length < 10 5 puts "パスワードは適切な長さです"

こんな感じで修正すれば、想定通りに動くかなとも思います。。

投稿2015/08/24 11:38

raccy

総合スコア21733

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

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

ayu

2015/08/24 13:53

うまく動きました。 ありがとうございます。
guest

0

ベストアンサー

数値が表示されるだけです。

数値を表示するコードはどこにも無いので、勘違いではないでしょうか?

"パスワードは適切な長さです"と表示されないのは、password_lengtを再設定していないからです。
あと、password_length > 4 && password_length < 10だと、「5以上9以下」ですよ。

望みの長さの文字列が入力されるまでループするには、breakを使うと良いでしょう。

Ruby

1password = nil #これを書かないと変数がdo/end内ローカルになる 2password_length = nil #同上 3loop do 4 puts "4文字以上10文字以下のパスワードを入力してください" 5 password = gets.chomp 6 password_length = password.length 7 if (4..10).include? password_length 8 puts "パスワードは適切な長さです" 9 break 10 end 11 puts "ちゃんと入れろゴルァ!" 12end

あるいは、もっとシンプルに、

Ruby

1password = loop do 2 puts "4文字以上10文字以下のパスワードを入力してください" 3 pw = gets.chomp 4 if (4..10).include? pw.length 5 puts "パスワードは適切な長さです" 6 break pw 7 end 8 puts "ちゃんと入れろゴルァ!" 9end 10password_length = password.length

とか。普通は、メソッドにするんじゃないでしょうか。

投稿2015/08/24 11:52

otn

総合スコア84380

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

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

ayu

2015/08/24 13:52

自分が知らない知識があり、大変勉強になりました! ありがとうございます。
guest

0

適切な長さのパスワードが入力されるまでループするような関数を書いてみました。

ruby

1ef input_password 2 puts 'パスワードを入力してください' 3 4 loop do 5 password = gets.chomp 6 7 if password.length > 0 8 puts 'パスワードが入力されました' 9 if password.length.between?(4, 10) 10 puts ' パスワードは適切な長さです' 11 return password 12 end 13 puts ' パスワードの長さが不適です' 14 end 15 16 puts 'ちゃんと入れろゴルァ!' 17 end 18end 19 20password = input_password 21puts password

投稿2016/02/10 13:37

katoy

総合スコア22322

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

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

ayu

2016/02/11 02:42

katoyさん ずいぶん前の質問に回答していただき、ありがとうございますm(_ _)m 自分も前から成長していると思うので、懐かしいなって感じました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問