Python计算并按比例获取随机票数

!本文可能 超过1年没有更新,今后内容也许不会被维护或者支持,部分内容可能具有时效性,涉及技术细节或者软件使用方面,本人不保证相应的兼容和可操作性。

之前做的一个计票程序,需要用随机票数对程序进行样本测试,当然为了使测试接近于真实情况,对于三种投票结果(赞成、反对、弃权)按比例进行适当的调整。

下面我使用Python简单阐述一下这个简单的算法,首先获取一个随机票数,可以简单的通过随机一定范围的数字来实现,这个用Python实现比较简单,可以import random,然后通过random.randint(下限, 上限)来产生。我们可以先通过IDLE下面的脚本来查询使用方法:

import random
help(random.randint)
# -- output --
# Help on method randint in module random:
#
# randint(self, a, b) method of random.Random instance
#    Return random integer in range [a, b], 
#      including both end points.

输出上面已经给出,可见其上限和下限是包含的,所以要生成100以内的随机票数,只需要random.randint(0, 100),0票是允许的,范围就是0~100。

那么如果需要按比例调整的话,只需要将最大票数,比如上界100分别乘以赞成、反对或者弃权的比例,然后作为randint的上界,再分别产生赞成、反对或者弃权的票数即可,当然我们在输出最终票数前,还需要检测下产生的三类票数之和是否越界(超过总票数),然后再多退少补,至于补到哪个上面可以随机或者按比例调整平均补上,这里提供的实现代码是按随机方式补足的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# -*- coding:UTF-8 -*-
from math import floor
import random
 
def getRandomVotes(limit):
    """ 得到随机数字作为投票票数,limit是有效票数 """
    votes = [0, 0, 0]
    a = floor(limit * 0.73)
    b = floor(limit * 0.22)
    c = floor(limit * 0.05)
    votes[0] = random.randint(0, a)
    votes[1] = random.randint(0, b)
    votes[2] = random.randint(0, c)
    total = sum(votes)
    if total == limit:
        return votes
    if total > limit:
        leave = total - limit
        index = random.randint(0,2)
        votes[index] = votes[index] - leave
    else:
        leave = limit - total
        index = random.randint(0,2)
        votes[index] = votes[index] + leave
    return votes
 
if __name__ == "__main__":
    print getRandomVotes(100)
    print getRandomVotes(100)

好了,说了这么多,其实是个很简单的算法,算作是我的Python程序的小练习吧。

若无特别说明,本网站文章均为原创,原则上这些文章不允许转载,但是如果阁下是出于研究学习目的可以转载到阁下的个人博客或者主页,转载遵循创作共同性“署名-非商业性使用-相同方式共享”原则,请转载时注明作者出处谢绝商业性、非署名、采集站、垃圾站或者纯粹为了流量的转载。谢谢合作!
请稍后...

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*