我正在努力研究一个程序来判断创建的磁盘是否接触到预定义框的边缘。解析器不断说出诸如
之类的内容NameError: global name 'disksdescription' is not defined
Warning: variable 'left' is assigned to, but never used
目前的代码是:
import numpy.random as nr
def touch_sides(disk, radius, x, y):
for disk in disksdescription:
for left in disk.values()[2]:
if x <= radius:
left = True
else:
left = False
for right in disk.values()[3]:
if x >= 1-radius:
right = True
else:
right = False
def run_code():
radius = 0.1
coordinates = nr.uniform(size=(1,2))
print coordinates
disksdescription = []
for row in range(0, coordinates):
x = coordinates[row, 0]
y = coordinates[row, 1]
disksdescription.append({'x': x, 'y': y, 'left': left, 'right': right})
touch_sides(coordinates, radius, x, y)
print disksdescription
答案 0 :(得分:0)
<强>概述强>
此代码中存在许多基本问题。我要退出并试图解决你的几个过程问题。
最重要的是,我强烈建议您采用增量编程:编写几行代码,只需一步或两步逻辑。然后测试,直到你确定它做你想要的。只有这样你才能写更多的代码。
这样做的好处是问题通常很容易调试:只有新的2-5行是可疑的。与你目前的情况形成对比:你有几个错误;修理其中任何一个都不会给你一个明显更好的结果,所以你很难在你立刻得到所有这些之前先了解你做错了什么。
什么是功能?
将其视为某种安全设置,可能就像用餐厨房的传递窗口一样。服务器通过窗口粘贴订单(纸条)。烹饪完成后,食物会回来。 通信的所有都通过该窗口。当我们要求煎蛋卷时,就我们所知道的那样,厨师正在烤肉的整个牛肉切片上切碎肉块......或者将一些冰冻的东西捏成碎片。看不到,分不清楚;那是一间带有不透明墙壁的独立房间。
对我来说意味着什么?
您的计划中有三个“房间”:(琐碎的)主程序, run_code 和 touch_sides 。他们中没有人能看到其他人。 run_code 中的变量左与 touch_sides 中的变量左无关。这些是完全独立的实体,与 Kim Jong Il和 Kim Kardashian相比没有更多的联系。
特别是, touch_sides 的第一行是Python编译器的最终呵呵?时刻。没有定义的名为diskdescription的东西。更进一步,你花费工作来获得左和正确的值,但是你不会在窗口中滑回它们。 run_code 不知道你在那里做了什么有用的东西。
需要修复的内容
此时,您知道可以在函数之间可靠地传递值。 现在您可以添加实际代码。
还有什么?
熟悉布尔表达式的概念。了解您的原始代码
if x <= radius:
left = True
else:
left = False
直接缩减为
left = (x <= radius) # the parentheses aren't necessary
现在应该足够了。长寿,和节目。