Python“ for loop and def”实践,并得到“ TypeError:'int'对象不可迭代”

问题描述 投票:0回答:2

这是我的编码,如下。

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)))

仍然出现错误:

“ TypeError:'函数'对象不可迭代”

有人可以告诉我如何修改编码吗?非常感谢

python for-loop object typeerror iterable
2个回答
0
投票

one_if_in_circle在one_if_in_circle=0中定义为int类型变量,在def one_if_in_circle(randX, randY)中定义为函数。更改其中之一。


0
投票

似乎您正在尝试创建一个生成器。您需要将循环放在函数内部而不是函数周围,并使用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()可以迭代的序列。

© www.soinside.com 2019 - 2024. All rights reserved.