首页 > 解决方案 > Python "for loop and def" 练习并得到 "TypeError: 'int' object is not iterable"

问题描述

这是我的编码如下。

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:‘函数’对象不可迭代”

有没有人可以告诉我如何修复我的编码?太感谢了

标签: pythonfor-loopobjecttypeerroriterable

解决方案


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


推荐阅读