Menu
CoddyTech

回顾:优惠码

本课属于 Coddy Ruby 学习旅程的“面向对象编程”单元。第 16 课,共 57 课。

challenge icon

挑战

中等

完成 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 在线编译器