试图实现一种打折产品价格的方法(Ruby)

时间:2018-07-14 18:47:15

标签: ruby methods instance-variables

我有此产品列表,我想实现一种根据用户购买量来更改商品价格的方法。因此,我创建了3种产品:

item1 = Item.new("item1", 5.00)
item2 = Item.new("item2", 10.00)
item3 = Item.new("item3", 8.00)

然后我有一个逻辑,说对于项目2,用户可以以1的价格购买2个项目,如果对于项目2,如果用户购买3个或更多,则每个单位有1美元的折扣。

user_input = nil
item_list = []

until user_input == "stop"
  puts 'Which item would you like to add? (type "stop" to exit purchase)'
  user_input = gets.chomp
  if user_input == "item1"
    if item_list.count("item1") % 2 == 0
      item1.price = 2.5
    else
      discount_item1 = item_list.count("item1") - 1
      item1.price = (discount_item1 * 2.5) + 5.00
    end
    item_list << item1
  end

  if user_input == "item2"
    if item_list.count("item2") >= 3
      tshirt.price = 19.00
    else
      tshirt.price = 20.00
    end
    item_list << item2
  end

  if user_input == "item3"
    item_list << item3
  end
end


print "Items:"
sum = item_list.inject(0) do |sum, item|
  print " #{item.name},"
  sum += item.price
end
puts "Total: #{sum}"

显然,逻辑不起作用。有人对此有任何想法吗?我当时在考虑做一个Checkout类,其中有一个price_rules方法,它定义了所有价格规则,但不知道如何实现。


1 个答案:

答案 0 :(得分:1)

考虑到您正在尝试实现以下逻辑的事实

  1. 第1项,用户可以以1的价格购买2项。
  2. 如果用户购买3个或更多商品,则第2项将有每单位1美元的折扣。
  3. 第3项没有折扣

这是必需的代码:

user_input = nil
item_list = []
item1_count = 0
item2_count = 0
item3_count = 0
until user_input == "stop"
  puts 'Which item would you like to add? (type "stop" to exit purchase)'
  user_input = gets.chomp
  if user_input == "item1"
    item1_count += 1
  elsif user_input == 'item2'
    item2_count += 1
  elsif user_input == "item3"
    item3_count += 1
    item_list << Item.new('item3', 8)
  end
end

if item1_count.even?
  item1_count.times {item_list << Item.new('item1', 2.5)}
else
  (item1_count-1).times {item_list << Item.new('item1', 2.5)}
  item_list << Item.new('item1', 5)
end

item2_price = (item2_count >= 3) ? 19 : 20
item2_count.times {item_list << Item.new('item2', item2_price)}


print "Items:"
sum = item_list.inject(0) do |sum, item|
  print " #{item.name},"
  sum += item.price
end
puts "Total: #{sum}"

希望这会有所帮助。