我正在编写一个 Python 脚本来为心算练习生成问题。加法和乘法很容易,但我在尝试为减法生成公正的问题时遇到了麻烦。
我希望能够指定被减数(第一个数字)的最小值和最大值——例如,对于两位数减法,它应该在 20 到 99 之间。减数还应该有一个范围选项(11-99 , 说)。对于这种情况,答案必须是肯定的,并且最好也以至少 10 为界。
所以:
- 20 < 被减数 < 99
- 11 < 减数 < 99
- 答案 = 被减数 - 减数
- 答案 >= 10
当然,所有数值都应该用作变量。
我满足以下条件:
ansMin, ansMax = 10, 99
subtrahendMin, minuendMax = 11,99
# the other max and min did not seem to be necessary here,
# and two ranges was the way I had the program set up
answer = randint(ansMin, ansMax)
subtrahend = randint(subtrahendMin, minuendMax - answer)
minuend = answer + subtrahend # rearranged subtraction equation
这里的问题是被减值最终几乎全部超过 50,因为答案和减数是首先生成并相加的,并且只有它们中位于范围底部 25% 的部分才会得到低于 50 的结果%。(编辑:严格来说这不是真的——例如,底部 1% 加上底部 49% 会起作用,而且百分比无论如何都不是描述它的坏方法,但我认为这个想法很清楚。)
我还考虑尝试完全随机生成被减数和减数值,然后如果答案不符合标准(即,被减数比减数至少大于 answerMin 的值并且它们两者都在上面列出的标准内),但我认为这会导致类似的偏见。
我不在乎它是否完全均匀,但这太遥远了。我希望被减值在允许的范围内是完全随机的,而减数值在被减数允许的范围内是随机的(如果我想对了,这将偏向于较低的值)。我认为我并不真正关心答案的分布(只要它没有可笑的偏见)。有没有更好的方法来计算这个?