首页 > 解决方案 > 我不能打破函数内部的 While 循环吗?

问题描述

那么为什么它不允许我打破函数中的while循环呢?另外,我不想使用主循环,因为我不明白它是如何工作的。如果您无法弄清楚发生了什么,也许您可​​以使用有效的主循环重新格式化代码?任何帮助是极大的赞赏!______________________________________________________________________

#imports
import turtle
import math
import random
import time
from turtle import Turtle, Screen

#variables
BossSpawnx = 0
BossSpawny = 0
PlayerSpawnx = -250
PlayerSpawny = -250
BossMovement = 0
global BossMovement


#initiation
Screen().screensize(500, 500)
Screen().title("Tiny Turtles")
Screen().bgcolor("gray")
print("welcome to Tiny Turtles")

#Initiating Boss
Boss = Turtle("turtle")
Boss.color("red")
turtle.delay(None)
Boss.penup()
Boss.goto(BossSpawnx, BossSpawny)
Boss.color("red")

#Initiating Player
Player = Turtle("turtle")
Player.color("cyan")
Player.penup()
Player.goto(PlayerSpawnx, PlayerSpawny)

while True:
    #Functions
    def k1():
        Player.forward(25)

    def k2():
        Player.left(35)

    def k3():
        Player.right(35)

    def k4():
        Player.backward(25)


    def follow_runner():
        print("Following")
        if BossMovement == 4:
            Boss.setheading(Boss.towards(Player))
            Boss.forward(min(Boss.distance(Player), 8))
            if Boss.xcor() == Player.xcor() and Boss.ycor() == Player.ycor():
                print('Turtletastrophy!')
                break
            else:
                Screen().ontimer(follow_runner, 10)
        else:
            BossMovement += 1



        Screen().onkey(k1, "Up")  # the up arrow key

        Screen().onkey(k2, "Left")  # the left arrow key

        Screen().onkey(k3, "Right")  # you get it!

        Screen().onkey(k4, "Down")


        Screen().listen()

        follow_runner()

标签: pythonfunctionwhile-loop

解决方案


出色地。首先,将函数定义移到循环之外。为什么要在循环内定义?

此外,当我尝试运行此代码时,会出现以下语法错误:

SyntaxError: name 'BossMovement' is assigned to before global declaration

因此global在相关函数中移动关键字。为什么要在全局范围内更改全局变量的范围?

你也应该做一次按键分配。

这是一个工作示例:

# imports
import turtle
import math
import random
import time
from turtle import Turtle, Screen

# variables
BossSpawnx = 0
BossSpawny = 0
PlayerSpawnx = -250
PlayerSpawny = -250
BossMovement = 0

# initiation
Screen().screensize(500, 500)
Screen().title("Tiny Turtles")
Screen().bgcolor("gray")
print("welcome to Tiny Turtles")

# Initiating Boss
Boss = Turtle("turtle")
Boss.color("red")
turtle.delay(None)
Boss.penup()
Boss.goto(BossSpawnx, BossSpawny)
Boss.color("red")

# Initiating Player
Player = Turtle("turtle")
Player.color("cyan")
Player.penup()
Player.goto(PlayerSpawnx, PlayerSpawny)


def k1():
    Player.forward(25)


def k2():
    Player.left(35)


def k3():
    Player.right(35)


def k4():
    Player.backward(25)


def follow_runner():
    global BossMovement
    print("Following")
    if BossMovement == 4:
        Boss.setheading(Boss.towards(Player))
        Boss.forward(min(Boss.distance(Player), 8))
        if Boss.xcor() == Player.xcor() and Boss.ycor() == Player.ycor():
            print('Turtletastrophy!')
            return True
        else:
            Screen().ontimer(follow_runner, 10)
            return False
    else:
        BossMovement += 1
        return False


Screen().onkey(k1, "Up")  # the up arrow key

Screen().onkey(k2, "Left")  # the left arrow key

Screen().onkey(k3, "Right")  # you get it!

Screen().onkey(k4, "Down")
Screen().listen()

done = False
while not done:
    done = follow_runner()


推荐阅读