возникли проблемы при добавлении входных данных в массив - PullRequest
0 голосов
/ 19 марта 2019

У меня проблема, которая, как мне кажется, требует от пользователя ввода данных в массив. У меня возникают трудности с пониманием этого, и любая помощь будет оценена.

Проблема заключается в следующем:

Разработка программы, позволяющей пользователю вводить общее количество осадков за каждый 12 месяцев в массив. Программа должна рассчитать и отобразить общее количество осадков за год, среднемесячное количество осадков и месяцы с максимальным и минимальным количеством.

Вот что я написал до сих пор:

def get_rainfall(a, b)
  rain_array = []
  rain_array.push(a => b)
  puts rain_array
end

get_rainfall('january', 300)

Ответы [ 2 ]

1 голос
/ 19 марта 2019

Спасибо за обновление вопроса C_B.

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

Ваш текущий метод приводит к следующему:

#=> [{"january"=>300}, {"february"=>...}]

Это происходит потому, что когда вы вызываете rain_array.push(a => b), вы каждый раз вставляете хеш в массив в a => b.

Мне кажется, вам лучше бы хранить все вещи как хеш, возможно:

hash = {}

def get_rainfall(hash, key, value)
  hash[key] = value
  puts hash
end

get_rainfall(hash, 'january', 300)
# {"january"=>300}

get_rainfall(hash, 'february', 200)
#{"january"=>300, "february"=>200}

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

В качестве альтернативы, вы также можете использовать массив массивов, чтобы настроить текущий метод:

rain_array = []

def get_rainfall(array, a, b)
  array.push([a, b])
  puts array
end

get_rainfall(rain_array, 'january', 300)
# january
# 300

get_rainfall(rain_array, 'february', 200)
# january
# 300
# february
# 200

Вы заметите, что я извлекаю объявление массива или хеша для хранения значений вне метода; без этого вы потеряете доступ к нему, как только метод будет запущен.

Надеюсь, что это поможет - с радостью расширяться, если у вас есть какие-либо вопросы или запросы. Дайте мне знать, как вы поживаете.


Еще одно обновление на основе дополнительного комментария о получении пользовательского ввода. Чтобы начать, попробуйте следующее:

hash = {}

def get_rainfall(hash, month)
  puts "Please enter value for #{month}"
  hash[month] = gets.chomp
  puts hash
end


get_rainfall(hash, 'january')
0 голосов
/ 19 марта 2019

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

Минимальный подход заключается в том, чтобы пока не беспокоиться об именах месяцев и просто собрать список (массив) из 12 значений для выполнения вычислений.

rainfall = 1.upto(12).map do |month_nr|

  # `print` and `puts` are practically the same with the only difference being
  # that `puts` adds a newline character to the string if it doesn't have one

  # output the question to the user
  print "enter the rainfall for month #{month_nr}: "
  # get the input from the user and convert it into an integer
  gets.to_i # output the rainfall
end

puts "the total rainfall is: #{rainfall.sum}"
puts "the average rainfall is: #{rainfall.sum / rainfall.size}"
puts "the highest rainfall is: #{rainfall.max}"
puts "the lowest rainfall is: #{rainfall.min}"

Если вас интересуют названия месяцев, вы можете сделать следующее:

# create an array of all months
months = %w[January February March April May June July August September October November December]
# ask the user for each moth the amount of rainfall
rainfall = months.map do |month_name|
  print "enter the rainfall for month #{month_name}: "
  [month_name, gets.to_i] # output both the month name and the rainfall provided
end

# convert [['January', 123], ['February', 456], ...]
# to { 'January' => 123, 'February' => 456, ... }
rainfall = rainfall.to_h

puts "the total rainfall is: #{rainfall.values.sum}"
puts "the average rainfall is: #{rainfall.values.sum / rainfall.size}"
# search the key with the highest value
puts "the month with the highest rainfall is: #{rainfall.key(rainfall.values.max)}"
# search the key with the lowest value
puts "the month with the lowest rainfall is: #{rainfall.key(rainfall.values.min)}"

Если что-то неясно, взгляните на то, с чем вам трудно. Если неясно, спросите в комментариях.

ссылка:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...