2015-07-20 3 views
-2

Для проекта мне нужно создать программу, которая позволяет моему учителю запускать ее на рубине. Когда он запускает его, он должен быть в состоянии нажать в, б, гр, д или е столько раз, сколько он хочет, до тех пор, как он входит один на один раз. Эти буквы представляют собой случайные элементы в магазине.Мне нужна помощь в рубине для проекта

  • "а" составляет $ 0,50, или "3 за доллар"
  • "б" составляет $ 1,25
  • "с" составляет $ 0,75 или "четыре за два доллара"
  • "d" составляет $ 1,00
  • «е» $ 0,69

Если он нажимает любую другую букву, чем пять упомянутой программы закончится, и выплюнуть общую сумму долларов. Я понятия не имею, как сделать код, чтобы каждый третий «а» был долларом, а также «с», может кто-то, пожалуйста, помогите мне в этом.

У меня есть код для всех, кроме спецпредложений «a» и «c».

a = 0 
b = 0 
c = 0 
d = 0 
e = 0 

while true 
    letter = gets.chomp 

    if letter == "a" 
    a += 0.50 
    elsif letter == "b" 
    b += 1.25 
    elsif letter == "c" 
    c += 0.75 
    elsif letter == "d" 
    d += 1.00 
    elsif letter == "e" 
    e += 0.69 
    else 
    break 
    end 
end 

print 'Total amount is: ' 
puts '$%.2f'% (a + b + c + d + e) 
+3

Вы можете показать нам свой код? –

+3

Что такое Ruby 6? Просьба уточнить вашу конкретную проблему или добавить дополнительные сведения, чтобы точно указать, что вам нужно. Как это написано в настоящее время, трудно точно сказать, что вы просите. См. Страницу [Как спросить] (http://stackoverflow.com/help/how-to-ask), чтобы помочь прояснить этот вопрос. – vgoff

+1

Кажется, вы так не думаете, но грамматика и пунктуация важны. Этот поток сознания непроницаем. –

ответ

1

Добавление сумм авансом затрудняет учет особых случаев. Я хотел бы начать с подсчета введенные элементы, возможно используя Hash, что-то вроде:

@items = { 'a' => 0, 'b' => 0, 'c' => 0, 'd' => 0, 'e' => 0 } 

loop do 
    letter = gets.chomp     # get letter from keyboard 
    break unless @items.has_key? letter # break if letter is not in hash 
    @items[letter] += 1     # increment hash's letter value 
end 

После ввода, например, «aaaaabbc», то @items хэш будет выглядеть следующим образом:

{ 'a' => 5, 'b' => 2, 'c' => 1, 'd' => 0, 'e' => 0 } 

Для вычислить общую сумму, я бы ввел переменную:

@total = 0.0 

Для специального случая «а», мы ха чтобы определить, сколько у нас «3 за доллар» и сколько регулярных «а» осталось. Numeric#divmod возвращает оба значения:

5.divmod(3) => [1, 2] # i.e. 1 x 3 + 2 

С нашей @items хэш и @total переменная, которая становится:

special_count, regular_count = @items['a'].divmod(3) 
@total += 1.0 * special_count 
@total += 0.5 * regular_count 

Добавление суммы для неспециального случае тривиальна:

@total += 1.25 * @items['b'] 

Я думаю, вы можете сами выяснить оставшиеся предметы.

Смежные вопросы