【问题标题】:Multiplying a user's input depending on what he chooses根据用户的选择乘以用户的输入
【发布时间】:2015-11-24 18:18:25
【问题描述】:

我尝试在这里寻找一些类似的案例,但没有成功。

我希望用户首先介绍一笔金额,然后他需要说明天数:“30”、“45”或“60”,而不是其他选项,最后是程序将乘以每个固定数字的金额。这个数字取决于用户选择的天数。如果他选择30,“金额*1.0219”; 45:“金额*1.0336”; 60:“金额 * 1.0467”。

到目前为止,这是我写的代码:

puts "Indicate money to invest"
money_invested = gets.to_i 

puts "Indicate time of investment"
time_investment = gets.to_i

investment_calculation = { 30 => 1.0219, 45 => 1.0336, 60 => 1.0467 }
# will be `nil` if not one of the defined ones

我知道哈希中已经发生了一些可怕的事情,所以我决定就此打住。我不确定=> 是否意味着我想要的意思,即:乘。

【问题讨论】:

  • 您可以使用哈希 (mult = investment_calculation[time]) 来获得乘数,但您也可以使用 if 语句 (mult = if time==30 then 1.0219; elsif time==45 then 1.0336; else 1.0467; end) 或 case 语句 (mult = case time; when 30 then 1.0219; when 45 then 1.0336; else 1.0467; end

标签: ruby hash


【解决方案1】:

您可以将“固定值”存储在哈希中,并根据给定的用户输入访问它们。例如:

fixed_values = { "30" => 1.0219,
                 "45" => 1.0336, 
                 "60" => 1.0467 }

然后你必须将它与* 运算符相乘:

investment_calculation = money_invested * fixed_values[time_investment]

当然,您应该检查用户输入的“天数”是否在您的哈希中可用,以避免错误或不当行为。

【讨论】:

  • 感谢您的回复,非常有用。所以,那时我对哈希并没有那么错。我的问题:我现在如何通知用户结果操作?我正在考虑使用printputs,但是我怎样才能调用哈希来放置这个结果呢?谢谢。
  • 那么结果与哈希无关。它存储在investment_calculation,所以你必须调用puts investment_calculation.to_s
  • 我得到了 *: nil can't be coerced into Fixnuminvestment_calculation = money_invested * fixed_values[time_investment] 行的典型错误。有什么想法吗?
  • Fixnum(例如money_invested)乘以nil 会引发异常。当fixed_values 散列缺少特定键时,它返回nil,因此您使用的time_investment 键不存在于散列中。请记住30"30" 不是一回事;一个是Fixnum,另一个是String。确保密钥类型正确。
  • 非常感谢。我修复了错误,然后能够根据需要生成输出。再次感谢!
【解决方案2】:

尽管您的问题非常基本,但写得很好且易于理解。干得好!

现在跟我来:哈希,在其他一些非 Ruby 语言中也称为“映射”,是一种允许我们将键与值相关联的数据结构。哈希中的键相当于数组中的索引:数组的主要目的是通过索引来存储和访问元素,哈希的主要目的是通过键来存储和访问元素。与通用键值数据结构的其他简单实现相比,散列真的快。

在此示例中,您将键 30 关联到值 1.0219。您可以使用irb 命令在控制台中评估哈希的行为:

> investment_calculation = { 30 => 1.0219, 45 => 1.0336, 60 => 1.0467 }
=> {30=>1.0219, 45=>1.0336, 60=>1.0467}
> investment_calculation[30]
=> 1.0219
> investment_calculation[45]
=> 1.0336
> investment_calculation[100]
=> nil

相比之下,您可以使用具有稀疏值的数组来解决问题,即,将许多值设置为0/nil,但它的内存效率低下,因为大部分内存都用于存储任何内容。

【讨论】:

  • 非常感谢您的解释和客气话 Damiano。它真的鼓励我继续学习。我现在真正理解了数组和哈希之间的区别。现在的问题是:如何显示操作的结果?我的意思是,假设用户选择了money_invested = 1000time_invested = 30。结果数字应为 1021.9。我怎样才能让用户达到这个数字?
猜你喜欢
  • 1970-01-01
  • 2022-06-30
  • 1970-01-01
  • 2015-05-15
  • 2016-02-23
  • 1970-01-01
  • 2019-10-12
  • 1970-01-01
  • 2020-05-24
相关资源
最近更新 更多