Как добавить неограниченное количество людей в мою программу ruby

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

puts "Create a party"
puts "Who is the first person: "
first_person = gets.chomp.upcase()
puts "Who is the second person: "
second_person = gets.chomp.upcase()
puts "Who is the third person: "
third_person = gets.chomp.upcase()
puts "Who is the fourth person: "
fourth_person = gets.chomp.upcase()
puts "Who is the fifth person: "
fifth_person = gets.chomp.upcase()

friends_list = Array[first_person, second_person, third_person, fourth_person, fifth_person]

puts "What is your name?"
your_name = gets.chomp.upcase()

if friends_list.include? your_name
  puts "Congrats, you were invited"
else
  puts "Sorry, you weren't invited. Please check with the host of the party for more details"
end
1
0
42
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Здорово, что вы начали изучать Ruby!

Вы можете использовать цикл. Сначала сделайте массив и push имена в нем.

puts "Create a party"
puts "Enter blank if you are done"

friends_list = []  # new array
count = 1
loop do
  print count.to_s + "th person's name: "
  name = gets.chomp.upcase
  break if name.empty?
  friends_list.push(name)  # add person to list
  count += 1
end

puts "What is your name?"
your_name = gets.chomp.upcase()

if friends_list.include? your_name
  puts "Congrats, you were invited"
else
  puts "Sorry, you weren't invited. Please check with the host of the party for more details"
end

Для чего нужен count? Если он вам нужен, вы всегда можете получить его на friends_list.length.

Jagdeep Singh 26.10.2018 07:29

Также небольшая проблема: вы получите такие запросы, как "1th person's name: " и "2th person's name: ", с кодом как есть. Rails имеет для этого метод упорядочить, а этот ответ обслуживает Ruby. Тем не менее, +1 за хороший ответ на вопрос :)

SRack 26.10.2018 13:00

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

D.Granulo 26.10.2018 13:59

Нет, не делай этого. Нет необходимости зацикливаться и подсчитывать.

B Seven 26.10.2018 18:00

Я пытался сделать это простым, но вы правы. Спасибо за хороший отзыв.

Reverince 27.10.2018 01:46
Ответ принят как подходящий

Это пример инструкций по группировке в методах, чтобы вы могли повторно использовать некоторые из них (см. get_name), как СУХОЙ.

Кроме того, он использует хеш для хранения данных о человеке в массиве.

Программа продолжает работать в loop to до тех пор, пока не прервется из-за ввода пользователем.

def run
  people = []
  loop do
    show_options
    answer = gets.chomp.downcase.to_sym
    case answer
    when :a
      add_person_to people
    when :l
      list people
    when :f
      find_in people
    else
      break
    end
  end
end

def show_options
  puts "-"*50
  puts "A: add person"
  puts "L: list people"
  puts "F: find person"
  puts "any other key: exit"
end

def get_name
  puts "Name?"
  name = gets.chomp.capitalize
  puts "Nickname?"
  nickname = gets.chomp.capitalize
  {name: name, nickname: nickname}
end

def add_person_to people
  puts "Adding person nr. #{people.size + 1}"
  people << get_name # check if already present?
end

def list people
  puts "-"*50
  people.each { |person| puts "Name: #{person[:name]} - Nickname: #{person[:nickname]}" }
  puts "Total people: #{people.size}"
end

def find_in people
  puts people.include? get_name # or improve
end

run # this calls the run method

Спасибо, дружище, очень помогли. Ваше здоровье

D.Granulo 26.10.2018 14:00

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