Поиск значения 'p' в симуляции броска монеты - PullRequest
0 голосов
/ 14 июня 2019

Новичок в кодировании, пытающийся найти значение 'p' в симуляции броска монеты. В данный момент получаю ошибку атрибута:

Объект 'int' не имеет атрибута 'sum'.

Как это могло быть? пожалуйста, помогите. '' '

import numpy as np
import random
attempts = 0
t = 0

for I in range (10000):
      attempts = random.randint(2, 30)
      if (attempts.sum >= 22 ):
      t += 1

p = t / 10000 
print(p)

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Если вы просто пытаетесь подбросить монету 10000 раз и посмотреть, сколько голов (или хвостов, если хотите), то это простой способ сделать это. Функция random.random возвращает такое число, что 0 <= x <1, поэтому в 50% случаев оно должно быть меньше .5. </p>

import random

tosses = 100000

t = 0
for i in range(tosses):
    if random.random() < .5:
        t += 1

p = t / tosses
print(p)
0 голосов
/ 14 июня 2019

attempts - последнее сгенерированное случайное целое число.int не имеет атрибута (поля данных) sum.Поскольку вы недостаточно описали, что, по вашему мнению, делает ваш код, мы не можем решить эту проблему.

Python's sum функция добавляет последовательность элементов;см. документацию с примерами.


Вы пытаетесь подсчитать что-то с помощью переменной m, но не даете ей начальное значение.

Вы устанавливаете t в 0 и позжеразделите его на предел цикла, но вы никогда не меняли значение;это будет 0.0.


Обновление после комментариев OP

Я думаю, теперь я понимаю: вы хотите оценить вероятность получения как минимум 22 голов (иликакую бы сторону вы ни выбрали) в наборе 30 бросков справедливой монеты.Я сделаю все возможное, чтобы использовать ваш оригинальный код.

Прежде всего, вы должны бросить честную монету;Вызов функции, который вы сделали, генерирует случайное целое число в диапазоне [2, 30].Вместо этого вам нужно выполнить вызов, такой как приведенный ниже, группами по 30:

flip = random.randint(0,1)

Это дает вам 0 или 1. Давайте предположим, что мы хотим подсчитать 1 результатов: это позволяет нампросто добавьте серию:

count = sum(random.randint(0,1) for _ in range(30))

Это зациклится 30 раз, поместит результаты в список и сложит их;есть ваш счет желаемых сальто.Теперь выполните 10 000 из этих групп с 30 переворотами, проверяя каждую на 22 результата:

import random
t = 0

for i in range (10000):
    count = sum(random.randint(0,1) for _ in range(30))
    if (count >= 22):
        t += 1

p = t / 10000 
print(p)

Теперь, если вы хотите еще больше усилить это, используйте тот факт, что успешное сравнение (то есть True)будет оцениваться до 1;False будет 0: сделать все 10 000 испытаний во внешнем понимании (in-line for):

t = sum( 
         sum(random.randint(0,1) for flip in range(30)) > 22
     for trial in range(10000) )
print(t / 10000)

flip и trial - фиктивные переменные цикла;вы можете использовать любые два.

Наконец, обычно лучше создать именованные переменные для параметров ваших алгоритмов, таких как

threshhold  = 22
trial_limit = 10000
flip_limit  = 30

и использовать эти имена в вашем коде.

...