编程新手,学习python。试图让这个程序工作

时间:2013-05-31 19:26:47

标签: python counter

首先,指向“问题”的链接:

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'

2 个答案:

答案 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)

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