計算機科学のブログ

関数(とその他の数学とコンピュータに関する予備知識) 入門 リストの代わり、スライス、直積、変数と代入

行列プログラマー (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
%