2015-07-20 58 views
-2

对于一个项目,我需要建立一个程序,让我的老师对红宝石运行它。当他运行它,他应该能够按一个bÇd,或ē很多次他想,只要他进入一次一个。这些字母代表商店中的随机物品。我需要在红宝石帮助项目

  • “a” 为$ 0.50 “3所述的美元”
  • “b” 为$ 1.25
  • “c” 是 “为两元4” $ 0.75或
  • “d” 为$ 1.00美元
  • “E”为$ 0.69

如果他按下任何其他字母比5位程序将结束,并会吐出的美元总量。我不知道如何制作代码,因此每三分之一的“a”就是一美元,而“c”也可以,有人可以帮我解决这个问题。

我运行的一切代码,除了“一”和“c”特价商品。

a = 0 
b = 0 
c = 0 
d = 0 
e = 0 

while true 
    letter = gets.chomp 

    if letter == "a" 
    a += 0.50 
    elsif letter == "b" 
    b += 1.25 
    elsif letter == "c" 
    c += 0.75 
    elsif letter == "d" 
    d += 1.00 
    elsif letter == "e" 
    e += 0.69 
    else 
    break 
    end 
end 

print 'Total amount is: ' 
puts '$%.2f'% (a + b + c + d + e) 
+3

你能告诉我们你的代码? –

+3

什么是Ruby 6?请澄清您的具体问题或添加更多的细节,以确切地突出你所需要的。正如目前所写,很难确切地说出你在问什么。请参阅[如何提问](http://stackoverflow.com/help/how-to-ask)页面以获得澄清此问题的帮助。 – vgoff

+1

你似乎并不这么认为,但语法和标点符号很重要。这种意识流是难以逾越的。 – 2015-07-20 00:58:06

回答

1

预先添加金额使得很难说明特殊情况。我会通过计数输入的物品,也许使用Hash开始,像这样:

@items = { 'a' => 0, 'b' => 0, 'c' => 0, 'd' => 0, 'e' => 0 } 

loop do 
    letter = gets.chomp     # get letter from keyboard 
    break unless @items.has_key? letter # break if letter is not in hash 
    @items[letter] += 1     # increment hash's letter value 
end 

输入例如“aaaaabbc”后,@items哈希是这样的:

{ 'a' => 5, 'b' => 2, 'c' => 1, 'd' => 0, 'e' => 0 } 

要计算总金额,我会介绍一个变数:

@total = 0.0 

对于特例“a”,我们有已经确定了我们有多少“3美元”以及剩下多少常规“a”。 Numeric#divmod返回两个值:

5.divmod(3) => [1, 2] # i.e. 1 x 3 + 2 

随着我们@items哈希和@total变量变为:

special_count, regular_count = @items['a'].divmod(3) 
@total += 1.0 * special_count 
@total += 0.5 * regular_count 

添加量的非特殊情况下很简单:

@total += 1.25 * @items['b'] 

我猜你可以自己弄清楚剩下的物品。