Python 概率不加1

Python 概率不加1,python,probability,Python,Probability,我想知道是否可以在查看第二个for循环时得到一些帮助。在这种情况下,骰子是不公平的,我对偶数的骰子有很重的权重。代码有两个问题:概率加起来不等于1,奇数的概率大于偶数 import random NUM_ROLLS = 100 DIE_SIDES = [1,3,2,4,4,6] odd_roll_result = 0 even_roll_result = 0 probability = 0 # Create the dictionary to store the results of eac

我想知道是否可以在查看第二个
for
循环时得到一些帮助。在这种情况下,骰子是不公平的,我对偶数的骰子有很重的权重。代码有两个问题:概率加起来不等于1,奇数的概率大于偶数

import random

NUM_ROLLS = 100
DIE_SIDES = [1,3,2,4,4,6]
odd_roll_result = 0
even_roll_result = 0
probability = 0

# Create the dictionary to store the results of each roll of the die.
rolls = {}

#Loop for rolling the die NUM_ROLLS times
for r in range(NUM_ROLLS):

    roll_result = random.randint(0,len(DIE_SIDES)-1) 
    if roll_result in rolls:
        # Add to the count for this number.
        rolls[roll_result] += 1    
    else:
        # Record the first roll result for this number.
        rolls[roll_result] = 1
    #print(DIE_SIDES[roll_result])

# Print how many times each number was rolled
for roll_result in range(len(DIE_SIDES)):

#    print("The number", str(roll_result).format(roll_result, DIE_SIDES[roll_result]),
#          "was rolled", str(rolls[roll_result]), "times.")
    print("The number", roll_result, DIE_SIDES[roll_result],
          "was rolled", str(rolls[roll_result]), "times.")
    if roll_result == 1 or  roll_result == 3 or roll_result == 5:
        odd_roll_result = odd_roll_result + rolls[roll_result]
        #print(odd_roll_result)
    if roll_result == 2 or  roll_result == 4 or roll_result == 6:
        even_roll_result = even_roll_result + rolls[roll_result]
        #print(even_roll_result)

probability_odd = odd_roll_result/NUM_ROLLS
th_exp = 1/6 
prob_th = abs(th_exp-probability_odd)
probability_even = even_roll_result/NUM_ROLLS

print("The probability of getting an odd number is " , probability_odd )
print("Theoretical probability of getting an odd number is " , prob_th )
print("The probability of getting an even number is " , probability_even )

首先,正如其他评论者所指出的,您应该修正DIE_SIDES的定义:

DIE_SIDES = [1,2,3,4,5,6]
然后改变掷骰子的路线,如下所示:

roll_result = random.randint(1,len(DIE_SIDES))
或者更好:

roll_result = random.choice(DIE_SIDES)

您的代码将
0
视为滚动结果,但不将其计入
奇数滚动结果
偶数滚动结果
。这就是概率加起来不等于1的原因。

请编辑问题以包括程序的输出。
roll\u结果的范围是0到5,而不是1到6,因为它是表的索引。
DIE\u SIDES=[1,3,2,4,4,6]
??所以偶数确实比奇数多?你应该使用
random.choice(DIE_SIDES)
而不是
random.randint(len(DIE_SIDES))
或者你实际上没有使用你的理论饮食的边
randint
函数包括它的两个边界,所以你想要
randint(1,len(DIE_SIDES))
,没有
+1
。对于更像
range
(不包括上限)的行为,使用
randrange
@Blckknght我刚刚检查了文档,其中说
返回从低(包含)到高(排除)的随机整数。
。因此,我的答案应该是正确的,但问题中的
随机
模块不是您链接到文档的模块。你应该读一读。@Blckknght谢谢!接得好!我太习惯使用numpy了,没有注意到它是一个不同的功能。我能够合并这些变化,它工作起来很有魅力。。。。