用PHP随机出100道20以内的数学加减法练习题
为了给家里的孩子出20以内的加减法习题,每次都是手写,今天干脆利用老本行PHP写一个方法吧。实现目标,题量自定义、任意设置数字范围和结果得数范围、出题不能重复。
小学数学20以内加法口诀表
以下是PHP出小学数学练习题的源代码:
<?php
$mrand_1 = 1; //数字范围,最小数
$mrand_2 = 20; //数字范围,最大数
$leibei_1_limit = 20; //加法得数最大值
$leibei_2_limit = 0; //减法得数最小值
$tinum = 100; //出题数量
$leibie = 2; //加法1,减法2
$tistr='';
$jilu_str='';
$now_num=1;
function get_suanshi_jiafa($v1,$v2,$v3,$jilu_str,$tinum,$now_num){//加法
$num_1=mt_rand($v1,$v2);
$num_2=mt_rand($v1,$v2);
$ee=$now_num;
if (strpos($jilu_str,",".$num_1."|".$num_2.",")!==false){//重复题重新生成
get_suanshi_jiafa($v1,$v2,$v3,$jilu_str,$tinum,$ee);
}else{
if ($num_1+$num_2<=$v3){//
$str_e = $num_1." + ".$num_2." =<br>";
$jilu_get = ",".$num_1."|".$num_2.",";
$jilu_str .= $jilu_get;
$ee++;
echo $str_e;
if ($ee<=$tinum){//题量不足再次出题
get_suanshi_jiafa($v1,$v2,$v3,$jilu_str,$tinum,$ee);
}
}else{//得数超纲了
get_suanshi_jiafa($v1,$v2,$v3,$jilu_str,$tinum,$ee);
}
}
}
function get_suanshi_jianfa($v1,$v2,$v3,$jilu_str,$tinum,$now_num){//减法
$num_1=mt_rand($v1,$v2);
$num_2=mt_rand($v1,$v2);
$ee=$now_num;
if (strpos($jilu_str,",".$num_1."|".$num_2.",")!==false){//重复题重新生成
get_suanshi_jianfa($v1,$v2,$v3,$jilu_str,$tinum,$ee);
}else{
if ($num_1-$num_2>=$v3){//
$str_e = $num_1." - ".$num_2." =<br>";
$jilu_get = ",".$num_1."|".$num_2.",";
$jilu_str .= $jilu_get;
$ee++;
echo $str_e;
if ($ee<=$tinum){//题量不足再次出题
get_suanshi_jianfa($v1,$v2,$v3,$jilu_str,$tinum,$ee);
}
}else{//得数超纲了
get_suanshi_jianfa($v1,$v2,$v3,$jilu_str,$tinum,$ee);
}
}
}
if ($leibie=='1'){//加法
get_suanshi_jiafa($mrand_1,$mrand_2,$leibei_1_limit,$jilu_str,$tinum,$now_num);
}
if ($leibie=='2'){//减法
get_suanshi_jianfa($mrand_1,$mrand_2,$leibei_2_limit,$jilu_str,$tinum,$now_num);
}
?>
之前想过用FOR循环显示,但因为增加了重复题的判断,for就不一定能达到结果得数的要求,所以就要用到了递归。
如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!
txttool.com 说一段 esp56物联 查询128 IP查询