【问题标题】:Struggling with For/while Loops in python [closed]在 python 中与 For/while 循环作斗争[关闭]
【发布时间】:2018-05-02 21:46:11
【问题描述】:

非常感谢社区迄今为止提供的帮助,但我遇到了另一个绊脚石。

我正在尝试运行一个脚本,该脚本将绘制一个三角形,然后按照输入值的指示重复多次,每个值都大于前一个值,即如果输入 4,第一个有边 10,第二个20 以此类推。

当它被限制在一定数量的值时,我可以实现它。但是当我使用 for 循环时,它会变得疯狂。

我希望社区可以让我告诉我哪里出了问题,因为必须有一个比我已经实现的更优雅的解决方案。

from turtle import *
levels = int(input("how many triangles do you want? "))
for triangles in range(1, levels + 1):
    if countList == 1:
        goto(0,0)
        forward((levels*10)/2)
        left(120)
        forward(levels*10)
        left(120)
        forward(levels*10)
        left(120)
        forward((levels*10)/2)
     else:            
        forward((levels * 10) / 2)
        left(120)
        forward(levels * 10)
        left(120)
        forward(levels * 10)
        left(120)
        forward((levels * 10) / 2)
        right(60)
        forward(levels * 10)
        right(120)
        forward(levels * 10)
        right(120)
        forward(levels * 10)
        right(120)
        forward(levels * 10)
        right(120)
        forward((levels * 10)/2)

所以任何帮助都会很棒。

【问题讨论】:

  • “它疯了”对任何人都没有帮助。详细描述行为。
  • 嗨,马修。你会如何形容“发疯”?另外,你在哪里定义countList? (我对 Turtles 不熟悉,countList 是专门针对它的吗?)
  • 什么是countList?你试过先画一个三角形吗?
  • 设置断点并单步执行您的代码。这样你就可以查明你在做什么以及哪里出了问题。

标签: python python-3.x


【解决方案1】:

我是这样解释你的问题的:你希望用户输入它应该绘制的三角形的数量。第一个三角形的长度应为 10,第二个三角形的长度应为 20 等

查看您的代码。变量 levels 只存储应该绘制的三角形的数量。变量 triangles 是随着循环的每次迭代而变化的。变量 countList 尚未在任何地方定义。

以下是代码如何更改以达到预期结果:

from turtle import *
levels = int(input("how many triangles do you want? "))

for triangles in range(1, levels + 1):
    forward((triangles * 10) / 2)
    left(120)
    forward(triangles * 10)
    left(120)
    forward(triangles * 10)
    left(120)
    forward((triangles * 10) / 2)

Screen().exitonclick()

由于 三角形 在循环的每次迭代中都会发生变化,因此需要使用它来确定要绘制的线的大小。此外,if 语句是不必要的,因为将第一个三角形的代码与其他三角形的代码区分开来的是代码:

goto(0,0)

这个函数调用也是不必要的,因为海龟是在点 0,0 初始化的,并且在绘制了一个完整的三角形后,它会在相同的位置结束。

Screen().exitonclick() 只是为了确保窗口不会在循环终止时立即关闭。

用户输入 10 后,结果如下所示:

【讨论】:

    【解决方案2】:

    这里有一些简单的代码,我认为它们的功能类似于您想要的(Python 3.6.5):

    import turtle
    alex = turtle.Turtle()
    
    levels = int(input("How many triangles good sir?: "))
    
    for i in range(1, levels + 1):
        alex.forward(20*i)
        alex.left(120)
        alex.forward(20*i)
        alex.left(120)
        alex.forward(20*i)
        alex.left(120)
    
    turtle.mainloop()
    

    对于循环的每次迭代,我将乌龟移动的距离乘以 i。第一个三角形的边长为 20 (20*1) 个单位,第二个三角形的边长为 40 (20*2) 个单位,然后是 60 (20*3) 个单位,依此类推。

    如果我正确理解了您的问题,您应该可以使用此示例。

    【讨论】:

    • 感谢您的帮助,让我重回正轨!
    猜你喜欢
    • 2021-06-10
    • 2021-10-30
    • 2016-03-25
    • 2017-02-19
    • 1970-01-01
    • 2018-07-30
    • 2015-04-23
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多