气象台的工作人员委托你对一组数据进行分析,这里有全球一些城市从一月到十二月份的降水量,每个城市的数据都由\n分割开来,每个城市名后面紧跟着一个:冒号。
如下所示:
var data = "rome:jan 81.2,feb 63.2,mar 70.3,apr 55.7,may 53.0,jun 36.4,jul 17.5,aug 27.5,sep 60.9,oct 117.7,nov 111.0,dec 97.9"
+ "\n"
+ "london:jan 48.0,feb 38.9,mar 39.9,apr 42.2,may 47.3,jun 52.1,jul 59.5,aug 57.2,sep 55.4,oct 62.0,nov 59.0,dec 52.9"
+ "\n"
+ "paris:jan 182.3,feb 120.6,mar 158.1,apr 204.9,may 323.1,jun 300.5,jul 236.8,aug 192.9,sep 66.3,oct 63.3,nov 83.2,dec 154.7"
+ "\n"
+ "ny:jan 108.7,feb 101.8,mar 131.9,apr 93.5,may 98.8,jun 93.6,jul 102.2,aug 131.8,sep 92.0,oct 82.3,nov 107.8,dec 94.2"
+ "\n"
+ "vancouver:jan 145.7,feb 121.4,mar 102.3,apr 69.2,may 55.8,jun 47.1,jul 31.3,aug 37.0,sep 59.6,oct 116.3,nov 154.6,dec 171.5"
+ "\n"
+ "sydney:jan 103.4,feb 111.0,mar 131.3,apr 129.7,may 123.0,jun 129.2,jul 102.8,aug 80.3,sep 69.3,oct 82.6,nov 81.4,dec 78.2"
+ "\n"
+ "bangkok:jan 10.6,feb 28.2,mar 30.7,apr 71.8,may 189.4,jun 151.7,jul 158.2,aug 187.0,sep 319.9,oct 230.8,nov 57.3,dec 9.4"
+ "\n"
+ "tokyo:jan 49.9,feb 71.5,mar 106.4,apr 129.2,may 144.0,jun 176.0,jul 135.6,aug 148.5,sep 216.4,oct 194.1,nov 95.6,dec 54.4"
+ "\n"
+ "beijing:jan 3.9,feb 4.7,mar 8.2,apr 18.4,may 33.0,jun 78.1,jul 224.3,aug 170.0,sep 58.4,oct 18.0,nov 9.3,dec 2.7"
+ "\n"
+ "lima:jan 1.2,feb 0.9,mar 0.7,apr 0.4,may 0.6,jun 1.8,jul 4.4,aug 3.1,sep 3.3,oct 1.7,nov 0.5,dec 0.7";
现在任务是这样的,你得提供两个函数,一个计算指定城市的各月降水量平均数,另一个计算降水量方差。
函数原型如下:
function mean(town, string)
function variance(town, string)
town参数指代城市名,string则是降水量数据
用法举例如下:
mean("london", data) \\ 51.19(9999999999996)
variance("london", data) \\ 57.42(833333333374)
思路比较简单:
1.要计算方差必须先算出平均数来
2.要计算平均数,要先根据城市名取出降水量数据
3.要取降水量数据必须先遍历所有数据,找到了再分割字符串
应该注意的问题:
1.有可能找不到指定的城市,它不存在,那么直接返回-1
2.浮点数运算有可能出现精度问题,忽略不计,不必取整或截断
//扩展一个startwith方法
if (typeof string.prototype.startwith !== "function") {
string.prototype.startwith = function(str) {
return this.indexof(str) === 0;
};
}
//查询指定城市的降水量数据
function searchdata(town, strng) {
var datas = strng.split("\n");
var num = datas.length;
for (var i = 0; i < num; i++) {
if (datas[i].startwith(town)) {
return datas[i];
}
}
return null;
}
//求降水量平均数
function mean(town, strng) {
var total = 0;
var current = searchdata(town, strng);
if (current) {
var pair = current.split(":");
if (pair[0] !== town) {
return -1;
}
var allmonths = pair[1].split(",");
for (var j = 0; j < allmonths.length; j++) {
var permonth = allmonths[j];
total += parsefloat(permonth.split(" ")[1]);
}
return total / 12;
}
return -1;
}
//求方差
function variance(town, strng) {
var average = mean(town, strng);
var total = 0;
var current = searchdata(town, strng);
if (current) {
var pair = current.split(":");
if (pair[0] !== town) {
return -1;
}
var allmonths = pair[1].split(",");
for (var j = 0; j < allmonths.length; j++) {
var permonth = allmonths[j];
var rainfall = parsefloat(permonth.split(" ")[1]);
total += math.pow(average - rainfall, 2);
}
return total / 12;
}
return -1;
}
以上就是javascript趣题:统计降水量的内容。