Программа Python, которая бросает честный кубик, считает количество бросков до того, как появится 6 - PullRequest
0 голосов
/ 29 сентября 2018
import random

sample_size = int(input("Enter the number of times you want me to roll the die: "))

if (sample_size <=0):

    print("Please enter a positive number!")

else:
    counter1 = 0

    counter2 = 0

    final = 0

    while (counter1<= sample_size):

        dice_value = random.randint(1,6)

        if ((dice_value) == 6):
            counter1 += 1

        else:
            counter2 +=1

    final = (counter2)/(sample_size)  # fixing indention 


print("Estimation of the expected number of rolls before pigging out: " + str(final))

Правильна ли здесь используемая логика?Он будет повторять бросок кубика до тех пор, пока не будет брошен один, при этом отслеживая количество бросков, которое потребовалось до появления одного кубика.Это дает значение 0,85, когда я запускаю его для высоких значений (500 +)

Спасибо

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Придерживаясь вашей концепции, я бы создал список, содержащий каждый бросок, затем использовал бы перечисление для подсчета количества индексов между каждым 1 и суммировал их, используя указатели в качестве маркеров.

переменная, которая хранит сумму количества бросков, которые потребовались до того, как появился 1 - OP

from random import randint

sample_size = 0
while sample_size <= 0:
    sample_size = int(input('Enter amount of rolls: '))

l = [randint(1, 6) for i in range(sample_size)]

start = 0
count = 0 

for idx, item in enumerate(l):
    if item == 1:
        count += idx - start
        start = idx + 1

print(l)
print(count)
print(count/sample_size)
Enter amount of rolls: 10
[5, 3, 2, 6, 2, 3, 1, 3, 1, 1]
7
0.7

Sameple Size 500:

Enter amount of rolls: 500
406
0.812
0 голосов
/ 29 сентября 2018
import random

while True:
  sample_size = int(input("Enter the number of times you want me to roll a die: "))
  if sample_size > 0:
    break

roll_with_6 = 0
roll_count = 0

while roll_count < sample_size:
  roll_count += 1
  n = random.randint(1, 6)
  #print(n)
  if n == 6:
    roll_with_6 += 1

print(f'Probability to get a 6 is = {roll_with_6/roll_count}')

Один пример вывода:

Enter the number of times you want me to roll a dile: 10
Probability to get a 6 is = 0.2

Другой пример вывода:

Enter the number of times you want me to roll a die: 1000000
Probability to get a 6 is = 0.167414
...