python - 我不能打破函数内部的 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()
解决方案
出色地。首先,将函数定义移到循环之外。为什么要在循环内定义?
此外,当我尝试运行此代码时,会出现以下语法错误:
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()
推荐阅读
- javascript - SyntaxError: 应为. 线 (17:9)
- python - 避免重复 if 语句
- flutter - 如何使 Flutter HTTP 部分(范围)请求?
- javascript - 如何设置输入按键的默认输入?
- object - 扩展接口时,我们应该使用object关键字吗?
- delphi - 如何确定服务器是否只能使用 IPv6 访问
- reactjs - 将 TextInput 中输入的文本打印到控制台
- python - 在自定义 html 模板中使用 django 表单
- r - 试图在 R 中创建一个表,在其中我按向量的变量对列进行分组
- php - 使用资源控制器的 Laravel 自定义操作名称和路由名称?