Я мог бы использовать любые улучшения для улучшения своего кода.Я думаю, что большинство методов имеют одинаковую структуру, но я не получаю желаемого результата, поэтому любая помощь будет отличной.Если вы хотите посмотреть упражнение онлайн, оно называется «Вложенная итерация бакалавра».Я действительно понятия не имею, почему я не получаю желаемый результат, мне кажется, моя разработка имеет смысл.
для get_first_name_of_season_winner , независимо от того, через какие аргументы я передаю, когда яНазовите это, я всегда получаю «Бет Смоллс» в качестве выхода, когда это не должно быть так.Если я пройду «Сезон 29», результат будет «Эшли Йейтс»
для метода get_contestant_name , это то же самое.Он всегда возвращает «Бет Смоллс» независимо от того, через какое занятие я прохожу.Например, если я назову это так
get_contestant_name(thebachelor, "Chiropractic Assistant" )
, он должен вернуть "Becca Tilley" в качестве вывода, но это не так.
для count_contestant_by_hometown , он должен возвращать количество участников из родного города, которые были переданы в методе, однако, независимо от того, какой аргумент я передаю, я получаю число 4.
для get_occupation , он должен возвращать имя человека, соответствующего родному городу, который передается в методе, но я всегда получаю "Бет Смоллс" независимо от того, через какой родной город я его прохожу.
Последний метод, я понятия не имею, как это сделать.Он принимает два аргумента - хеш данных и строку сезона.Переберите хеш и верните средний возраст всех участников этого сезона.
thebachelor = {
"season 30": [
{
"name": "Beth Smalls",
"age": "26",
"hometown": "Great Falls, Virginia",
"occupation": "Nanny/Freelance Journalist",
"status": "Winner"
},
{
"name": "Becca Tilley",
"age": "27",
"hometown": "Shreveport, Louisiana",
"occupation": "Chiropractic Assistant",
"status": "Eliminated Week 8"
}
],
"season 29": [
{
"name": "Ashley Yeats",
"age": "24",
"hometown": "Denver, Colorado",
"occupation": "Dental Assitant",
"status": "Winner"
},
{
"name": "Sam Grover",
"age": "29",
"hometown": "New York, New York",
"occupation": "Entertainer",
"status": "Eliminated Week 6"
}
]
}
Теперь методы.get_first_name_of_season_winner
is
def get_first_name_of_season_winner(data, season)
#this method returns the first name of that seasons winner
#pass the season of the show, and then it returns only th FIRST NAME of the winner for that season
#iterate through the inital hash to access the season number
#then iterate through the array, to access the hash inside
#acess the "status" to get the output
data.each do |season, contestant_Data|
contestant_Data.each do |a|
a.each do |attribute, value|
if value == "Winner"
return a[:name]
end
end
end
end
end
get_first_name_of_season_winner(thebachelor, "season 29") #returns the full name of only "Beth Smalls"
get_contestant_name
is:
def get_contestant_name(data, occupation) #this method takes in the data hash and an occupation string and returns the name of the woman who has that occupation
#iterate through the initial hash to access the seasons
#iterate through the seasons to access the arrays inside
#access the occupation element of the array
#return the person who has the occupation
data.each do |season, contestant_data|
contestant_data.each do |a|
a.each do |attribute, value|
if attribute == :occupation
return a[:name]
end
end
end
end
end
get_contestant_name(thebachelor, "Chiropractic Assistant" ) #returns the full name of only "Beth Smalls"
count_contestant_by_hometown
is:
def count_contestant_by_hometown(data, hometown) #this method should return the number of contestants from the hometown passed
#include a counter variable
#iterate through the hash to access the seasons
#access the array
#access the hometown key in the hash
#keep count
counter = 0
data.each do |season, contestant_data|
contestant_data.each do |a|
a.each do |attribute, value|
if attribute == :hometown
counter += 1
end
end
end
end
return counter
end
count_contestant_by_hometown(thebachelor, "Denver, Colorado") #returns the number 4, I have no idea why
get_occupation
is:
def get_occupation(data, hometown) #should return the occupation of of the first contestant who hails from the hometown
data.each do |season, contestant_data|
contestant_data.each do |a|
a.each do |attribute, value|
if attribute == :hometown
return a[:name]
end
end
end
end
end
get_occupation(thebachelor, "Denver, Colorado") #returns "Beth Smalls" when it should return "Ashley Yeats"
average_age_for_season
- это:
def average_age_for_season(data, season) #returns the average age of all contestants for that season