【问题标题】:Trying to implement a method to discount products' prices (Ruby)尝试实现一种折扣产品价格的方法(Ruby)
【发布时间】:2018-12-22 20:34:37
【问题描述】:

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

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

然后我有这样的逻辑,即对于 item2,用户可以以 1 的价格购买 2 个项目,然后对于 item 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 ,其中我有一个方法pricing_rules ,它定义了所有价格规则,但不知道如何实现它。


【问题讨论】:

  • 您能否通过案例更准确地说明您的条件。这样调试代码会容易得多。

标签: ruby methods instance-variables


【解决方案1】:

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

  1. Item1 用户可以以 1 的价格购买 2 件物品
  2. 如果用户购买 3 件或更多件商品 2,则每件商品可享受 1 美元的折扣。
  3. Item3 无折扣

这是所需的代码:

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}"

希望这会有所帮助。

【讨论】:

  • 感谢您的回复,但它不起作用。我尝试将 item2 添加了 3 次,总共 60 应该是 57
  • 感谢您指出错误。我已编辑代码。它现在应该可以工作了。
  • OP 没有提到任何关于item1 的约束。问题说,2个item2可以以1的价格买到。
  • @AtulVaibhav 这是一个打字错误,反正答案已被接受
猜你喜欢
  • 2019-04-18
  • 1970-01-01
  • 1970-01-01
  • 2018-07-06
  • 2020-01-15
  • 1970-01-01
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
相关资源
最近更新 更多