python - 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:‘函数’对象不可迭代”
有没有人可以告诉我如何修复我的编码?太感谢了
解决方案
看起来您正在尝试创建一个生成器。您需要将循环放在函数内部,而不是围绕它,并使用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()
可以迭代的序列。
推荐阅读
- android - Android Studio 错误:程序类型已存在:com.android.volley.BuildConfig
- sql - CREATE AS SELECT * 但从另一个表中获得一列
- gcloud - 如何指定 gcloud csv 格式分隔符
- node.js - arangoDb + nodejs:db.useBasicAuth(...) 不是函数
- laravel - Laravel builder 按关系排序
- php - 限制 Wordpress 中的字符摘录
- java - Wildfly 服务 10.0 和 10.1 在 Windows 中无法停止
- wordpress - 对同一个按钮进行不同的点击触发
- angular - attr.data 在角度 5 上返回 null
- javascript - 如果我将变量 `close` 全局定义为 `0`,为什么变量`close` 被记录为`false`?