Попытка продолжить запрашивать ввод, если введенный считается «недействительным» - PullRequest
0 голосов
/ 30 октября 2018

Это небольшой раздел из текстовой приключенческой игры, которую я делаю для класса CS. Вы исследуете дом и управляете им, сообщая игре, хотите ли вы идти на север, юг, восток или запад.
Поэтому я хотел бы добавить кое-что, чтобы сообщить вам, когда вы ввели неверный ввод, если вы скажете, что написали с ошибкой одно из слов, таких как Nroth, Suoth, Eas или Weast. Это всего лишь примеры, но, надеюсь, вы понимаете, что я имею в виду, просто если они не совсем совпадают с севером, югом, востоком или западом. Как бы я сделал это в этом разделе кода?

Я привел пример ошибки, которую я хочу вывести, если вы допустили орфографическую ошибку, где написано «elif room ==« подъезд », но он должен продолжать спрашивать, в каком направлении вы хотите идти, даже если вы получаете эту ошибку потому что на данный момент он продолжает спрашивать, в каком направлении вы хотите идти, и независимо от того, что вы указали, он не выводит текст, который должен быть сказан, в зависимости от того, в какую комнату вы входите.

def pickRoom(direction, room):
    if(direction == "quit") or (direction == "exit"):
        print("Better luck next time!")
        return "Exit"
    elif room == "Porch":
        if direction == "North":
            return "Pantry"
        else:
            print("That is not a valid entry!")
    elif room == "Pantry":
        if direction == "North":
            return "Kitchen"
        elif direction == "East":
            return "DiningRoom"
    elif room == "DiningRoom":
        if direction == "West":
            return "Pantry"
    elif room == "Kitchen":
        if direction == "West":
            return "LivingRoom"
        elif direction == "East":
            return "Bedroom"
    elif room ==  "Bedroom":
        if direction == "West":
            return "Kitchen"
    elif room == "LivingRoom":
        if direction == "West":
            return "Bathroom"
        elif direction == "North":
            return "Stairs"
    elif room == "Bathroom":
        if direction == "East":
            return "LivingRoom"
    elif room == "Stairs":
        if direction == "South":
            return "Bar"
    elif room == "Bar":
        if direction == "East":
            return "Shop"
    elif room == "Shop":
        if direction == "North":
            return "Closet"
        elif direction == "South":
            return "Storage"
    elif room == "Storage":
        if direction == "North":
            return "Shop"
    elif room == "Closet":
        if direction == "South":
            return "Shop"

Дайте мне знать, если вам нужен большой фрагмент кода или даже весь файл .py, чтобы понять это, спасибо.

Ответы [ 4 ]

0 голосов
/ 30 октября 2018

Чтобы остаться в показанной части кода, как требуется, просто добавьте в конце

else:
    print("Sorry, that does not make sense to me.")
    return room

Таким образом, вы исправляете текущую проблему, так что в случае, если ни одна из запрограммированных опций не будет соответствовать входным данным, непредсказуемое значение будет перенастроено на новую текущую комнату. При возврате параметра room в этом случае переменная, хранящая текущую комнату, продолжит работу с действительной комнатой (текущей).

При возврате непредсказуемого значения оно, скорее всего, не будет одним из правильных названий комнат, которое необходимо для поддержания логической конструкции на правильном пути. Как только переменная room содержит мусор, она больше не может соответствовать ни одному из параметров и поэтому больше не выводит ничего значащего.

В качестве дополнительной меры предосторожности против мусора, заканчивающегося в комнате (одним из любого числа возможных аварий), вы можете проверить, является ли комната одним из существующих, и в противном случае сбросить ее до значения по умолчанию - или выйти с сообщением об ошибке
«Упс, неожиданный телепорт в неизвестное место. Увидимся на земле в следующий раз».

0 голосов
/ 30 октября 2018

Я не уверен, что вам нужно, но это может помочь:

directions = ["south", "west", "east", "north"]
while True:
    move = input("Choose which way you would like to go\n")
    if move.lower() in directions:
        print("You have chosen to go " + move)
    else:
        print("Invalid move!")

Чтобы просто иметь представление, это вывод:

>>Choose which way you would like to go
north
>>You have chosen to go north
>>Choose which way you would like to go
North
>>You have chosen to go North
>>Choose which way you would like to go
nothr
>>Invalid move!
>>Choose which way you would like to go
0 голосов
/ 30 октября 2018

Вы можете попробовать проверить список правильных вариантов. Надеюсь, это поможет!

if room in roomList:
    # availableDirection is a dictionary that 
    # has rooms as keys and valid directions as values.
    if direction in availableDirection[room]:
        # return the next room from a dictionary representing the 
        # current room where the key is direction and value is the next room.
    else:
        return "Invalid direction"
else:
    return "Invalid room"
0 голосов
/ 30 октября 2018
elif room.lower() in ('perch','peach','pooch'):

У вас может быть только один большой список всех орфографических ошибок, на которые вы хотите указать. Если они сделали неверный выбор, проверьте, находится ли введенное ими значение в этом списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...