2013-09-08 6 views
1

Я создал простую программу, чтобы спросить у спортивного болельщика о какой-то информации. Вот код, который я до сих пор:Как использовать первую букву в массиве строк с использованием метода capize?

puts "What's your favorite pro sport?" 
favorite_sport = gets.chomp 

puts "Who's your favorite team in the #{favorite_sport}?" 
favorite_team = gets.chomp 

puts "What city are they from?" 
team_city = gets.chomp 

puts "Who's your favorite player in the #{favorite_team} roster?" 
favorite_player = gets.chomp 

puts "What position does #{favorite_player} play?" 
player_position = gets.chomp 

puts "How many years has #{favorite_player} played in the #{favorite_sport}" 
years_experience = gets.chomp 

fan_info = [favorite_sport, favorite_team, team_city, favorite_player, player_position, years_experience] 
puts fan_info 

Я хочу, чтобы иметь выход запрограммируйте fan_info с первой буквой строки с заглавной буквы. Как мне это сделать? Я знаю, что мне нужно использовать метод capitalize, но у меня возникли проблемы с его реализацией.

Вот пример ввода и вывода:

What's your favorite pro sport? 
NFL 
Who's your favorite team in the NFL? 
Seahawks 
What city are they from? 
seattle 
Who's your favorite player in the Seahawks roster? 
wilson 
What position does wilson play? 
qb 
How many years has wilson played in the NFL 
1 
NFL 
Seahawks 
seattle 
wilson 
qb 
1 
+1

Для пользовательского ввода '" NFL «', вы хотите, чтобы результат был «Nfl» или «NFL»? – sawa

+0

Хороший улов! Да, я хотел оставить его в НФЛ. Даже если он не введен полностью капитализирован. –

ответ

2

Если ваше намерение состоит в заглавной буквы сохраняя остальные буквы нетронутыми (т.е. "NFL" пребывания, чтобы быть "NFL", и не станет "Nfl"), то сделать:

favorite_sport = gets.chomp.sub(/./, &:upcase) 
... 
+0

Будет ли это на каждом get.chomp? –

+0

Да. Или вы можете сделать это сразу для строк в массиве с помощью 'map'. В этом случае нет смысла хранить 'chomp' отдельно. Он также должен быть помещен в блок «map». – sawa

3

Попробуйте это:

puts fan_info.map(&:capitalize) 

Это вызывает #capitalize на каждой строке, создает новый массив из всех результатов, и печатает, что вместо этого.

Это эквивалентно что-то вроде этого:

fan_info_capitalized = [] 
fan_info.each do |inf| 
    fan_info_capitalized << inf.capitalize 
end 
puts fan_info_capitalized 

только гораздо более компактным.

+0

Проблема с использованием этого метода заключается в том, что 'capize' превратит все символы в строку в нижний регистр, а затем в верхний регистр первого символа, уничтожив случай имен собственных и сокращений. '' foo BAR'.capitalize # => «Foo bar» ' –

+0

Действительно, плакат должен видеть и исправлять такие вещи. –