当用户输入无效的方向时,只需要一些关于打印一行的指导。我曾尝试在代码的几个不同部分使用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
您可以在不嵌套的情况下逐个执行检查。
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')
为了检查输入是否有效,将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)
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代码: 有人能帮忙吗?
我试图限制用户可以在文本字段中输入的字符的最大长度,但似乎不起作用。 以下是代码: 我做错什么了吗?我怎样才能使限制正常工作?