2017-10-06 7 views
3

Ich möchte ein Programm erstellen, wo ein Benutzer im Grunde eine Einkaufsliste "erstellt", wo der Benutzer Artikel und Preis eingibt, bis sie beenden möchten. Wenn der Benutzer 'q' oder 'Q' eingibt, sollte das Programm den Benutzer nicht mehr auffordern und stattdessen die Zwischensumme berechnen, eine nominale Umsatzsteuer von 6% hinzufügen und das Gesamtergebnis anzeigen.Ruby - Wie Zwischensumme von Artikeln in einer Einkaufsliste berechnen

Ich habe den ersten Teil unten, wo Benutzer ihren Artikel und Preis eingibt, aber ich weiß nicht, wie man es mir die Zwischensumme sagen und ihnen eine Quittung geben. Ich habe es 7 Stunden lang versucht !! Wenn ich es laufen, es soll sagen:

Enter an item and its price, or ’Q/q’ to quit: eggs 2.13 
Enter an item and its price, or ’Q/q’ to quit: milk 1.26 
Enter an item and its price, or ’Q/q’ to quit: batteries 3.14 
Enter an item and its price, or ’Q/q’ to quit: q 
Receipt: 
-------- 
eggs => $2.13 
milk => $1.26 
batteries => $3.14 
--------- 
subtotal: $6.53 
tax: $0.39 
total: $6.92 

Hier ist der Code ich gemacht: (Kann mir jemand bitte helfen ???)

def create_list 
puts 'Please enter item and its price or type "quit" to exit' 
items = gets.chomp.split(' ') 
grocery_list = {} 
index = 0 
until index == items.length 
grocery_list[items[index]] = 1 
index += 1 
end 
grocery_list 
end 

def add_item (list) 
items = '' 
until items == 'quit' 
puts "Enter a new item & amount, or type 'quit'." 
items = gets.chomp 
if items != 'quit' 
    new_item = items.split(' ') 
    if new_item.length > 2 
    #store int, delete, combine array, set to list w/ stored int 
    qty = new_item[-1] 
    new_item.delete_at(-1) 
    new_item.join(' ') 
    p new_item 
    end 
    list[new_item[0]] = new_item[-1] 
else 
    break 
end 
end 
list 
end 

add_item(create_list) 

puts "Receipt: " 
puts "------------" 

Antwort

1

Nicht sicher, dass Sie Hashes dafür brauchen, wie sie werden verwendet, um Schlüsselwertpaare zu speichern. Auch Sie sollten Ihren Code organisieren, wo Sie Ihre Variablen definieren, dann Ihre Methoden, dann führen Sie Ihren Code zuletzt. Halten Sie die Methoden einfach.

#define instance variabes so they can be called inside methods 
@grocery_list = [] # use array for simple grouping. hash not needed here 
@quit = false # use boolean values to trigger when to stop things. 
@done_shopping = false 
@line = "------------" # defined to not repeat ourselves (DRY) 

#define methods using single responsibility principle. 
def add_item 
    puts 'Please enter item and its price or type "quit" to exit' 
    item = gets.chomp 
    if item == 'quit' 
    @done_shopping = true 
    else 
    @grocery_list << item.split(' ') 
    end 
end 

# to always use 2 decimal places 
def format_number(float) 
    '%.2f' % float.round(2) 
end 

#just loop until we're done shopping. 
until @done_shopping 
    add_item 
end 

puts "\n" 
#print receipt header 
puts "Receipt: " 
puts @line 

#now loop over the list to output the items in arrray. 
@grocery_list.each do |item| 
    puts "#{item[0]} => $#{item[1]}" 
end 

puts @line 
# do the math 
@subtotal = @grocery_list.map{|i| i[1].to_f}.inject(&:+) #.to_f converts to float 
@tax = @subtotal * 0.825 
@total = @subtotal + @tax 

#print the totals 
puts "subtotal: $#{format_number @subtotal}" 
puts "tax: $#{format_number @tax}" 
puts "total: $#{format_number @total}" 
#close receipt 
puts @line 
Verwandte Themen