A.B*_*and 1 python random python-3.x
我被要求模拟滚动两个公平的骰子,侧面1-6.所以可能的结果是2-12.
我的代码如下:
def dice(n):
x=random.randint(1,6)
y=random.randint(1,6)
for i in range(n):
z=x+y
return z
Run Code Online (Sandbox Code Playgroud)
我的问题是,这只是返回掷骰子1次的结果,所以结果总是2-12.我希望它返回滚动骰子(n)次的总和.
有人对我有什么建议吗?
在循环中掷骰子:
def dice(n):
total = 0
for i in range(n):
total += random.randint(1, 6)
return total
Run Code Online (Sandbox Code Playgroud)
该+=
增强赋值运算符基本上可以归结为同样的事情,total = total + random.randint(1, 6)
总结整数时(这是比稍微复杂一些,但对于像列表可变对象,只有事项).
def dice(n):
return sum(random.randint(1, 6) for _ in range(n))
Run Code Online (Sandbox Code Playgroud)
这基本上for
与第一个例子中的循环相同; 循环n
时间,总结了1到6之间的许多随机数.
如果不是滚动n
时间,您需要生成n
2个骰子滚动的结果,您仍然需要在循环中滚动,并且您需要将结果添加到列表中:
def dice(n):
rolls = []
for i in range(n):
two_dice = random.randint(1, 6) + random.randint(1, 6)
rolls.append(two_dice)
return rolls
Run Code Online (Sandbox Code Playgroud)
这也可以通过列表理解更紧凑地写出来:
def dice(n):
return [random.randint(1, 6) + random.randint(1, 6) for _ in range(n)]
Run Code Online (Sandbox Code Playgroud)
您还可以使用random.choice()
生成的总和列表; 这些是自动加权的; 这基本上预先计算了36个可能的骰子值(11个唯一值),每个值具有相同的概率:
from itertools import product
two_dice_sums = [a + b for a, b in product(range(1, 7), repeat=2)]
def dice(n):
return [random.choice(two_dice_sums) for _ in range(n)]
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,您都会得到一个包含n
结果的列表:
>>> dice(5)
[10, 11, 6, 11, 4]
>>> dice(10)
[3, 7, 10, 3, 6, 6, 6, 11, 9, 3]
Run Code Online (Sandbox Code Playgroud)
您可以将列表传递给print()
函数以将这些列表打印在一行或单独的行上:
>>> print(*dice(5))
3 7 8 6 4
>>> print(*dice(5), sep='\n')
7
8
7
8
6
Run Code Online (Sandbox Code Playgroud)