【问题标题】:Collecting and Storing User Input with Ruby使用 Ruby 收集和存储用户输入
【发布时间】:2014-09-09 14:55:03
【问题描述】:

我正在开发一个程序,该程序要求用户输入有关最近金融交易的信息,并希望在将用户输入存储到空数组中并在被调用时能够显示该信息方面获得一些帮助。现在空数组(它实际上是一个哈希)没有收到任何东西。

在编程和一般的 Ruby 方面,我非常喜欢绿色,并且希望得到任何帮助!

###I want transactions (below) to house user_input so that when a user
###chooses 'display' it will return what the user has input.
transactions = {}

puts "What would you like to do?"
puts "-- Type 'add' to add a transaction."
puts "-- Type 'update' to update a transaction."
puts "-- Type 'display' to display all transactions."
puts "-- Type 'delete' to delete a transaction."

choice = gets.chomp.downcase
case choice
when 'add'
  puts "What transaction would you like to add?"
  user_input = gets.chomp
  if transactions[user_input.to_sym].nil?
    puts "What's the rating? (Type a number 0 to 4.)"
    rating = gets.chomp
    transactions[user_input.to_sym] = rating.to_i
    puts "#{user_input} has been added with a rating of #{rating}."
  else
    puts "That transaction already exists! Its rating is #{transactions[title.to_sym]}."
  end
when 'update'
  puts "What transaction do you want to update?"
  user_input = gets.chomp
  if transaction[title.to_sym].nil?
    puts "Transaction not found!"
  else
    puts "What's the new rating? (Type a number 0 to 4.)"
    rating = gets.chomp
    transactions[title.to_sym] = rating.to_i
    puts "#{user_input} has been updated with new rating of #{rating}."
  end
when 'display'
  transactions.each do |receipt, rating| ###figure out how to change this so that the
    puts "#{receipt}: #{rating}"         ###user's input is returned
  end
when 'delete'
  puts "What transaction do you want to delete?"
  user_input = gets.chomp
  if transactions[user_input.to_sym].nil?
    puts "Transaction not found!"
  else
    transactions.delete(user_input.to_sym)
    puts "#{user_input} has been removed."
  end
else
  puts "Sorry, I didn't understand you."
end

【问题讨论】:

    标签: ruby arrays user-input storing-information


    【解决方案1】:

    撇开获取用户输入的方式不谈,您可能会发现您只是使用了错误类型的对象来存储数据。例如,考虑以下使用 Struct 对象的 Array 重写。

    require 'pp'
    
    class Transaction < Struct.new(:title, :rating)
    end
    
    transactions = []
    transactions.push(Transaction.new 'example1', 1)
    transactions.push(Transaction.new 'example2', 3.5)
    
    pp transactions
    
    t = transactions.find { |s| s.title == 'example1' }
    t.rating = 4
    
    pp transactions
    

    您可以扩展 Transaction 以直接征求用户输入、清理成员值或使用 highline 之类的东西来创建某种菜单。在我看来,这方面的细节并不像能够以合理和一致的方式设置和检索 Struct 的成员那么重要,但你的里程可能会有所不同。

    【讨论】:

      【解决方案2】:

      这是http://gistpages.com/2013/07/28/ruby_arrays_insert_append_length_index_remove的一些信息

      你可以使用类似的东西

      transaction = Array.new
      user_input = gets.chomp
      transaction.insert(user_input)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-07
        • 2015-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-17
        相关资源
        最近更新 更多