如何在函数中使用random.randint?

时间:2014-03-05 22:56:11

标签: python dictionary

我有一本字典:

units['pm']={'as': 2, 'ar': 5, 'de': 2, 'co': 2, 'asr': 7, 'he': 10}

然后我有一组简单的'if statements':

p1attackers = 50
p2attackers = 50
p1att= 0

if units['pm']['de'] == 2:

import random

for i in xrange(p1attackers):
    key = random.randint(1,10)  
    if key == 1:
        p1att += 1
    elif key == 2:
        p1att += 1
    else:
        p1att += 0

基本上这里发生的是,'random.randit'选择50个数字,如果这些数字是1或2,则将1添加到p1att。无论如何要使这整件变得更小或更短。也许没有使用'if statements'和函数?

5 个答案:

答案 0 :(得分:3)

你实际上可以这样做:

sum((random.randint(1,5) == 1) for i in xrange(50))

另外,对于numpy,我认为你可以做类似的事情:

np.random.binomial(50, .2)

答案 1 :(得分:1)

你可以使用列表理解:

p1att = sum([1 for _ in xrange(p1attackers) if (random.randint(1, 10) <= 2)])

编辑: 或者如Adam Cushner所建议的那样,你不能使用它们:

p1att = sum(1 for _ in xrange(p1attackers) if (random.randint(1, 10) <= 2))

答案 2 :(得分:1)

for i in xrange(p1attackers):
    key = random.randint(1,10)  
    if key == 1:
        p1att += 1
    elif key == 2:
        p1att += 1

表示add 1 to p1att 50 times on a probability of 2/10

你可以在

中简化它
p1att = sum(1 for _ in xrange(p1attackers) if random.randint(1,10) < 3)

答案 3 :(得分:0)

for block中的所有内容都可以替换为:

p1att += 1 if (random.randint(1, 10) <= 2) else 0

这是Python的条件分配

答案 4 :(得分:0)

为了便于阅读,添加了一些括号:

from random import randint
p1attackers = 100 # for example

p1att = sum(1 if (randint(1,10) <= 2) else 0 for _ in range(p1attackers))

p1att = sum(1 for _ in range(p1attackers) if randint(1,10) <= 2)

p1att = sum((randint(1,10) <= 2) for _ in range(p1attackers))

蟒蛇不漂亮吗?