/
Evorunner
/
ruby_labs
Обзор
Документация
Войти
/
Evorunner
/
ruby_labs
Код
Запросы
4
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
main.rb
115 строк
3 KB
Иван
Обработка исключений
18 май 2026, 12:42
18 май 2026, 12:42
ffce7b3
Код
Авторство
О чём код?
students = [] def get_positive_integer(prompt) loop do print prompt input = gets.chomp if input =~ /^\d+$/ && input.to_i > 0 return input.to_i else puts "Ошибка: введите целое положительное число!" end end end def get_non_empty_string(prompt) loop do print prompt input = gets.chomp.strip if input.empty? puts "Ошибка: поле не может быть пустым!" else return input end end end def get_gender(prompt) loop do print prompt input = gets.chomp.strip.downcase if %w[male female].include?(input) return input.to_sym else puts "Ошибка: введите 'male' или 'female'!" end end end def get_email(prompt) loop do print prompt input = gets.chomp.strip if input =~ /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i return input else puts "Ошибка: введите корректный email (например: ivan@mail.ru)!" end end end def get_skill_level(prompt) valid_levels = %w[beginner intermediate advanced expert] loop do print prompt input = gets.chomp.strip.downcase if valid_levels.include?(input) return input else puts "Ошибка: введите один из уровней: #{valid_levels.join(', ')}!" end end end count = get_positive_integer("Сколько студентов добавить? ") count.times do |i| puts "\n--- Студент #{i + 1} ---" name = get_non_empty_string("Имя: ") age = get_positive_integer("Возраст: ") gender = get_gender("Пол (male/female): ") group = get_non_empty_string("Группа: ") email = get_email("Электронная почта: ") skills = {} skills_count = get_positive_integer("Сколько навыков добавить? ") skills_count.times do skill_name = get_non_empty_string(" Название навыка: ").to_sym skill_level = get_skill_level(" Уровень (beginner/intermediate/advanced/expert): ") skills[skill_name] = skill_level end students << { name: name, age: age, gender: gender, group: group, email: email, skills: skills } end puts "\n========== Список студентов ==========" grouped = students.group_by { |s| s[:group] } grouped.each do |group, members| puts "\n[#{group}]" members.each_with_index do |s, idx| gender_str = s[:gender] == :male ? "мужской" : "женский" puts "#{idx + 1}. #{s[:name]}:" puts " #{s[:age]} лет, #{gender_str}" puts " #{s[:email]}" if s[:skills].any? puts " Навыки:" s[:skills].each do |skill, level| puts " #{skill}: #{level}" end end end end