我是一个新的学习者与python和现在我的代码刺激滚动一个骰子1,000倍,但我只是需要一些改进,使它刺激滚动两个骰子1,000倍。
以下是我到目前为止,这是完美的工作,只是需要一些改进:
import random
test_data = [0, 0, 0, 0, 0, 0]
n = 1000
for i in range(n):
result = random.randint(1, 6)
test_data[result - 1] = test_data[result - 1] + 1
for i in range(0, 6):
print ("Number of ", i+1, "'s: ", test_data[i])
关于如何让两个骰子滚动并获得与我的代码现在所做的类似的输出,有什么建议吗?
Number of 1 's: 180
Number of 2 's: 161
Number of 3 's: 179
Number of 4 's: 159
Number of 5 's: 146
Number of 6 's: 175
5条答案
按热度按时间e4yzc0pl1#
在这种情况下,结果是
2
和12
之间的数,但是为了简单起见,最好可能保留第一个索引。因此
test_data
列表需要增加以存储12
项,并且作为result
,我们应该调用random.randint(1, 6)
* 两次 *(而不是乘以2),并将这些项相加:在这里写
+= 1
而不是= ... + 1
也更优雅,因为这里我们避免了写test_data[result - 1]
两次。此外,在Python中,通常直接枚举集合,而不是索引。可以使用enumerate(iterable, start_index)
来生成2元组(i, n)
的可迭代,其中i
是索引。而x
是与该索引相关的集合的元素。uurity8g2#
这是两个不可区分的骰子的解决方案,意味着掷1和3与掷3和1被视为相同。在这种方法中,我们使用
dict
而不是list
,因为对于两个(或更多!)不可区分的骰子,列表将有"洞"(像3、1这样的组合永远不会出现,因为我们将它们视为1、3)。dice
现在是两个骰子,排序后3,1被视为1,3,并从一个列表转换为一个元组(基本上是一个不可变的列表),这样我们就可以用它作为字典(counts
)的键,然后我们只需要增加骰子的特定组合的计数。与列表不同的是,字典没有排序,但我们确实希望输出按dice显示的内容排序,所以我们按keys = dice排序:
这将为您提供:
ovfsdjhp3#
您可以使用
numpy
,这个解决方案允许您指定任意数量的骰子:产量:
xa9qqrwz4#
如果允许使用其他python模块,那么
random
可以使用collections. counter来计数,通过从random.randint()
切换到random. choices,可以同时掷出两个骰子:输出:
独:
如果你想得到单个骰子的结果,你可以修改代码,在生成随机数的时候不计算骰子的和,而是传递元组,我对它们进行了排序,这样(5,4,5)和(4,5,5)的投掷次数是一样的:
输出(缩短):
hzbexzde5#
1.编写一个模型类来表示一个骰子(也就是一个立方体,它的面编号为1到6)。这个类可能只有一个方法throw(),并且没有属性。(提示:使用Math.random编写throw。)然后,编写一个输出视图类,在掷出骰子后显示它。最后,编写一个控制器,让用户重复掷两个骰子。
1.利用上一个练习中的班级构建一个名为“画房子”的游戏。游戏的目标是反复掷骰子,并根据结果画出房子的各个部分。掷6次骰子可以画出建筑物,即一个正方形;掷五下可以拉上屋顶掷4让人拉上门;掷3可以画一个窗口。(有两个窗口。)完成的房子看起来像这样:/
/ \
|- -||x||x|
当然,建筑物必须在屋顶之前绘制,屋顶必须在门窗之前绘制。除了表示骰子的类之外,编写一个表示部分建成的房屋状态的模型类。然后,编写一个显示房屋的输出视图,并编写一个执行游戏规则的控制器。8.制作上一个项目中的游戏版本,让两个玩家竞争建造各自的房子。