如何每隔一段时间打印一次



我正在尝试学习python,在学习的过程中遇到了一些问题。

import time
import pyautogui
def SendScript():
time.sleep(2)
with open('script.txt') as f:
lines = f.readlines()
for line in lines:
time.sleep(2)
pyautogui.typewrite(line.strip())
pyautogui.press('enter')
SendScript()

每当按下"回车"键时,我都会尝试在屏幕上打印一些东西,但我是一个极度初学者,所以我真的不知道如何做到这一点。有人能帮我完成这项任务吗?

您可以创建一个新的布尔变量来跟踪之前是否按下过回车键。这样,每次for循环迭代时,pressed的值都会切换,只有当pressed的值为True时,它才会打印一些内容。

import time
import pyautogui
def SendScript():
pressed = False
time.sleep(2)
with open('script.txt') as f:
lines = f.readlines()
for line in lines:
time.sleep(2)
if pressed:
print("Something")
pressed = not pressed
pyautogui.typewrite(line.strip())
pyautogui.press('enter')
SendScript()

从一个更后退的方法,你可以做:

events=['event1', 'event2', 'event3', 'event4', 'event5', 'event6', 'event7', 'event8']
counter = 0
for event in events:
counter += 1
if counter % 2 == 0: # ie do stuff when divisible by 2, ie when its even
print('print what you want to be printed every second time')
else:
pass

当然,您不会像我在本例中那样循环处理事件。重点是计算事件,只有当这个计数是偶数时才做事情。

如另一个答案所示,一个简单的切换可以用bool实现,然后每次发生事情都可以切换:

thing = False
:
if happens(something):
thing = not thing

这可以在两种状态之间切换。允许更多状态的一种更通用的方法是使用数字变量和模运算符:

times = 0
maxtimes = 12
:
if happens(something):
times += 1
if times % maxtimes == 1:
print("ding dong")

如果你想在第12次、第24次等迭代中打印,而不是第一次、第13次等迭代,那么模可以与0进行比较,当然,如果你想要的话,也可以与该周期内的任何其他偏移进行比较。

另一个有用的技巧是在零和其他值之间进行触发器。

value = 0
othervalue = 1234
:
if happens(something):
value = othervalue - value

当然,实际上,您可以在任意两个值之间切换;从它们的和中减去当前值得到另一个。

不用说,只是切换或翻转本身并不是很有用;您可能也会在if happens(something):块中添加一些(直接或间接(用户可见的操作。

您可以使用生成器进行此操作:

def everySecondTime():
while True:
yield "hi"
yield "not hi"
mygen = everySecondTime()
print(next(mygen))
print(next(mygen))
print(next(mygen))
print(next(mygen))

这将打印

hi
not hi
hi
not hi

我相信你很清楚如何调整它来做一些其他的动作。

这种方法是否比只使用布尔值更好还有很大的争议,但我想我应该把它留在这里,这样如果你想的话,你就可以了解生成器(yield关键字(

相关内容

最新更新