在定义Fibonacci序列时,使用了以下代码:
def fibonacci(n):
current=0
after=1
for i in range(1,n):
current,after=after,current+after
return after
每次通过时,for循环如何知道增加1?我尝试使用while循环while e<=n:
并返回错误,因为我没有定义e
。
答案 0 :(得分:3)
python中的for循环遍历项目或生成器。在您的示例中,range(1,n)
将在python2中的list
之间返回[1, n)
个元素,或者在{python3中yield
for
生成for item in [1, 6, 8, 9]:
print(item)
。
基本上,range
循环可以迭代任何类型的 iterables :
range(1, 10, 1) # The defaut [1 .. 9] numbers
range(1, 10, 2) # From 1 until 9 with 2 of increment
将打印1,6,8和9。
使用import time
import pyautogui
import wx
import threading
import sys
import win32api
class bucky(wx.Frame):
def __init__(self,parent,id):
self.positionx = ""
self.positiony = ""
wx.Frame.__init__(self,parent,id,'AutoClick 2.0', size=(300,200))
panel=wx.Panel(self)
self.buttonpos=wx.Button(panel,label="Left Screen",pos=(30,10),size=(80,40))
self.buttonpos2=wx.Button(panel,label="Right Screen",pos=(180,10),size=(80,40))
self.button=wx.Button(panel,label="Start",pos=(120,90),size=(60,30))
self.button2=wx.Button(panel,wx.ID_EXIT,label="Exit",pos=(120,120),size=(60,30))
self.Bind(wx.EVT_BUTTON, self.action, self.button)
self.Bind(wx.EVT_BUTTON, self.closebutton, self.button2)
self.Bind(wx.EVT_BUTTON, self.position, self.buttonpos)
self.Bind(wx.EVT_BUTTON, self.position, self.buttonpos2)
self.Bind(wx.EVT_CLOSE, self.closewindow)
def position(self, event):
label = event.GetEventObject().GetLabel()
if label == "Left Screen":
self.positionx = 1640
self.positiony = 183
self.buttonpos.Disable()
self.buttonpos2.Enable()
elif label == "Right Screen":
self.positionx = 3308
self.positiony= 186
self.buttonpos.Enable()
self.buttonpos2.Disable()
def closebutton(self,event):
self.Destroy()
def closewindow(self,event):
self.Destroy()
def action(self,event):
self.button.Disable()
def callback():
while 1:
pos = pyautogui.position()
time.sleep(10)
pos1 = pyautogui.position()
if (pos1[0] == pos[0]) and (pos1[1] == pos[1]):
win32api.SetCursorPos((self.positionx, self.positiony))
pyautogui.click()
else:
pass
t = threading.Thread(target=callback)
t.start()
if __name__=='__main__':
app=wx.PySimpleApp()
frame=bucky(parent=None,id=1)
frame.Show()
app.MainLoop()
,有一个第3个可选参数,允许您指定增量:
A = rand(3,3,3);
P(1) = max(max(A(:,:,1)));
P(2) = max(max(A(:,:,2)));
P(3) = max(max(A(:,:,3)));
答案 1 :(得分:1)
for
循环不会递增,而是迭代 for
循环不会递增,而是要求所谓的iterable提供值来处理。
在您的示例中,iterable为range(1,n)
。
在Python 2.x中,range(1, n)
创建了一个值列表,for
循环只要求列表在每次运行中提供下一个值,直到列表从值中耗尽。< / p>
在Python 3.x中,range(1, n)
已经过优化,并返回特殊的可迭代类型<range>
,当for
循环询问时,它会提供下一个值。
答案 2 :(得分:0)
默认情况下,如果您没有指定您的步骤,即i在范围内(开始,停止,步骤),则增量被视为一个增量,否则它是您指定的步骤。