0

我是一名初学者,正在学习一些基本课程。

尝试创建一个新用户,如果该用户已经在哈希中,再次提示用户,但是一旦用户为 nil,要求输入密码,然后添加到哈希中。我有过很多尝试。这只是其中之一。

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"等(这些是我知道的基本功能,或者至少正在学习,并且希望尽可能使用这些功能的一些变体来解决),但每次我似乎都无法弄清楚如何应用停止循环的用户名(最终为零),回到我的主要目标,将新的用户/密码添加到哈希中。

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 回答