Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 1.9.3创建新用户/密码并在DB中重新提示?_Ruby_Loops - Fatal编程技术网

Ruby 1.9.3创建新用户/密码并在DB中重新提示?

Ruby 1.9.3创建新用户/密码并在DB中重新提示?,ruby,loops,Ruby,Loops,我是一个初学者,正在上一些基础课 尝试创建一个新用户,如果该用户已经在哈希中,请再次提示该用户,但一旦该用户为零,请输入密码,然后添加到哈希中。我尝试过很多次。这只是其中之一 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 =

我是一个初学者,正在上一些基础课

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

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”
,等等(这些是我知道的基本函数,或者至少是我正在学习的函数,如果可能的话,我想使用这些函数的一些变体来解决),但每次我似乎都不知道如何应用停止循环的用户名(最终为零),回到我的主要目标,向散列中添加一个新的用户/密码。

我认为,您的主要难题是,在您设法从用户处获得有效名称后,如何返回到设置密码。您可以将此代码提取到一个方法中,然后调用它

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
我还将代码更改为使用字符串作为键(而不是符号)。你应该避免使用那样的符号。它具有严重后果(符号不可垃圾回收,因此如果创建太多符号,可能会泄漏内存)。

创建单个用户:

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

您是否只需要创建一个用户?或者很多?我需要很多设施,虽然一次只需要一个。