Как присвоить денежную стоимость каждому массиву в Ruby?

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

что у меня есть на данный момент:

def computer_order()
    puts "how many computers with monitors would you like today?"
    number = gets.chomp
    number = number.to_i
    number
end

def monitor_and_computer()
    computer_type = ["Dell Inspiron", "HP Pro", "Acer Vero", "Lenovo Ideacentre", "Dell Optiplex", "HP Envy"]
    monitor_type = ["Dell 27' Curved", "Viewsonic 22' Flat", "LG 24' Flat", "Samsung 27' Curved", "Spectre 27' Flat", "MSI 31.5' Curved"]
    free_item = ["250G Thumb drive", " Shop T-Shirt", "25$ Steam Gift Card"]
    cost = 600

    number_of_computers = computer_order()
    number_of_computers = number_of_computers.to_i
    total = (number_of_computers * cost)
    total = total.to_s

    number_of_computers.times do 
        puts "One computer is  " +  computer_type.sample + ", " + monitor_type.sample + ", " + free_item.sample
    end 
       puts "Your total is: $" + total
end
    
    monitor_and_computer()

После того, как пользователь вводит число, например. 3, ваш код случайным образом составит 3 комбинации из компьютера, монитора и бесплатного предмета. Это то, что ты хочешь сделать? Знаете ли вы, сколько стоит каждый предмет?

kevinluo201 22.04.2024 20:15

@kevinluo201 Да, я хочу вывести комбинацию компьютера, монитора и бесплатного предмета. Я не знаю фактической стоимости предметов, нет. Однако истинная реальная стоимость не важна. Это могут быть выдуманные цифры.

Hamz 22.04.2024 20:22

Вы можете использовать Hash, например. computer_type = {"Dell Inspiron" => 300.0, "HP Pro" => 600.0}; или вы можете создать формальный объект, например class Computer; attr_reader :name, :cost; def initialize(name: ,cost:); @name = name; @cost = cost;end;end;, а затем построить объекты computer_type =[Computer.new(name: "Dell Inspiron", cost: 300.0), Computer.new(name: "HP Pro", cost: 600.0).

engineersmnky 22.04.2024 20:51

@engineersmnky Спасибо, я никогда раньше не использовал хеши. Если бы я использовал метод Hash, как бы я объединил значения из строк Computer_type и Monitor_type? Во что превратятся мои затраты и общие переменные?

Hamz 22.04.2024 21:38

@DRey, это действительно зависит от вас, вот документация для Hash, возможно, обратите особое внимание на такие методы, как each, keys и values

engineersmnky 22.04.2024 21:55
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
1
5
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, ты можешь попробовать это в первую очередь. Используйте Hash, чтобы сначала сгруппировать информацию о цене и названии продуктов, а затем извлечь нужные данные.

def computer_order
  puts "how many computers with monitors would you like today?"
  number = gets.chomp
  number = number.to_i
  number
end

def monitor_and_computer
  computer_types = [
    {
      name: "Dell Inspiron", 
      price: 100
    },
    {
      name: "HP Pro", 
      price: 200
    },
    {
      name: "Acer Vero", 
      price: 300
    },
    {
      name: "Lenovo Ideacentre", 
      price: 400
    },
    {
      name: "Dell Optiplex", 
      price: 500
    },
    {
      name: "HP Envy",
      price: 600
    }
  ]
  monitor_types = [
    {
      name: "Dell 27' Curved", 
      price: 200
    },
    {
      name: "Viewsonic 22' Flat", 
      price: 300
    },
    {
      name: "LG 24' Flat", 
      price: 400
    },
    {
      name: "Samsung 27' Curved", 
      price: 500
    },
    {
      name: "Spectre 27' Flat", 
      price: 600
    },
    {
      name: "MSI 31.5' Curved",
      price: 700
    }
  ]
  free_items = ["250G Thumb drive", "Declan's Shop T-Shirt", "25$ Steam Gift Card"]

  total = 0
  number_of_computers = computer_order
  number_of_computers.times do
    computer = computer_types.sample
    monitor = monitor_types.sample
    free_item = free_items.sample

    total += computer[:price] + monitor[:price]
    puts "One computer is #{computer[:name]}, #{monitor[:name]}, #{free_item}"
  end
  puts "Your total is: $#{total}"
end
    
monitor_and_computer

После реализации вы можете позволить пользователю вводить желаемое название модели вместо количества компьютеров. Вы можете использовать find, чтобы найти нужный элемент в массивах продуктов, например:

computer_types.find { |c| c[:name] == 'HP Pro' }
# => {:name=>"HP Pro", :price=>200}

В качестве альтернативы вы можете определить собственный класс, например. Product = Data.define(:name, :price), чтобы вы могли использовать реальные вызовы методов, таких как computer.name, вместо работы с хэш-ключами.

Stefan 23.04.2024 12:10

@kevinluo201 Спасибо, думаю, теперь я понимаю немного лучше. А всем остальным спасибо за помощь, это очень ценно!

Hamz 23.04.2024 17:29

Пожалуйста. После того, как вы поближе познакомитесь с Ruby и ООП (объектно-ориентированным программированием), вы поймете предложение @Stefan. Эту книгу вы можете прочитать на сайте poodr.com . кстати, ты можешь установить этот ответ как лучший ответ, это может дать мне немного больше очков, лол

kevinluo201 24.04.2024 18:06

Другие вопросы по теме