関数(とその他の数学とコンピュータに関する予備知識) 入門 リストの代わり、スライス、直積、変数と代入
行列プログラマー (Philip N. Klein(著)、松田 晃一(翻訳)、弓林 司(翻訳)、脇本 佑紀(翻訳)、中田 洋(翻訳)、齋藤 大吾(翻訳)、オライリー・ジャパン)の0章(関数(とその他の数学とコンピュータに関する予備知識))、0.5(ラボ: Python入門 - 集合、リスト、辞書、内包表記)、0.5.5(リスト))の課題0.5.10、リストの内包表記の課題0.5.11、0.5.12、アンパックによるリストの要素の取得の課題0.5.13の解答をPythonではなくGoで求めてみる。
コード
package main
import "fmt"
type chNum struct {
c rune
n int
}
func (cn chNum) String() string {
return fmt.Sprintf("{%c, %d}", cn.c, cn.n)
}
func main() {
fmt.Println("課題0.5.10")
nums := []float64{20, 10, 15, 75}
t := 0.0
for _, num := range nums {
t += num
}
fmt.Println(t / float64(len(nums)))
fmt.Println("課題0.5.11")
s := "ABC"
ns := []int{1, 2, 3}
chNums := []chNum{}
for _, c := range s {
for _, n := range ns {
chNums = append(chNums, chNum{c, n})
}
}
fmt.Println(chNums)
fmt.Println("課題0.5.12")
numSlice := [][]float64{
{0.25, 0.75, 0.1},
{-1, 0},
{4, 4, 4, 4},
}
t = 0
for _, ns := range numSlice {
for _, n := range ns {
t += n
}
}
fmt.Println(t)
fmt.Println("課題0.5.13")
// 問題なし
a, b := 1, 2
fmt.Println(a, b)
// エラー
// c, d := 3, 4, 5
}
入出力結果
% go run ./main.go
課題0.5.10
30
課題0.5.11
[{A, 1} {A, 2} {A, 3} {B, 1} {B, 2} {B, 3} {C, 1} {C, 2} {C, 3}]
課題0.5.12
16.1
課題0.5.13
1 2
%