当你掷五个六面骰子时,计算五个不同数字的概率 所以我4天前从C++开始学习Python,我在一个编码挑战上有点被卡住,当你投掷56个骰子时,它计算了投掷五个不同数字的概率。 我做了很多研究,尝试了很多方法,但还是没能成功。 这是我的一段代码: def numOne(roll): return len([dice1 for dice1 in roll if dice1 == 1]) def numTwo(roll): return len([dice2 for dice2 in roll if dice2 == 2]) def numThree(roll): return len([dice3 for dice3 in roll if dice3 == 3]) def numFour(roll): return len([dice4 for dice4 in roll if dice4 == 4]) def numFive(roll): return len([dice5 for dice5 in roll if dice5 == 5]) def numSix(roll): return len([dice6 for dice6 in roll if dice6 == 6]) r = range(1,7) sample = [(i,j,k,l,m) for i in r for j in r for k in r for l in r for m in r] event1 = [roll for roll in sample if numOne(roll) == 1] event2 = [roll for roll in sample if numTwo(roll) == 1] event3 = [roll for roll in sample if numThree(roll) == 1] event4 = [roll for roll in sample if numFour(roll) == 1] event5 = [roll for roll in sample if numFive(roll) == 1] event6 = [roll for roll in sample if numSix(roll) == 1] print (len(event1)*len(event2)*len(event3)*len(event4)*len(event5)*len(event6), "/" ,len(sample))
或者这个:当你掷五个六面骰子时,计算五个不同数字的概率 所以我4天前从C++开始学习Python,我在一个编码挑战上有点被卡住,当你投掷56个骰子时,它计算了投掷五个不同数字的概率。 我做了很多研究,尝试了很多方法,但还是没能成功。 这是我的一段代码: def numOne(roll): return len([dice1 for dice1 in roll if dice1 == 1]) def numTwo(roll): return len([dice2 for dice2 in roll if dice2 == 2]) def numThree(roll): return len([dice3 for dice3 in roll if dice3 == 3]) def numFour(roll): return len([dice4 for dice4 in roll if dice4 == 4]) def numFive(roll): return len([dice5 for dice5 in roll if dice5 == 5]) def numSix(roll): return len([dice6 for dice6 in roll if dice6 == 6]) r = range(1,7) sample = [(i,j,k,l,m) for i in r for j in r for k in r for l in r for m in r] event1 = [roll for roll in sample if numOne(roll) == 1] event2 = [roll for roll in sample if numTwo(roll) == 1] event3 = [roll for roll in sample if numThree(roll) == 1] event4 = [roll for roll in sample if numFour(roll) == 1] event5 = [roll for roll in sample if numFive(roll) == 1] event6 = [roll for roll in sample if numSix(roll) == 1] print (len(event1)*len(event2)*len(event3)*len(event4)*len(event5)*len(event6), "/" ,len(sample)),python,probability,dice,Python,Probability,Dice,或者这个: def numOne(roll): return len([dice1 for dice1 in roll if dice1 == 1]) def numTwo(roll): return len([dice2 for dice2 in roll if dice2 == 2]) def numThree(roll): return len([dice3 for dice3 in roll if dice3 == 3]) def numFour(roll): retur
def numOne(roll):
return len([dice1 for dice1 in roll if dice1 == 1])
def numTwo(roll):
return len([dice2 for dice2 in roll if dice2 == 2])
def numThree(roll):
return len([dice3 for dice3 in roll if dice3 == 3])
def numFour(roll):
return len([dice4 for dice4 in roll if dice4 == 4])
def numFive(roll):
return len([dice5 for dice5 in roll if dice5 == 5])
def numSix(roll):
return len([dice6 for dice6 in roll if dice6 == 6])
r = range(1,7)
sample = [(i,j,k,l,m) for i in r for j in r for k in r for l in r for m in r]
event = [roll for roll in sample if numOne(roll)==1 and numTwo(roll)==1 and
numThree(roll)==1 and numFour(roll)==1 and numFive(roll)==1 or
numSix(roll)==1]
print(len(event) / len(sample))
当然,两者都错了。我还没有放弃,如果我有任何发现,我会删掉,同时,任何提示或建议都将不胜感激
这里有一个简单得多的例子来解释我想要达到的目的:计算掷三个骰子得到一个六的概率:
def numsix(roll):
return len([dice for dice in roll if dice == 6])
r = range(1,7)
sample = [(i,j,k,l) for i in r for j in r for k in r for l in r]
event = [roll for roll in sample if numsix(roll)==1]
print(len(event) / len(sample))
如果你试图模拟概率,尤其是掷骰子,那么你应该使用一种叫做随机性的策略 您的代码不包含任何类型的随机性。排除两个代码示例计算不正确结果的事实,它总是计算相同的结果。如果不包括随机抽样,则意味着您已经提前知道将要发生什么,您的问题将成为一个直接的计算 Python是一种与C++不同的动物。您不应该试图使用面向对象语言的知识来使用解释性编程语言编写代码
import random
same = 0
totalRolls = 100000
for i in range(1, totalRolls + 1):
myRolls = []
while len(myRolls) < 5:
myRolls.append(random.randint(1, 6))
if len(set(myRolls)) == 5:
same += 1
print(same / totalRolls)
…或者你可以使用数学方法:在第一卷上有6个可能的有利结果。下一轮将有5个可能的有利结果,下一轮之后有4个,依此类推。这是
6代码>。如果你将这个数字除以每一个掷骰总数的结果总数,例如6*6*6*6*6=6^6
,你也会得到你的答案:0.0925925925…
如果你试图模拟概率,特别是掷骰子,那么你应该使用一种称为随机性的策略
您的代码不包含任何类型的随机性。排除两个代码示例计算不正确结果的事实,它总是计算相同的结果。如果不包括随机抽样,则意味着您已经提前知道将要发生什么,您的问题将成为一个直接的计算
Python是一种与C++不同的动物。您不应该试图使用面向对象语言的知识来使用解释性编程语言编写代码
import random
same = 0
totalRolls = 100000
for i in range(1, totalRolls + 1):
myRolls = []
while len(myRolls) < 5:
myRolls.append(random.randint(1, 6))
if len(set(myRolls)) == 5:
same += 1
print(same / totalRolls)
…或者你可以使用数学方法:在第一卷上有6个可能的有利结果。下一轮将有5个可能的有利结果,下一轮之后有4个,依此类推。这是6代码>。如果你将这个数字除以每次掷骰总数的结果总数,例如6*6*6*6*6=6^6
,你也会得到你的答案:0.0925925925…
那么你有什么问题吗…?你的意思是想让代码模拟掷骰子并看到结果吗?您的代码是以一种非常非Python的方式编写的-您可以添加一个简单的英语/伪代码示例来解释您正在尝试做什么吗?好的,我正在尝试让代码模拟掷5个骰子,并在sample
中列出所有可能性,然后通过带有“condition”的for
循环列出事件
当然,最后它会打印事件长度除以样本长度(如函数和样本中所示)。这是一个简单得多的代码版本,它计算掷骰子4次时正好有16次的概率:那么你有什么问题吗…?你的意思是你想让代码模拟掷骰子并看到结果吗?您的代码是以一种非常非Python的方式编写的-您可以添加一个简单的英语/伪代码示例来解释您正在尝试做什么吗?好的,我正在尝试让代码模拟掷5个骰子,并在sample
中列出所有可能性,然后通过带有“condition”的for
循环列出事件
当然,最后它会打印事件长度除以样本长度(如函数和样本中所示)。这里有一个简单得多的代码版本,它计算了掷骰子4次时正好有16次的概率:非常感谢!是的,Python与C++有很大的不同。无论如何,您的代码打印出0.09,这是正确的答案,但有一个问题:为什么将totalRolls
设置为100000?我把它改为6**5
,因为我只是掷骰子5次,以使程序编译得更快。此外,我想知道蒙特卡罗的模拟是否适用于无序选择而不重复,例如在一组卡片中画四张a,你认为如何?@Midou35000totalRolls
可以是任何足够大的数字。除非你想取计算出的平均值,否则你通常不想处理一小部分观察值,因为不寻常的随机性模式会对你的结果产生更大的影响。看见蒙特卡罗方法可用于大多数涉及随机性的模拟!最后一个问题,即使totalRolls
的值是固定的,但每次显示的概率都不同,您能解释一下吗?@Midou35000您希望随机掷骰子每次都有相同的结果吗?如果你想“每次都得到相同的结果”,你可能正在寻找一个“我现在就得到”。所以我们不是在计算,我们是在模拟。我需要计算准确的概率,有什么提示吗?谢谢!是的,Python与C++有很大的不同。无论如何,您的代码打印出0.09,这是正确的答案,但有一个问题:为什么将totalRolls
设置为100000?我把它改为6**5
,因为我只是掷骰子5次,以使程序编译得更快。另外,我想知道蒙特卡洛的