Итоги: Динамические списки
Часть раздела Основы путешествия по GO на Coddy — урок 83 из 109.
Задание
СреднеДавайте попрактикуемся в работе со срезами (slices) в Go, создав простой менеджер списка покупок!
Ваша задача — реализовать несколько функций для управления списком покупок:
addItems: Добавление новых товаров в список покупокremoveItem: Удаление товара из списка по индексуfindExpensiveItems: Поиск товаров с ценой выше заданного порогаcalculateTotalCost: Расчет общей стоимости всех товаров
Каждый товар в списке покупок представлен строкой (название) и типом float64 (цена). Функция main демонстрирует совместную работу всех этих операций.
Попробуйте сами
package main
import "fmt"
// addItems добавляет новые товары и их цены в список покупок
func addItems(names []string, prices []float64, newNames []string, newPrices []float64) ([]string, []float64) {
// Ваш код здесь
return names, prices
}
// removeItem удаляет товар по указанному индексу
func removeItem(names []string, prices []float64, index int) ([]string, []float64) {
// Ваш код здесь
return names, prices
}
// findExpensiveItems возвращает товары с ценами выше порогового значения
func findExpensiveItems(names []string, prices []float64, threshold float64) []string {
// Ваш код здесь
return nil
}
// calculateTotalCost возвращает сумму всех цен
func calculateTotalCost(prices []float64) float64 {
// Ваш код здесь
return 0
}
func main() {
// Инициализация пустых списков покупок
names := []string{}
prices := []float64{}
// Добавление начальных товаров
initialNames := []string{"Apples", "Milk", "Bread"}
initialPrices := []float64{2.99, 3.49, 2.29}
names, prices = addItems(names, prices, initialNames, initialPrices)
// Печать начального списка покупок
fmt.Println("Initial Shopping List:")
for i := range names {
fmt.Printf("%d. %s - $%.2f\n", i, names[i], prices[i])
}
// Вычисление и печать общей стоимости
total := calculateTotalCost(prices)
fmt.Printf("\nTotal Cost: $%.2f\n", total)
// Поиск и печать дорогих товаров
priceThreshold := 3.00
expensiveItems := findExpensiveItems(names, prices, priceThreshold)
fmt.Printf("\nExpensive Items (above $%.2f):\n", priceThreshold)
for _, item := range expensiveItems {
fmt.Println(item)
}
// Добавление нового товара
names, prices = addItems(names, prices, []string{"Cheese"}, []float64{4.99})
// Удаление товара
names, prices = removeItem(names, prices, 1)
fmt.Println("\nRemoved item at index 1")
// Печать итогового списка покупок
fmt.Println("\nFinal Shopping List:")
for i := range names {
fmt.Printf("%d. %s - $%.2f\n", i, names[i], prices[i])
}
}Все уроки раздела Основы
4Операторы сравнения и логические операторы
Операторы сравнения — Часть 1Операторы сравнения — Часть 2Логический оператор ANDЛогический оператор ORЛогический оператор NOTОсновы приоритета операторовИтоги: выполнение сравнений7Управляющие конструкции: Циклы
Что такое цикл `for`Цикл `for` — основыЦикл `for` — только условиеКлючевое слово `break`Ключевое слово `continue`Вложенные циклыИтоги — повторение действий2Переменные и базовые типы данных
Что такое переменнаяВывод типов с помощью `:=`Целые числа (int)Числа с плавающей точкойЛогический тип (Booleans)СтрокиНулевые значения (Zero Values)КонстантыПравила именованияИтоги: переменные и типы5Основы ввода-вывода
Форматированный выводСпецификаторы форматаВывод типовБазовый ввод данных пользователемИтоги: ввод и вывод8Функции
Понимание функцийОбъявление функцииВызов функцийПараметры функцииВозврат одного значенияВозврат нескольких значенийИменованные возвращаемые значенияОсновы области видимости функцийИтоги — создание переиспользуемого кода3Базовые операторы
Арифметические операторыОператор деленияОператор остатка от деленияОператор присваиванияКомбинированные операторы присваиванияИнкремент и декрементПовторение — Вычисления6Управление потоком: Условные конструкции
Оператор `if`Ключевое слово `else`Ключевое слово `else if`Затенение переменных в `if`Инициализация переменныхОператор `switch`Switch с выражениямиSwitch без выраженийКлючевое слово `fallthrough`Итоги — Принятие решений