Python中的跳跃



我想在Python代码中进行一次跳跃(比如goto…)。我知道后藤的编程很糟糕,但我现在太"深入"了,无法重建我的结构。

此外,使用函数不是一个好主意,因为我不希望程序在函数调用后继续运行代码。

我在考虑提出一个例外。我不确定这是否可行。

问题(简化):

比方说我在自由奔跑。

如果我按"左",我的角色应该开始向左跑,当他撞到墙上时,他应该开始向右跑。(类似于按下"右")

换句话说:当我的角色撞到墙上时,我希望代码块停止运行,并启动另一个代码块。

例外情况在这里有效吗?因为我不确定异常引发下的代码是否会运行,即使没有遇到异常本身。

提前感谢

编辑:我的代码:http://pastebin.com/QBy5x3g8(死)

如果我按"左",我的角色应该开始向左跑,当他撞到墙上时,他应该开始向右跑。(类似于按下"Right")换句话说:当我的角色撞到墙上时,我希望代码块停止运行,并启动另一个代码块。

这可以像一样完成

# main loop
while True:
  # check for input and respond appropriately
  if left_key_pressed:
    # keep running left until you hit a wall
    while not hit_wall:
      run_left() 
    # hit a wall, do something after
  elif right_key_pressed:
    while not hit_wall:
      run_right()
    # hit a wall, do something after

不需要做任何类型的显式Goto

此外,使用函数不是一个好主意,因为我不希望程序在函数调用后继续运行代码。

如果你不希望程序在函数调用后继续运行,你总是可以显式终止程序或抛出异常使其崩溃,但我怀疑这是你想要做的。至少,作为一名用户,我可能不希望程序因为撞到墙而终止。

"跳跃"通过函数调用、if/else、while和异常来完成。根据您的代码,以上任何一项都可能是正确的答案。如果没有,你需要重做你的代码,无论你对它有多深入。

"我知道后藤的编程很糟糕,但我太‘深入’了,不知道该如何重现我的结构。"

重构代码永远不会太深入。要求goto就是要找很多麻烦,这些麻烦会让你陷得更深,让你的问题变得更棘手。

看起来您正在函数句柄中寻找一个返回语句,该语句会中断您的进程。

祝你好运。

将逻辑移动到方法中。例如,如果您有一个"Sprite"类。如果要简化主循环,不要害怕使用什么都不做的方法

class Player(Sprite):
    ...
    def handle_key(self, keystroke):
        if keystroke == "l":
            self.dx = -1
        elif keystroke == "r"
            self.dx = 1
    ...

    def move(self):
        self.x += self.dx
        self.y += self.sy
    ...    
class Wall(Sprite):
    ... 
    def handle_key(self, keystroke):
        pass
    ...
    def move(self):
        pass

...
def main():
    sprites = init_sprites()
    ...
    while True:
        for obj in sprites:
            obj.handle_key(keystroke)
            obj.move
    ...

您可以使用一个异常:

try:
    move()
except Blocked:
    otherMove()

或者只使用if语句:

if canMove()
    move()
else:
    otherMove()

第一种方法的问题是,在抛出异常之前,很容易意外地改变状态。要么很容易将其重构为第二个选项,要么可能会产生某种意想不到的副作用。有一个无效果的检查函数,然后是一个总是能成功改变完整状态的函数,这要容易得多。

使用异常:

class Goto(Exception):
    pass
try: 
    i=1    
    while True:
        while True:
            while True:
                while True:
                    i+=1
                    if i==100:
                        raise Goto
except Goto:
    print(i) 

最新更新