对于一个项目,我需要创建一个程序,允许我的老师在ruby上运行它。当他运行它时,他应该能够按 a , b , c , d 或 e 尽可能多次,只要他一次进入一个。这些字母代表商店中的随机商品。
如果他按下任何其他字母,而不是提到的那个,该程序将结束,并将吐出总金额。我不知道如何制作代码所以每三分之一“a”是一美元而且也是“c”,有人可以帮我解决这个问题。
除了“a”和“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 )
答案 0 :(得分: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
输入例如" a a a a a b b c"后,@items
哈希将如下所示:
{ 'a' => 5, 'b' => 2, 'c' => 1, 'd' => 0, 'e' => 0 }
要计算总金额,我会引入一个变量:
@total = 0.0
对于特殊情况" a",我们必须确定一个" 3一美元" 3我们有多少常规" a"'s。 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']
我想你可以自己弄清楚剩余的物品。