Треки
/
Go
Go
/
Вправи
/
Робот для вечірки
Робот для вечірки

Робот для вечірки

Навчальна вправа

Вступ

Пакети

У Go застосунок організовано в пакети. Пакет - це сукупність вихідних файлів, що лежать в одній теці. Усі вихідні файли в одній теці повинні мати однакову назву пакета на початку файлу. За домовленістю пакети називають так само, як теку, у якій вони лежать.

package greeting

Go надає велику стандартну бібліотеку пакетів, які можна використати у своїй програмі за допомогою ключового слова import. Пакети зі стандартної бібліотеки імпортують за їхньою назвою.

package greeting

import "fmt"

До імпортованого пакета потім звертаються за назвою пакета:

world := "World"
fmt.Sprintf("Hello %s", world)

Go визначає, чи можна викликати щось із коду в інших пакетах, за тим, як це оголошено. Щоб функція, тип, змінна, константа чи поле структури були видимі ззовні (це називають експортованими), їхня назва має починатися з великої літери.

package greeting

// Hello is a public function (callable from other packages).
func Hello(name string) string {
    return "Hello " + name
}

// hello is a private function (not callable from other packages).
func hello(name string) string {
    return "Hello " + name
}

Форматування рядків

Go має вбудований пакет fmt (пакет форматування), який пропонує різноманітні функції для роботи з форматом вхідних і вихідних даних. Найуживаніша функція - Sprintf. Вона використовує дієслова на кшталт %s, щоб підставляти значення в рядок тексту (англ. string), і повертає цей рядок тексту.

import "fmt"

food := "taco"
fmt.Sprintf("Bring me a %s", food)
// Returns: Bring me a taco

У Go числа з плаваючою комою зручно форматувати за допомогою дієслов Sprintf: %g (компактне подання), %e (експонента) або %f (без експоненти). Усі три дієслова дають змогу керувати шириною поля та позицією числа.

import "fmt"

number := 4.3242
fmt.Sprintf("%.2f", number)
// Returns: 4.32

Повний список доступних дієслов можна знайти в документації пакета форматування.

fmt містить й інші функції для роботи з рядками тексту, як-от Println, яка просто друкує отримані аргументи в консолі, та Printf, яка форматує вхідні дані так само, як Sprintf, і лише потім їх друкує.

Вказівки

Жив собі ексцентричний програміст у дивному будинку з ґратами на вікнах. Якось він знайшов на онлайн-дошці вакансій замовлення на створення робота для вечірок. Робот має вітати людей і проводжати їх до їхніх місць. Перша версія була дуже технічною і виказувала, що програміст геть не вміє спілкуватися з людьми. Дещо з цього також потрапило в наступну версію.

1. Привітати нового гостя на вечірці

Реалізуйте функцію Welcome, яка повертає вітальне повідомлення з використанням переданого імені:

Welcome("Christiane")
// => Welcome to my party, Christiane!

2. Привітати нового гостя, у якого сьогодні день народження

Реалізуйте функцію HappyBirthday, яка повертає привітання з днем народження, використовуючи передане імʼя та вік людини. На жаль, програміст не проти похизуватися, тож робот має продемонструвати, що знає день народження кожного гостя.

HappyBirthday("Frank", 58)
// => Happy birthday Frank! You are now 58 years old!

3. Показати дорогу

Реалізуйте функцію AssignTable, яка вказує дорогу. Вона має приймати 5 параметрів.

  • Імʼя нового гостя, якого потрібно привітати (string)
  • Номер столика (int)
  • Імʼя сусіда по столику (string)
  • Напрямок, де шукати столик (string)
  • Відстань до столика (float64)

Точний формат результату можна побачити в прикладі нижче.

Робот подає номер столика у форматі з 3 цифр. Якщо число має менше ніж 3 цифри, до нього додаються провідні нулі, щоб вийшло 3 цифри (наприклад, 3 стає 003). Робот також називає відстань до столика. На щастя, лише з точністю до 1 цифри.

AssignTable("Christiane", 27, "Frank", "on the left", 23.7834298)
// =>
// Welcome to my party, Christiane!
// You have been assigned to table 027. Your table is on the left, exactly 23.8 meters from here.
// You will be sitting next to Frank.
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Go Exercism

Час розпочати Робот для вечірки?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Go, а також 34 концепції165 вправ та справжнє наставництво від людей, і все це безкоштовно.