当前位置: 首页 > 知识库问答 >
问题:

在python中使用多个While True循环

彭鸿畅
2023-03-14

我目前有一个问题,每次我试图在我的代码中使用一个以上的虽然真实循环网站崩溃。我编码与python海龟,一个很好的初学者的方式开始编码与python。所以基本上,我试图让海龟物体无限旋转,直到玩家按下空格键。当海龟物体是蓝色时,海龟被触发旋转。一旦玩家按下按钮,海龟物体就会变成绿色,标志着它停止转动,并在按下空格键之前朝着海龟物体所面对的方向前进300像素。这个小游戏的目标是击中被称为目标的红球。每当代码运行时,该目标都会在画布上的随机位置生成。一旦乌龟物体与目标相撞,屏幕顶部的分数将从0变为1。

import turtle
import random

t = turtle.Turtle()
target = turtle.Turtle()
scoreBoard = turtle.Turtle()
scoreBoard.ht()
target.ht()
screen = turtle.Screen()
x = random.randint(-300,300)
y = random.randint(-300,300)
scoreNum = 0
turnSpeed = 2

t.shape('turtle')
t.color('blue')

target.speed(0)
target.penup()
target.goto(30,0)
target.shape('circle')
target.color('red')
target.st()

scoreBoard.color('orange')
scoreBoard.speed(0)
scoreBoard.penup()
scoreBoard.goto(-75,310)
scoreBoard.write('Score:' + str(scoreNum),font=('Arial',15, 'normal'))

def turnStop():
  t.color('green')
  t.forward(300)

def checkCollision():
  if abs(t.xcor() - target.xcor()) < 10 and abs(t.ycor() - target.ycor()) < 10:
    return True
  else:
    return False

screen.onkey(turnStop,'space')
screen.listen()

while t.color()[0] == 'blue':
  t.right(turnSpeed)

while t.color()[0] == 'green':  
  if checkCollision():
    scoreNum = scoreNum + 1
    scoreBoard.clear()
    scoreBoard.write('Score:' + str(scoreNum),font=('Arial',15, 'normal'))

如你们所见,我有两个while-True循环。当玩家在游戏开始时是蓝色的。这允许海龟物体永远旋转,直到玩家击中空格键。另一个while true循环用于当玩家按下空格键变为绿色时,检查是否与红球目标发生碰撞。但每次我在运行代码后按空格键,网站就会崩溃。有什么想法吗?提前谢谢!

我是juni学习的学生。这是一个在线课程,在那里你可以去和老师实时学习编码。它有自己的文本编辑器,这就是我一直在使用的代码。

还有没有更好的方法把你的代码粘贴到这个论坛上?我不得不将代码粘贴到堆栈溢出,并将每行代码缩进4次,这有点单调乏味。

共有2个答案

江奕
2023-03-14

好的,我和我的老师讨论了我的代码问题。我们修复了它,现在它正在按预期运行。

import turtle
import random

t = turtle.Turtle()
target = turtle.Turtle()
scoreBoard = turtle.Turtle()
scoreBoard.ht()
target.ht()
screen = turtle.Screen()
x = random.randint(-300,300)
y = random.randint(-300,300)
scoreNum = 0
turnSpeed = 2

t.shape('turtle')
t.color('blue')

target.speed(0)
target.penup()
target.goto(30,0)
target.shape('circle')
target.color('red')
target.st()

scoreBoard.color('orange')
scoreBoard.speed(0)
scoreBoard.penup()
scoreBoard.goto(-75,310)
scoreBoard.write('Score:' + str(scoreNum),font=('Arial',15, 'normal'))

def turnStop():
  t.color('green')

def checkCollision():
  if abs(t.xcor() - target.xcor()) < 10 and abs(t.ycor() - target.ycor()) < 10:
    return True
  else:
    return False

screen.onkey(turnStop,'space')
screen.listen()

while True:
  while t.color()[0] == 'blue':
    t.right(turnSpeed)

  if t.color()[0] == 'green':  
    for i in range(30):
      t.forward(10)
      if checkCollision():
        x = random.randint(-300,300)
        y = random.randint(-300,300)
        scoreNum = scoreNum + 1
        scoreBoard.clear()
        scoreBoard.write('Score:' + str(scoreNum),font=('Arial',15, 'normal'))
        target.goto(x,y)
        t.penup()
        t.goto(0,0)
        t.color('blue')
        t.pendown()
        break
    else:
      break

基本上,我必须在我的while color is blue循环中嵌套一个while True循环,沿着我的条件边检查代码是否为绿色。感谢所有回应的人,感谢他们试图帮助我解决我的问题!我真的很感激!

水焱
2023-03-14

当你有两个for循环时,直到完成另一个循环,一个循环才会被到达。为什么不在主循环中使用另一个if条件?

while t.color()[0] == 'blue':  
    if t.color()[0] == 'green':
        t.right(turnSpeed)

PS:首先粘贴,然后标记为代码

 类似资料:
  • 问题内容: 假设您必须在python中创建10个类对象,并对其进行处理,例如: 您将如何循环处理,并为每个对象分配一个变量(如),从而使代码更短?每个对象都可以在循环外部访问 问题答案: 每天都会以不同的方式询问这个问题。答案是:将数据放在变量名之外,这是必填的博客文章。 在这种情况下,为什么不列出objs?

  • 问题内容: 我在嵌套循环内的单个sqlite数据库上使用多个游标时遇到了问题。我找到了一个适合我的解决方案,但是它的功能有限,而且我还没有看到在线记录此特定问题。我这样发布: 明确的问题/解决方案可用 看看是否有更好的解决方案 也许我在python模块中发现了一个缺陷 我的Python应用程序将社交关系数据存储在sqlite中。数据集包括两个表之间的一对多关系:myConnections和shar

  • 假设我有一些这样的方法: 但我不想调用序列方法: 这很无聊。如果我添加一个新方法:,我需要添加手动:

  • 问题内容: 我正在寻找使用for循环来创建多个在迭代(i)上命名的变量,并为每个变量分配一个唯一的int。 如您所见,我迷路了。理想情况下,我正在寻找输出 有什么建议? 问题答案: 您可以一站式完成所有操作 然后您可以使用 但是使用列表而不是字典可能更好 然后您可以使用 甚至(获得前三个学期)

  • 我在递归地计算一个数的位数和,直到和小于10。例如; 由于最后的数字和是9,那么我们停止。我意识到遵循递归方法,在我的知识中,它工作得很好; 但是,如果我们有类似的情况,正确的输出是1,因为但是我的代码停止在第二个级别,并以我可以得到一些帮助来修改我的第二个代码以解决这个问题吗?提前谢了。

  • 问题内容: 给定以下代码(不起作用): 有没有办法使这项工作?或者,如果用户满意,我是否需要做一次检查以打破输入循环,然后再进行另一项(更受限制的)签入外部循环以一起打破? 问题答案: 我的第一个直觉是将嵌套循环重构为一个函数,然后使用它来分解。