回顾:优惠码
本课属于 Coddy Ruby 学习旅程的“面向对象编程”单元。第 16 课,共 57 课。
挑战
中等完成 Coupon 类。工厂函数 Coupon.parse(code) 接受 SAVE 后跟一个百分比(SAVE10),或 OFF 后跟一个金额(OFF5),其他代码则返回 nil。超过常量 MAX_PERCENT(50)的百分比会被限制为 50。工厂函数创建的每个优惠券都会计入类实例变量,可通过 Coupon.issued 读取;将 new 设为私有方法。apply(total) 返回折后总额,最低为 0;to_s 返回 SAVE10 (10% off) 或 OFF5 (5.00 off)。
提供的代码会从第一行读取订单总额,并从后续每行读取一个代码。它会输出 SAVE10 (10% off): 90.00 或 invalid code HELLO,最后输出 issued: 2。
你的代码写在 coupon.rb 中。main.rb 包含提供的输入/输出代码,不能编辑。
亲手试试
require_relative 'coupon'
# 提供的输入/输出代码:保持原样
input = []
while (line = gets)
input << line.chomp
end
total = input[0].to_f
input.drop(1).each do |code|
coupon = Coupon.parse(code)
if coupon
puts format("%s: %.2f", coupon, coupon.apply(total))
else
puts "invalid code #{code}"
end
end
puts "issued: #{Coupon.issued}"
面向对象编程中的所有课
自己练习: Ruby 在线编译器