我有此产品列表,我想实现一种根据用户购买量来更改商品价格的方法。因此,我创建了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方法,它定义了所有价格规则,但不知道如何实现。
答案 0 :(得分:1)
考虑到您正在尝试实现以下逻辑的事实
这是必需的代码:
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}"
希望这会有所帮助。