[英]Python dice rolling simulation
我遇到了一个代码问题,我需要将六面模具滚动1000次,然后返回一个列表,列出了模具上每个数字的滚动次数。
代码运行得很好,我可以在最后得到一个列表,但是我的列表一直有0代替4,所以看起来我的函数没有保持标记正在滚动的数字4或根本没有滚动。
我有点难过,我想也许有人可以帮忙。 任何和所有的帮助表示赞赏。
这是我的代码。
def rollDie(number):
one = 0
two = 0
three = 0
four = 0
five = 0
six = 0
for i in range(0, number):
roll=int(random.randint(1,6))
if roll == 1:
one = one+1
elif roll == 2:
two = two+1
elif roll == 3:
three = three+1
elif roll == 4:
four == four+1
elif roll == 5:
five = five+1
elif roll == 6:
six = six+1
return [one,two,three,four,five,six]
你有一个小错字; 你正在测试平等,而不是分配:
four == four+1
应该:
four = four+1
但是,您已经有一个介于1和6之间的数字,为什么不将其作为结果列表的索引? 这样你就不必使用那么多if
语句。 保持数据不受变量名称的影响:
def rollDie(number):
counts = [0] * 6
for i in range(number):
roll = random.randint(1,6)
counts[roll - 1] += 1
return counts
我无法改进Martijn Pieters的答案。 :-)但是使用列表可以更方便地解决这个问题。
import random
def rollDie(number):
# create a list with 7 values; we will only use the top six
rolls = [0, 0, 0, 0, 0, 0, 0]
for i in range(0, number):
roll=int(random.randint(1,6))
rolls[roll] += 1
return rolls
if __name__ == "__main__":
result = rollDie(1000)
print(result[1:]) # print only the indices from 1 to 6
而且,这有点棘手,但是这里有一个更好的方法来创建7个条目的列表,所有条目都设置为零:
rolls = [0] * 7
为什么要自己计算零? 让Python为你工作更容易。 :-)
编辑:列表的长度为7,因为我们要使用索引1到6.列表中还有一个位置0,但我们不使用它。
另一种方法是将骰子卷映射到索引上。 这是一个非常简单的映射:只需减去1.因此,1的掷骰将进入列表的索引0,2的掷骰将进入索引1,依此类推。 现在我们将使用列表中的每个位置。
这是那个版本:
import random
def rollDie(number):
rolls = [0] * 6
for i in range(0, number):
roll=int(random.randint(1,6))
rolls[roll - 1] += 1
return rolls
if __name__ == "__main__":
result = rollDie(1000)
print(result)
你应该做random.randint(1, 7)
,否则你永远不会得到6。
...
roll = random.randint(1, 7)
import random
def dice():
print random.randint(1,6)
dice()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.