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

无效方向输入的协助

谭浩皛
2023-03-14

当用户输入无效的方向时,只需要一些关于打印一行的指导。我曾尝试在代码的几个不同部分使用if-move-not-in-rooms[position],但似乎无法正常运行。我觉得盯着我看是件很愚蠢的事,但唉,我还在学习。但基本上,当用户输入除北、南、东、西或出口以外的内容时,这是一个打印行的问题。

此外,如果还有更好的方法来编写代码,我会接受批评。谢谢你们!

rooms = {"Great Hall": {"South": "Bedroom"},
     "Bedroom": {"North": "Great Hall", "East": "Cellar"},
     "Cellar": {"West": "Bedroom"},
     }

position = "Great Hall"
move = ""

while True:
    print("You are currently in ", position)
    move = input("\nEnter direction: North, South, East, West, or Exit to finish\n").capitalize()
    if move != "Exit":
        if move in rooms[position]:
            position = rooms[position][move]
            print("You entered", position)
        else:
            print("You see a wall. Try another direction")
    else:
        print("You left the area.")
        break

共有3个答案

微生俊
2023-03-14

您可以在不嵌套的情况下逐个执行检查。

def start(rooms, position):
    while True:
        print("You are currently in ", position)
        available_moves = rooms[position].keys()  # Getting possible moves.
        move = input(f"\nEnter direction: {', '.join(available_moves)} or Exit to finish\n").capitalize()

        if move == "Exit":  # Fail fast.
            print("You left the area.")
            break
        
        if not move in available_moves:
            # It's not important whether it's one of the directions or
            # just some gibberish.
            # We can't move there, no matter what.
            print('This move isn\'t possible, choose one of the suggested moves.')


if __name__ == '__main__':
    start({
        "Great Hall": {
            "South": "Bedroom"
        },
        "Bedroom": {
            "North": "Great Hall",
            "East": "Cellar"
        },
        "Cellar": {
            "West": "Bedroom"
        },
    },
    'Great Hall')
徐茂材
2023-03-14

为了检查输入是否有效,将move变量与有效值列表进行比较,并输出一条自定义消息(见下文)。

还玩了另一件事:因为这是一个基于文本的游戏,另一个想法可能是使用某种提示符,比如输出。下面输入字符串中的每个字符,延迟0,025秒,创建一个漂亮的效果。此外,下面的示例在每次迭代后重置屏幕输出,以便保持整洁,不会与文本杂乱。

# Standard library
import os, time, sys


def prompter(message: str, add_dots=False, end="\n") -> None:
    for i, char in enumerate(message):
        print(char, end="", flush=True)
        time.sleep(0.025)
    if add_dots:
        for i in range(0,5):
            print(".", end="", flush=True)
            time.sleep(0.4)
    print(end=end)


def clear() -> None:
    if os.name == "nt":
        os.system("cls")
    else:
        os.system("clear")


def main(rooms: [], position: str) -> None:
    valid_inputs = ["North", "South", "East", "West", "Exit"]
    while True:
        clear()
        print("Valid inputs: " + ", ".join(valid_inputs))
        prompter("You are currently in " + position)
        prompter("Enter direction: ", end="")
        move = input().capitalize()
        if move not in valid_inputs:
            prompter("Incorrect input. Try again", True)
        elif move != "Exit":
            if move in rooms[position]:
                position = rooms[position][move]
                prompter("You entered " + position, True)
            else:
                prompter("You see a wall. Try another direction", True)
        else:
            print("You left the area.")
            break


if __name__ == "__main__":
    rooms = {
        "Great Hall": {
            "South": "Bedroom"
            },
        "Bedroom": {
            "North": "Great Hall",
            "East": "Cellar"
            },
        "Cellar": {
            "West": "Bedroom"
            },
        }
    start_position = "Great Hall"
    main(rooms, start_position)

郑博厚
2023-03-14
rooms = {"Great Hall": {"South": "Bedroom"},
         "Bedroom": {"North": "Great Hall", "East": "Cellar"},
         "Cellar": {"West": "Bedroom"}
        }

validInputs = ['North', 'South', 'East', 'West', 'Exit']
position = "Great Hall"
move = ""

while True:
    print("You are currently in ", position)
    move = input("\nEnter direction: North, South, East, West, or Exit to finish\n").capitalize()
    
    if move not in validInputs:
        print('invalid input, please try again')
    elif move != "Exit":
        if move in rooms[position]:
            position = rooms[position][move]
            print("You entered", position)
        else:
            print("You see a wall. Try another direction")
    else:
        print("You left the area.")
        break

我希望这就是你想要的:)

 类似资料:
  • 问题内容: 我们有一个套接字应用程序,可以发送大量电子邮件。因此,我们决定向其中发送大量消息,这将触发电子邮件。最终,我们看到电子邮件要经过几个小时才能到达gmail,hotmail或yahoo等任何收件箱。 因此,基于此链接,如何有效地使用javax.mailAPI发送批量邮件?&我们可以使用经过身份验证的重用会话来提高速度吗?我们尝试将其更改为以下内容。但是最终会出现邮件异常。我们尝试只建立一

  • 我有一个SpringBoot项目作为rest服务。其中一个endpoint,我们称之为是一个POST请求方法,它使用@RequestBody并将其映射到java对象。pojo称为。 在测试过程中,我发现如果我拼错了请求体参数之一,该值不会映射到任何东西,但是不会发生任何不好的事情(错误、异常等)。我希望SearchCriteria对象中的3个字符串值是可选的,这不是必须在每个json请求中提供的,

  • 这是我为CS类制作的文本冒险游戏的一小部分。你正在探索一座房子,你通过告诉游戏你想去北、南、东还是西来导航它 因此,我想添加一些内容,以便在输入无效输入时告诉您,如果您说拼写错误的单词,如Nroth、Suoth、Eas或Weast。这些只是例子,但希望你们知道我的意思,只要它不完全匹配北,南,东或西。在这段代码中,我将如何做到这一点? 我举了一个错误的例子,如果你在写“elif room==”的地

  • 问题内容: 我有这张桌子: 我使用这样的查询,但出现错误: 我想显示这样的表: 如何实现呢? 问题答案: 我想在您的查询的问题是, 是的,你是想选择一个空的()。 您必须解决方法: 更改为(2010,2012 ..将被视为字符串,我不知道是否可以) 放:

  • 名称只包含字母、连字符“-”和空格“” 第一个字母应为大写字母。 空白或连字符后应紧跟大写字母。 例如,程序只应接受以下表格: “name”或“firstname-secondname”或“firstname secondname”。 我的Java代码: 有人能帮忙吗?

  • 我试图限制用户可以在文本字段中输入的字符的最大长度,但似乎不起作用。 以下是代码: 我做错什么了吗?我怎样才能使限制正常工作?