繁体   English   中英

我不能打破函数内部的 While 循环吗?

[英]Am I not able to break a While loop inside of a function?

那么为什么它不允许我打破函数中的 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()

好。 首先,将函数定义移出循环。 为什么要在循环内定义?

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

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM