1

首先,“问题”的链接:

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 行,在 main() 文件“C:\Users\USER\Google Drive\School\ PYTHON\5_16_piEstimator.py”,第 49 行,主要 darts() 文件“C:\Users\USER\Google Drive\School\PYTHON\5_16_piEstimator.py”,第 37 行,在 darts ifDist() 文件“C:\Users \USER\Google Drive\School\PYTHON\5_16_piEstimator.py”,第 20 行,在 ifDist counter() 文件“C:\Users\USER\Google Drive\School\PYTHON\5_16_piEstimator.py”,第 23 行,在计数器计数中= count + 1 UnboundLocalError:赋值前引用了局部变量“count”

4

2 回答 2

3

除了不调用你的counter()函数外,这无论如何都行不通。

正如评论中提到的@Perkins,您不能在您的范围之外修改引用。你不能递增count,因为int在 Python 中是不可变的。count = count + 1正在创建一个新int对象并丢弃旧对象。新实例需要绑定到count变量

假设 Python3,你可以说 count 是“非本地的”

def counter():
    nonlocal count
    count = count + 1
    return count

这将告诉 Python 可以更改 count in 的绑定,main而不是尝试使用名为 count 的本地(计数器)变量

于 2013-05-31T20:15:02.400 回答
1

您的计数器函数永远不会被调用,因此计数永远不会增加。

于 2013-05-31T19:29:11.477 回答