【问题标题】:How do I get turtle to move based on input in Python 3?如何根据 Python 3 中的输入让海龟移动?
【发布时间】:2017-10-18 00:23:50
【问题描述】:

我正在编写一个程序,它需要在控制台中输入来控制乌龟在屏幕上的位置。例如,如果程序的用户在控制台中输入w,并按下回车键,乌龟应该向前移动 30 个单位。如果用户输入a,乌龟应该向左转45度,等等。

我编写了一些函数并为程序使用了一个无限的while 循环。它看起来像这样:

def movemattfd():
    matt.fd(30)

def movemattlt():
    matt.lt(45)

def movemattrt():
    matt.rt(45)

def movemattbk():
    matt.back(30)

def movematt():
    while True:
        input()
        if input() == 'w':
            movemattfd()

        if input() == 'a':
            movemattlt()

        if input() == 'd':
            movemattrt()

        if input() == 's':
            movemattbk()

def main():
    windowHeight = 500
    windowWidth = 500
    turtle.screensize(windowWidth, windowHeight, None)
    movematt()

main()

程序可以运行,除非我在控制台中输入w,否则至少需要输入 2 个条目才能让我的乌龟向前移动。当我试图让我的乌龟向右转时,它需要更多的时间。

有什么想法吗?提前致谢。

【问题讨论】:

  • 你应该了解将结果提取到单独的对象和elif关键字
  • 为什么在while True: 行之后首先需要input()

标签: python turtle-graphics


【解决方案1】:

每个input() 都会提示用户输入一个新条目。

您的代码所做的是,对于每组 5 个条目:

  • 丢弃第一个条目
  • 检查第二个条目是否为'w',然后继续
  • 检查第三个条目是否为'a',然后向左移动
  • 检查第四个条目是否为's' 然后向右移动
  • 检查第五个条目是否为'd',然后返回

您应该将第一个 input() 分配给一个变量,然后检查它。
使用elif 避免检查其他字符(如果它已经满足一个)。

while True:
    entry = input()
    if entry == 'w':
        movemattfd()

    elif entry == 'a':
        movemattlt()

    elif entry == 'd':
        movemattrt()

    elif entry == 's':
        movemattbk()

【讨论】: