gpt4 book ai didi

python - 如何在 while 循环中将程序的控制权传回调用函数

转载 作者:太空宇宙 更新时间:2023-11-03 17:19:32 25 4
gpt4 key购买 nike

我正在开发一个小型视觉扑克骰子应用程序,并且我正在添加一个帮助屏幕来阐明规则和支出。我在 while 循环中运行我的程序,因此目前每当按下帮助按钮时,即使帮助功能已完成,它也永远不会退出循环。不知道到底为什么。下面是两个函数:

class PokerApp(object):

def __init__(self, interface):
self.dice = Dice()
self.money = 100
self.interface = interface

def run(self):
choice = self.interface.want_to_play()
while self.money >= 10 and choice != "Quit":
if choice == "Help":
self.interface.help()
self.run()
else:
self.play_round()
self.interface.close()

然后是我的帮助功能:

def help(self):
rule_format = "{value:<20}{reward:>5}".format
help_screen = Rectangle(Point(100, 300), Point(500, 100))
help_screen.setFill("gray")
help_screen.draw(self.win)
help_title = Text(Point(300, 125), "Dice Poker Rules")
help_title.setSize(16)
help_title.setStyle("bold")
help_title.draw(self.win)
value_reward = [("Two Pairs", 5), ("Three of a Kind", 8), ("Full House", 12),
("Four of a Kind", 15), ("Straight", 20), ("Five of a Kind", 30)]
rule_start = [200, 260]
rules = []
for value, reward in value_reward:
rules.append(Text(Point(*rule_start), rule_format(value=value, reward=reward)))
rule_start[1] -= 20

for index, item in enumerate(rules):
item.draw(self.win)

while True:
p = self.win.getMouse()
while not p:
continue
help_screen.undraw()
help_title.undraw()
[rule.undraw() for rule in rules]

最佳答案

首先,您有两个未终止的 while 循环。第一个 while 循环没有结束条件,也没有用于退出循环的 break 语句。这意味着它永远不会结束。此外,一旦 self.win.getMouse() 返回一个假值,not p 将变为 true,并且内部的 while 循环将运行,永远什么都不做,因为 p 永远不会改变。如果您打算在 p 变为 false 时结束 help 函数,则需要将内部 while 循环替换为 if 语句并将 继续 更改为中断。另外,您真的想在第一次迭代后取消绘制所有内容吗?更正后的代码:

while True:
p = self.win.getMouse()
if not p:
break
help_screen.undraw()
help_title.undraw()
[rule.undraw() for rule in rules]

关于python - 如何在 while 循环中将程序的控制权传回调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33309059/

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