Python "для l oop и def" попрактиковался и получил "TypeError: 'int' объект не повторяется" - PullRequest
0 голосов
/ 08 апреля 2020

Вот мое кодирование следующим образом.

import random

import math

def count_hit_in_cirle(iteration):

    randX=random.uniform(-1.0,1.0) # returns a X random float in INclusive [-1.0, 1.0]
    randY=random.uniform(-1.0,1.0) # returns a y random float in INclusive [-1.0, 1.0]
    one_if_in_circle=0
    for i in range(iteration):
         def one_if_in_circle(randX, randY):
             if math.sqrt(randX*randX+randY*randY) <= 1:
                 return 1
             else:
                 return 0
    return (sum(one_if_in_circle(randX, randY)))

count_hit_in_cirle(1000)

Но я получил ошибку вот так:

count_hit_in_cirle(1000)
Traceback (most recent call last):

  File "<ipython-input-4-4dcc579bc645>", line 1, in <module>
    count_hit_in_cirle(1000)

  File "<ipython-input-3-4fbc77f1c9ec>", line 11, in count_hit_in_cirle
    return (sum(one_if_in_circle(randX, randY)))

TypeError: 'int' object is not iterable

И тогда я попытался:

return (sum(one_if_in_circle(randX, randY)))

Все еще Я получил ошибку:

"Ошибка типа: объект 'function' не повторяется"

Кто-нибудь может сказать мне, как я могу исправить свое кодирование? Большое вам спасибо

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Похоже, вы пытаетесь создать генератор. Вам нужно поместить l oop внутри функции, а не вокруг нее, и использовать yield вместо return.

def count_hit_in_cirle(iteration):

    randX=random.uniform(-1.0,1.0) # returns a X random float in INclusive [-1.0, 1.0]
    randY=random.uniform(-1.0,1.0) # returns a y random float in INclusive [-1.0, 1.0]
    one_if_in_circle=0
    def one_if_in_circle(randX, randY):
        for i in range(iteration):
            if math.sqrt(randX*randX+randY*randY) <= 1:
                yield 1
            else:
                yield 0
    return (sum(one_if_in_circle(randX, randY)))

Ваша функция просто возвращает одно целое число, а не последовательность, которая sum() может повторяться.

0 голосов
/ 08 апреля 2020

one_if_in_circle определяется как переменная типа int в one_if_in_circle=0 и как функция в def one_if_in_circle(randX, randY). Измените одну из них.

...