gpt4 book ai didi

python - 在 while 循环中使用生成器将文本传输到屏幕上

转载 作者:行者123 更新时间:2023-12-01 07:10:18 25 4
gpt4 key购买 nike

我有一个类,它初始化相同单词的不同变体的群体,然后随着时间的推移将字母重新排列成所需的单词。在 pygame 中,我试图将当前单词显示在屏幕上,然后根据类(class)实时变化进行更改。我面临的问题是能够调用类并同时更新屏幕。

有人告诉我应该使用生成器并产生变化,然后返回主循环,但是这不起作用,因为我的 Population 类在 while 循环内完成了所有工作在它的内部是__init__

我怎样才能产生当前的变化,我想改变主循环内blit到屏幕上的文本?

代码:

class Population:
def __init__(self, size):
...
while variation.fitness < len(target): # unknown amount of variations
self.selection() # restarts selection process
...
pg.init()
top = ''
...
while not done:
...
if event.key == pg.K_RETURN:
Population(1000)
top = # I want to make this variable be the current variation within Popualtion
...
top_sentence = font.render((top), 1, pg.Color('blue'))
screen.blit(top_sentence, (400,400))

最佳答案

为什么要在循环中不断创建新的Population对象?它是一个类,因此您可以添加接口(interface)(方法)来与对象通信以及提交和检索数据。语句 self.selection() 必须位于类的方法中,而不是构造函数中。参见Classes的概念.

创建一个方法(例如NextVariation),它对self.selection()进行一次调用,而不是在循环中进行多个“选择”。该方法返回当前变化。该方法不需要内部循环,因为它在主应用程序循环中连续调用:

class Population:
def __init__(self, size):
self.size = size
# [...]

def SetTarget(self, target):
self.target = target

def NextVariation(self):
if variation.fitness < len(self.target): # unknown amount of variations
self.selection() # restarts selection process

return variation # return current variation
population = Population(1000)
top = ''

while not done:
# [...]

if event.key == pg.K_RETURN:

population.SetTarget(...)

top = population.NextVariation()

# [...]
top_sentence = font.render((top), 1, pg.Color('blue'))
screen.blit(top_sentence, (400,400))

这也可以使用迭代器来产生变化,如您上一个问题的答案 - Update text in real time by calling two functions Pygame 所示。

<小时/>

请注意,或者,当按下 return 时,甚至可以创建该类的新实例。但如果您需要创建一个新对象并重新启动进程,或者您只是想更改进程的一个参数,这取决于您的需要:

population = Population(1000)
top = ''

while not done:
# [...]

if event.key == pg.K_RETURN:

population = Population(...)

top = population.NextVariation()

# [...]
top_sentence = font.render((top), 1, pg.Color('blue'))
screen.blit(top_sentence, (400,400))

关于python - 在 while 循环中使用生成器将文本传输到屏幕上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58254618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com