练习 映射

问题

实现 WordCount。它应当返回一个映射,其中包含字符串 s 中每个“单词”的个数。函数 wc.Test 会对此函数执行一系列测试用例,并输出成功还是失败。

你会发现 strings.Fields 很有帮助。

背景知识

  1. 阅读测试函数的源代码,看看如何通过相关的测试用例。
  2. 学习make 函数会返回给定类型的映射,并将其初始化备用。
  3. 学习map语法如何定义一个映射。
  4. strings.Fields函数返回,输入参数,根据空格分割字符串后的数组。
  5. 注意映射的定义和初始化。

实现思路

  1. 获取输入的字符串,分割为对应的数组。
  2. 定义映射,根据数组长度循环。
  3. 如何命中单词就计数。

实现代码

GitHub

参考链接

  1. 练习:映射

练习 切片

问题

实现 Pic。它应当返回一个长度为 dy 的切片,其中每个元素是一个长度为 dx,元素类型为 uint8 的切片。当你运行此程序时,它会将每个整数解释为灰度值(好吧,其实是蓝度值)并显示它所对应的图像。

图像的选择由你来定。几个有趣的函数包括 (x+y)/2, xy, x^y, xlog(y) 和 x%(y+1)。

(提示:需要使用循环来分配 [][]uint8 中的每个 []uint8;请使用 uint8(intValue) 在类型之间转换;你可能会用到 math 包中的函数。)

背景知识

  1. 学习Go语言的数组用法,多维数组的定义。
  2. 了解数组的内部实现,数组的长度和容量。
  3. 注意键值对的数组遍历。

实现思路

  1. 定义Pic函数,输入int参数,返回数组元素。
  2. 定义一维数组,将元素按照指定参数,添加到一维数组。
  3. 定义二维数组,将上面的一维数组循环添加到二维数组。

实现代码

GitHub

参考链接

  1. 练习:切片

练习 循环与函数

问题

为了练习函数与循环,我们来实现一个平方根函数:用牛顿法实现平方根函数。

计算机通常使用循环来计算 x 的平方根。从某个猜测的值 z 开始,我们可以根据 z² 与 x 的近似度来调整 z,产生一个更好的猜测:

z -= (z*z - x) / (2*z)
重复调整的过程,猜测的结果会越来越精确,得到的答案也会尽可能接近实际的平方根。

在提供的 func Sqrt 中实现它。无论输入是什么,对 z 的一个恰当的猜测为 1。 要开始,请重复计算 10 次并随之打印每次的 z 值。观察对于不同的值 x(1、2、3 ...), 你得到的答案是如何逼近结果的,猜测提升的速度有多快。

背景知识

  1. 学习Go语言的for语法和函数定义。
  2. 先定义Sqrt函数,实现for语法的三部分,初始化、终止条件值、后置语句。
  3. for循环的三部分。
    初始化语句:在第一次迭代前执行
    条件表达式:在每次迭代前求值
    后置语句:在每次迭代的结尾执行
  4. 初始化语句和后置语句是可选的。
  5. 此时你可以去掉分号,因为 C 的 while 在 Go 中叫做 for。
  6. 如果省略循环条件,该循环就不会结束,因此无限循环可以写得很紧凑。

实现思路

  1. 实现一个Sqrt函数,传入float参数,返回一个float
  2. 选择一个合理的计算平方根的函数,在指定次数内计算出符合期望的结果。
  3. 简单设置误差为0.001。

实现代码

GitHub

文章链接

  1. 练习:循环与函数