我有一本字典:
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'和函数?
答案 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))
蟒蛇不漂亮吗?