首先,指向“问题”的链接:
http://interactivepython.org/courselib/static/thinkcspy/Labs/montepi.html
我在做好计数器设置之前做得很好。一旦我弄清楚这一点,我就有信心做其余的事。
import turtle
import math
import random
fred = turtle.Turtle()
fred.shape("circle")
wn = turtle.Screen()
wn.setworldcoordinates(-1,-1,1,1)
def main():
count = 0
def ifDist():
if fred.distance(0,0) > 1:
fred.color("blue")
else:
fred.color("red")
counter()
def counter():
count = count + 1
return count
def darts():
numdarts = 2
for i in range(numdarts):
randx = random.random()
randy = random.random()
x = randx
y = randy
fred.penup()
fred.goto(randx, randy)
ifDist()
fred.stamp()
fred.goto(randx, -randy)
ifDist()
fred.stamp()
fred.goto(-randx, randy)
ifDist()
fred.stamp()
fred.goto(-randx, -randy)
ifDist()
fred.stamp()
darts()
print(count)
main()
wn.exitonclick()
它为计数器保持打印0。我已经尝试了几天(至少这段代码没有给出错误消息......)我确信这是一个简单的修复,但我只是不知道它会是什么。真的很感激任何帮助。
编辑:在else语句中包含counter(),正如我之前在修补它时所做的那样。它现在调用计数器,但我也遇到错误:
追踪(最近一次通话): 文件“C:\ Users \ USER \ Google Drive \ School \ PYTHON \ 5_16_piEstimator.py”,第53行, 主要() 文件“C:\ Users \ USER \ Google Drive \ School \ PYTHON \ 5_16_piEstimator.py”,第49行,主要 飞镖() 投掷文件“C:\ Users \ USER \ Google Drive \ School \ PYTHON \ 5_16_piEstimator.py”,第37行 ifDist() ifDist中的文件“C:\ Users \ USER \ Google Drive \ School \ PYTHON \ 5_16_piEstimator.py”,第20行 计数器() 文件“C:\ Users \ USER \ Google Drive \ School \ PYTHON \ 5_16_piEstimator.py”,第23行,在柜台 count = count + 1 UnboundLocalError:赋值前引用的局部变量'count'
答案 0 :(得分:3)
除了不调用您的counter()
功能外,无论如何都不会这样做。
正如评论中提到的@Perkins,您无法修改范围之外的引用。您无法增加count
,因为int
在Python中是不可变的。 count = count + 1
正在创建一个新的int
对象并丢弃旧对象。新实例需要绑定到计数变量
假设Python3,你可以说count是“非本地的”
def counter():
nonlocal count
count = count + 1
return count
这将告诉Python可以更改main
中的计数绑定,而不是尝试使用名为count的本地(计数器)变量
答案 1 :(得分:1)
永远不会调用你的计数器函数,因此计数永远不会增加。