引言
今年下半年项目经历如实复盘,7月底结束了某厂的国球比赛之后,就和Qt不打不相识了,学习CPP浅尝未止,未完待续。
新需求要求用python重构Qt项目,国庆期间学习其语法,在JavaScript基础的加持下,不禁感叹此胶水语言的简洁,少儿编程课的广告已屡见不鲜。Write less, do more这句话感觉更匹配它,而不是长江前浪下的jQuery了。
场景
将近月中,快到了打工族发米的日子,刚好看到一个**微信拼手气红包**的案例,随手分享一下,先看一段**python**代码:
以上,意为,将200元随机分给3人,暂定每人得到的为a元(a为整数),算是微信拼手气红包的简略版,也可见py语言的简洁。
闲言少叙,以前端思维理解,用JavaScript的方法再实现一版,每人得到的金额可精确到元角分,使用toFixed(2)方法,(a保留小数点后两位):
正文
/**
* 生成随机数组
* _total 总数,默认为200
* _len 分len份,默认为3
*/
const log = console.log;
function randomFn(_total, _len) {
let total = _total || 200;
let len = _len || 3;
let arr = [];
for (let i = 0; i < len - 1; i++) {
//拼手气红包分给3人,暂时取2个随机值
let temp = Number((Math.random() * total + 1).toFixed(2));
if (arr.indexOf(temp) === -1) {
//arr为空数组,元素下标为-1时,添加到arr内
arr.push(Math.random() * total + 1);
}
}
log(arr);
arr.unshift(0);
arr.push(total);
arr.sort((a, b) => a - b);
log(arr);
/*
数学思维,
数组开头取0,末尾取总数total,此时为200,
[0, a, b, ···, f, 200]
(200 - f) + (f - ··· - b) + (b - a) + (a - 0) = 200
求和 取0到200的差集,
*/
for (let j = 0; j < len; j++) {
arr[j] = Number((arr[j + 1] - arr[j]).toFixed(2));
}
arr.length = len;
return arr;
}
let res = randomFn(200, 3);
log(`张三得${res[0]}元,李四得${res[1]}元,王五得${res[2]}元`);
/*
不同的随机情况在此罗列:
张三得62.05元,李四得95.26元,王五得42.69元
张三得19.14元,李四得148.85元,王五得32.01元
张三得11.22元,李四得123.88元,王五得64.89元
张三得6.82元,李四得146.11元,王五得47.07元
张三得115.79元,李四得22.4元,王五得61.81元
张三得67.3元,李四得27.55元,王五得105.15元
*/
微信拼手气红包实际操作如下,能看出三个随机数的差值还是比较大的:
因红包限额200元为上限,600元的实验结果只能是一碗水端平,时间有限,有兴趣的小伙伴可以试试400或500元的结果: