0

私はいくつかの基本的なレッスンに取り組んでいる初心者です。

新しいユーザーを作成しようとし、そのユーザーがすでにハッシュに含まれている場合は、ユーザーに再度プロンプトを表示しますが、ユーザーがnilになったら、パスワードを要求してから、ハッシュに追加します。私は多くの試みをしました。これはそのうちの1つにすぎません。

users = {
    user_1: 2
}


puts "Create New User: Type your username"
new_user = gets.chomp

if users[new_user.to_sym].nil?
  puts "Type in a Password"
  pass = gets.chomp
  users[new_user.to_sym] = pass.to_i

elsif users[new_user.to_sym] != nil
  puts "We already have that user."
  loop do
    if users[new_user.to_sym] != nil
      puts "Try Again"
      ta = gets.chomp
    break if users[ta.to_sym] == nil
   end
  end
end

"when, then", "if/else"、、など"until"を使ってみ"while"ました(これらは私が知っている、または少なくとも学習している基本的な機能であり、可能であればこれらのバリエーションを使用して解決したいと思います)が、毎回どうすればよいかわからないようです新しいユーザー/パスワードをハッシュに追加するという私の主な目標に戻って、ループを停止するユーザー名を適用します(最終的にnilになります)。

4

2 に答える 2

1

あなたの主な苦労は、ユーザーから有効な名前を取得した後、パスワードの設定に戻る方法だと思います。このコードをメソッドに抽出して呼び出すことができます。

users = {
  "user_1" => 2
}


def get_username
  puts "Create New User: Type your username"
  new_user = gets.chomp
end

def get_password users, name
  puts "Type in a Password"
  pass = gets.chomp
  users[name] = pass.to_i
end  

new_user = get_username

if users[new_user].nil?
  get_password users, new_user
else
  puts "We already have that user."

  # ruby's do-while loop. Or, rather, do-while-not in this case :)
  begin
    new_user = get_username
  end unless users[new_user].nil?

  get_password users, new_user
end

また、(シンボルではなく) 文字列をキーとして使用するようにコードを変更しました。そのような記号の使用は避けるべきです。これには重大な結果が伴います (シンボルはガベージ コレクション可能ではないため、シンボルを作成しすぎるとメモリ リークが発生する可能性があります)。

于 2013-03-14T18:21:35.703 に答える
0

シングルユーザーの作成:

users = {
      user_1: 2
}


check=true
puts "Create New User: Type your username"
new_user = gets.chomp

while(check) do
  if users[new_user.to_sym] != nil
    puts "We already have that user."
    if users[new_user.to_sym] != nil
      puts "Try Again"
      puts "Enter username"
      new_user = gets.chomp
    end
  elsif users[new_user.to_sym].nil?
    puts "Type in a Password"
    pass = gets.chomp
    users[new_user.to_sym] = pass.to_i
    break
  end

end
于 2013-03-14T18:30:48.273 に答える