我正在从Coursera学习python。我写了一个程序,据说当我点击屏幕时,它会绘制圆圈。请参阅以下计划 -
# Dots
# importing
import simplegui
import math
width = 600
height = 600
ball_list = []
radius = 20
colour = "Yellow"
# position ditector
def distance(p,q) :
return math.sqrt((p[0]-q[0])**2 + (p[1]-q[1])**2)
# Mouse click -- Change the position
def click(pos) :
ball_list.append(pos)
# global position
# global colour
# if distance(pos, position) < radius :
# colour = "Blue"
# else :
# position = list(pos)
# colour = "Yellow"
# Drawing the ball
def draw(canvas) :
for position in ball_list :
canvas.draw_circle(position , radius , 2, "Black" , colour)
# Creating the frame
frame = simplegui.create_frame("Dots" , 600,600)
frame.set_canvas_background("White")
frame.set_draw_handler(draw)
# mouse click
frame.set_mouseclick_handler(click)
# Start
frame.start()
但我的怀疑是在def draw(画布),for position in ball_list
,我没有定义任何位置。我将position = list(pos)
作为评论。那么position in ball_list
中的位置值是什么,循环如何工作而没有任何价值?什么是迭代?循环和迭代之间有什么区别?
如果以上代码在您的IDE中无效,请转到http://www.codeskulptor.org/#user38_VSZ0jZ0uTh_0.py 并运行它。
答案 0 :(得分:1)
for
循环略有不同。我会尝试使用您编写的代码进行解释。每次调用click
函数时,您都会将pos
附加到名为ball_list
的列表中,您需要绘制圆圈。< / p>
def click(pos) :
ball_list.append(pos) ## appends the pos to ball_list
现在,在您拥有pos
列表之后,您将调用以下函数。
def draw(canvas) :
for position in ball_list :
canvas.draw_circle(position , radius , 2, "Black" , colour)
此处变量position
遍历从第一个到最后一个值开始附加到列表pos
的所有ball_list
。
如果您想知道position
变量的价值和价值是多少,那么请打印它的值并自行查看,如下所示:
def draw(canvas) :
for position in ball_list :
print position ## prints one pos value in the ball_list for each iteration.
canvas.draw_circle(position , radius , 2, "Black" , colour)
答案 1 :(得分:0)
在python中,for x in y:
遍历y
中的每个项目,并将当前迭代的值分配给变量x
,以便您可以在该变量的主体内引用该值。 for循环。 Here's an eval.in可能会帮助您了解其工作原理。
这里是与Java的简要比较,假设变量&#34; arrayList&#34;是一个ArrayList
(Java)或list
(Python)的东西,你想对列表中的每个值调用方法do_something_with()
。
的Python:
for x in arrayList:
do_something_with(x)
爪哇:
for (int i = 0; i < arrayList.size(); i++) {
do_something_with(arrayList.get(i));
}
从根本上说,你可以编写看起来更像Java的Python:
for x in range(0, len(arrayList)):
do_something_with(arrayList[x])
这段代码会做同样的事情。但是,Python意识到这是一个足够普遍的任务,它为它提供一定程度的抽象是有价值的(在编程语言中通常称为"syntactic sugar")。您可以在python documentation中阅读有关Python迭代器的更多信息,以及如何迭代不同类型的数据。
答案 2 :(得分:0)
a_list = [1, 2, 3, 4, 5, 6, 7]
for x in [10, 20, 30, 40, 50]:
print x
10 20 三十 40 50
for x in a_list:
print x
1 2 3 4 五 6 7
for i in range(10):
print i
1 2 3 4 五 6 7 8 9 10
答案 3 :(得分:0)
假设您有自己的类,希望它可以迭代:
class MyRange(object):
def __init__(self, low, high):
self.low = low
self.high = high
def __iter__(self):
low = self.low
while self.high >= low:
yield low
low += 1
现在你可以:
r = MyRange(1, 10)
for number in r:
print number,
number
现在具有每次迭代中从__iter__
返回的值。这就是Python的工作原理,在你的情况下,你有一个list
,它有自己的__iter__
并以类似的方式使用。