Python中替代goto命令的选项?

0 投票
4 回答
3168 浏览
提问于 2025-04-16 08:32

我有一个用Python写的程序,主要是用海龟图形库来画图。这个程序会问用户想画多少个正方形,然后每画一个正方形,就用下面的代码把一个计数器加1:

counter=1
<drawing code here>
counter +=1

接下来,我想检查一下用户输入的正方形数量和实际画的数量是否相等。如果相等,我想跳到脚本的最后一部分,让它显示完成!!。但是我不知道怎么跳到脚本的某个特定部分,因为我习惯的那种goto命令在Python里不支持(我知道,goto=乱七八糟的代码)。

我发现一个简单的解决办法,就是下载一个别人做的模块,这样就可以在Python里导入goto命令,像在批处理文件里那样使用。但我更希望能找到一个原生的Python解决方案!

我现在的代码是:

from turtle import *
import time
counter=1
color("red", "blue")
down()

user=int(raw_input('how many balls do you want?'))
counter +=1
if user===counter:

# solution goes here!

else:

for step in range(24):
        right(105)
        forward(100)
        right(105)
        forward(100)
        right(105)
        forward(100)
        right(105)
        forward(100)

up()
goto(120,0)
down()


counter +=1
if user==counter:

#solution goes here!

else:

for step in range(24):
        right(105)
        forward(100)
        right(105)
        forward(100)
        right(105)
        forward(100)
        right(105)
        forward(100)

up()
goto(0,-50)
write("Done!")

time.sleep(5) 

如果你有解决这个问题的办法或者其他替代方案,我会非常感激!

4 个回答

0

一些提示:

>>> def square():
    print "+--+"
    print "|  |"
    print "|  |"
    print "+--+"
    print


>>> range(5)
[0, 1, 2, 3, 4]
>>> for x in range(5):
    print x
    square()


0
+--+
|  |
|  |
+--+

1
+--+
|  |

[省略]

2

别先数好有多少个方块再去最后画,而是直接根据需要的次数循环,每次画一个方块。

3

这样说有帮助吗?

import turtle   # don't pollute the namespace
import time

def getInt(msg):
    return int(raw_input(msg))

def drawBall():
    turtle.down()
    for i in range(96):
        turtle.right(105)
        turtle.forward(100)
    turtle.up()

def moveOver():
    turtle.goto(120,0)

def Done():
    turtle.goto(0,-50)
    turtle.write('Done!')
    time.sleep(5)

def main(): 
    turtle.color('red','blue')
    for i in range(getInt('How many balls do you want?')):
        drawBall()
        moveOver()
    Done()

if __name__=="__main__":
    main()

不要把问题想成一长串的指令。相反,试着把问题拆分成更小的动作,比如“画一个球”,然后把每个动作写成一个步骤;接着再想想怎么把这些步骤组合在一起,达到你的目标。如果你发现自己在重复写同样的代码,那说明你可能走入了误区。

撰写回答