add: struct exercises and quiz
This commit is contained in:
@ -1,21 +0,0 @@
|
||||
// For more tutorials: https://blog.learngoprogramming.com
|
||||
//
|
||||
// Copyright © 2018 Inanc Gumus
|
||||
// Learn Go Programming Course
|
||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
//
|
||||
|
||||
package main
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// EXERCISE: ??
|
||||
//
|
||||
//
|
||||
// EXPECTED OUTPUT
|
||||
//
|
||||
//
|
||||
// ---------------------------------------------------------
|
||||
|
||||
func main() {
|
||||
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
// For more tutorials: https://blog.learngoprogramming.com
|
||||
//
|
||||
// Copyright © 2018 Inanc Gumus
|
||||
// Learn Go Programming Course
|
||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
//
|
||||
|
||||
package main
|
||||
|
||||
func main() {
|
||||
|
||||
}
|
39
24-structs/exercises/01-warmup/main.go
Normal file
39
24-structs/exercises/01-warmup/main.go
Normal file
@ -0,0 +1,39 @@
|
||||
// For more tutorials: https://blog.learngoprogramming.com
|
||||
//
|
||||
// Copyright © 2018 Inanc Gumus
|
||||
// Learn Go Programming Course
|
||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
//
|
||||
|
||||
package main
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// EXERCISE: Warm Up
|
||||
//
|
||||
// Starting with this exercise, you'll build a command-line
|
||||
// game store.
|
||||
//
|
||||
// 1. Declare the following structs:
|
||||
//
|
||||
// + item: id (int), name (string), price (int)
|
||||
//
|
||||
// + game: embed the item, genre (string)
|
||||
//
|
||||
//
|
||||
// 2. Create a game slice using the following data:
|
||||
//
|
||||
// id name price genre
|
||||
//
|
||||
// 1 god of war 50 action adventure
|
||||
// 2 x-com 2 30 strategy
|
||||
// 3 minecraft 20 sandbox
|
||||
//
|
||||
//
|
||||
// 3. Print all the games.
|
||||
//
|
||||
// EXPECTED OUTPUT
|
||||
// Please run the solution to see the output.
|
||||
// ---------------------------------------------------------
|
||||
|
||||
func main() {
|
||||
}
|
39
24-structs/exercises/01-warmup/solution/main.go
Normal file
39
24-structs/exercises/01-warmup/solution/main.go
Normal file
@ -0,0 +1,39 @@
|
||||
// For more tutorials: https://blog.learngoprogramming.com
|
||||
//
|
||||
// Copyright © 2018 Inanc Gumus
|
||||
// Learn Go Programming Course
|
||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
//
|
||||
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
type item struct {
|
||||
id int
|
||||
name string
|
||||
price int
|
||||
}
|
||||
|
||||
type game struct {
|
||||
item
|
||||
genre string
|
||||
}
|
||||
|
||||
games := []game{
|
||||
{
|
||||
item: item{id: 1, name: "god of war", price: 50},
|
||||
genre: "action adventure",
|
||||
},
|
||||
{item: item{id: 2, name: "x-com 2", price: 40}, genre: "strategy"},
|
||||
{item: item{id: 3, name: "minecraft", price: 20}, genre: "sandbox"},
|
||||
}
|
||||
|
||||
fmt.Printf("Inanc's game store has %d games.\n\n", len(games))
|
||||
|
||||
for _, g := range games {
|
||||
fmt.Printf("#%d: %-15q %-20s $%d\n",
|
||||
g.id, g.name, "("+g.genre+")", g.price)
|
||||
}
|
||||
}
|
33
24-structs/exercises/02-list/main.go
Normal file
33
24-structs/exercises/02-list/main.go
Normal file
@ -0,0 +1,33 @@
|
||||
// For more tutorials: https://blog.learngoprogramming.com
|
||||
//
|
||||
// Copyright © 2018 Inanc Gumus
|
||||
// Learn Go Programming Course
|
||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
//
|
||||
|
||||
package main
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// EXERCISE: List
|
||||
//
|
||||
// Now, it's time to add an interface to your program using
|
||||
// the bufio.Scanner. So the users can list the games, or
|
||||
// search for the games by id.
|
||||
//
|
||||
// 1. Scan for the input in a loop (use bufio.Scanner)
|
||||
//
|
||||
// 2. Print the available commands.
|
||||
//
|
||||
// 3. Implement the quit command: Quits from the loop.
|
||||
//
|
||||
// 4. Implement the list command: Lists all the games.
|
||||
//
|
||||
//
|
||||
// EXPECTED OUTPUT
|
||||
// Please run the solution and try the program with list and
|
||||
// quit commands.
|
||||
// ---------------------------------------------------------
|
||||
|
||||
func main() {
|
||||
// use your solution from the previous exercise
|
||||
}
|
65
24-structs/exercises/02-list/solution/main.go
Normal file
65
24-structs/exercises/02-list/solution/main.go
Normal file
@ -0,0 +1,65 @@
|
||||
// For more tutorials: https://blog.learngoprogramming.com
|
||||
//
|
||||
// Copyright © 2018 Inanc Gumus
|
||||
// Learn Go Programming Course
|
||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
//
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
)
|
||||
|
||||
func main() {
|
||||
type item struct {
|
||||
id int
|
||||
name string
|
||||
price int
|
||||
}
|
||||
|
||||
type game struct {
|
||||
item
|
||||
genre string
|
||||
}
|
||||
|
||||
games := []game{
|
||||
{
|
||||
item: item{id: 1, name: "god of war", price: 50},
|
||||
genre: "action adventure",
|
||||
},
|
||||
{item: item{id: 2, name: "x-com 2", price: 40}, genre: "strategy"},
|
||||
{item: item{id: 3, name: "minecraft", price: 20}, genre: "sandbox"},
|
||||
}
|
||||
|
||||
fmt.Printf("Inanc's game store has %d games.\n", len(games))
|
||||
|
||||
in := bufio.NewScanner(os.Stdin)
|
||||
for {
|
||||
fmt.Printf(`
|
||||
> list : lists all the games
|
||||
> quit : quits
|
||||
|
||||
`)
|
||||
|
||||
if !in.Scan() {
|
||||
break
|
||||
}
|
||||
|
||||
fmt.Println()
|
||||
|
||||
switch in.Text() {
|
||||
case "quit":
|
||||
fmt.Println("bye!")
|
||||
return
|
||||
|
||||
case "list":
|
||||
for _, g := range games {
|
||||
fmt.Printf("#%d: %-15q %-20s $%d\n",
|
||||
g.id, g.name, "("+g.genre+")", g.price)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
47
24-structs/exercises/03-query-by-id/main.go
Normal file
47
24-structs/exercises/03-query-by-id/main.go
Normal file
@ -0,0 +1,47 @@
|
||||
// For more tutorials: https://blog.learngoprogramming.com
|
||||
//
|
||||
// Copyright © 2018 Inanc Gumus
|
||||
// Learn Go Programming Course
|
||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
//
|
||||
|
||||
package main
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// EXERCISE: Query By Id
|
||||
//
|
||||
// Add a new command: "id". So the users can query the games
|
||||
// by id.
|
||||
//
|
||||
// 1. Before the loop, index the games by id (use a map).
|
||||
//
|
||||
// 2. Add the "id" command.
|
||||
// When a user types: id 2
|
||||
// It should print only the game with id: 2.
|
||||
//
|
||||
// 3. Handle the errors:
|
||||
//
|
||||
// id
|
||||
// wrong id
|
||||
//
|
||||
// id HEY
|
||||
// wrong id
|
||||
//
|
||||
// id 10
|
||||
// sorry. i don't have the game
|
||||
//
|
||||
// id 1
|
||||
// #1: "god of war" (action adventure) $50
|
||||
//
|
||||
// id 2
|
||||
// #2: "x-com 2" (strategy) $40
|
||||
//
|
||||
//
|
||||
// EXPECTED OUTPUT
|
||||
// Please also run the solution and try the program with
|
||||
// list, quit, and id commands to see it in action.
|
||||
// ---------------------------------------------------------
|
||||
|
||||
func main() {
|
||||
// use your solution from the previous exercise
|
||||
}
|
100
24-structs/exercises/03-query-by-id/solution/main.go
Normal file
100
24-structs/exercises/03-query-by-id/solution/main.go
Normal file
@ -0,0 +1,100 @@
|
||||
// For more tutorials: https://blog.learngoprogramming.com
|
||||
//
|
||||
// Copyright © 2018 Inanc Gumus
|
||||
// Learn Go Programming Course
|
||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
//
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func main() {
|
||||
type item struct {
|
||||
id int
|
||||
name string
|
||||
price int
|
||||
}
|
||||
|
||||
type game struct {
|
||||
item
|
||||
genre string
|
||||
}
|
||||
|
||||
games := []game{
|
||||
{
|
||||
item: item{id: 1, name: "god of war", price: 50},
|
||||
genre: "action adventure",
|
||||
},
|
||||
{item: item{id: 2, name: "x-com 2", price: 40}, genre: "strategy"},
|
||||
{item: item{id: 3, name: "minecraft", price: 20}, genre: "sandbox"},
|
||||
}
|
||||
|
||||
// index the games by id
|
||||
byID := make(map[int]game)
|
||||
for _, g := range games {
|
||||
byID[g.id] = g
|
||||
}
|
||||
|
||||
fmt.Printf("Inanc's game store has %d games.\n", len(games))
|
||||
|
||||
in := bufio.NewScanner(os.Stdin)
|
||||
for {
|
||||
fmt.Printf(`
|
||||
> list : lists all the games
|
||||
> id N : queries a game by id
|
||||
> quit : quits
|
||||
|
||||
`)
|
||||
|
||||
if !in.Scan() {
|
||||
break
|
||||
}
|
||||
|
||||
fmt.Println()
|
||||
|
||||
cmd := strings.Fields(in.Text())
|
||||
if len(cmd) == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
switch cmd[0] {
|
||||
case "quit":
|
||||
fmt.Println("bye!")
|
||||
return
|
||||
|
||||
case "list":
|
||||
for _, g := range games {
|
||||
fmt.Printf("#%d: %-15q %-20s $%d\n",
|
||||
g.id, g.name, "("+g.genre+")", g.price)
|
||||
}
|
||||
|
||||
case "id":
|
||||
if len(cmd) != 2 {
|
||||
fmt.Println("wrong id")
|
||||
continue
|
||||
}
|
||||
|
||||
id, err := strconv.Atoi(cmd[1])
|
||||
if err != nil {
|
||||
fmt.Println("wrong id")
|
||||
continue
|
||||
}
|
||||
|
||||
g, ok := byID[id]
|
||||
if !ok {
|
||||
fmt.Println("sorry. i don't have the game")
|
||||
continue
|
||||
}
|
||||
|
||||
fmt.Printf("#%d: %-15q %-20s $%d\n",
|
||||
g.id, g.name, "("+g.genre+")", g.price)
|
||||
}
|
||||
}
|
||||
}
|
@ -1,5 +1,15 @@
|
||||
# Structs Exercises
|
||||
# Struct Exercises
|
||||
|
||||
## Warm-Up
|
||||
You'll build a queryable command-line game store.
|
||||
|
||||
1. **[?](https://github.com/inancgumus/learngo/tree/master/???)**
|
||||
1. **[Warm Up](https://github.com/inancgumus/learngo/tree/master/24-structs/exercises/01-warmup)**
|
||||
|
||||
Load up the data into the game store.
|
||||
|
||||
2. **[List](https://github.com/inancgumus/learngo/tree/master/24-structs/exercises/02-list)**
|
||||
|
||||
Now, it's time to add an interface to your program using the bufio.Scanner. So the users can list the games, or search for the games by id.
|
||||
|
||||
3. **[Query By Id](https://github.com/inancgumus/learngo/tree/master/24-structs/exercises/03-query-by-id)**
|
||||
|
||||
Add a new command: "id". So the users can query the games by id.
|
Reference in New Issue
Block a user