У меня проблема с моим l oop, которую я не могу описать - PullRequest
0 голосов
/ 12 июля 2020
• 1000 Когда вас спросят, для какого слова вы хотите дать определение, вы можете набрать \ exit и остановить программу. Однако это не работает на более поздних этапах программы. Например:
Enter a Word or Type (\exit) to Exit: rainn 
Did You Mean 'rain'? (y) for YES and (n) for NO: n
The Word 'rainn' Does Not Exist! Please Try Again: \exit

И здесь запрашивается

Did You Mean 'exit'? (y) for YES and (n) for NO: n

, где следовало остановить программу.

Помогите мне Я в отчаянии Я перепробовал все, что мог .

Вот код программы:

import json
from difflib import get_close_matches

data = json.load(open("data.json"))

while True:
keyword = input("Enter a Word or Type (\exit) to Exit: ")
    if keyword == "\exit":
        break
    elif keyword.lower() in data:
        output = data[keyword.lower()]
        if isinstance(output, list):
            for definition in output:
                print("\"%s\"" % definition)
        else:
            print("\"%s\"" % definition)
    elif keyword.title() in data:
        output = data[keyword.title()]
        if isinstance(output, list):
            for definition in output:
                print("\"%s\"" % definition)
        else:
            print("\"%s\"" % definition)
    elif keyword.upper() in data:
        output = data[keyword.upper()]
        if isinstance(output, list):
            for definition in output:
                print("\"%s\"" % definition)
        else:
            print("\"%s\"" % definition)
    elif len(get_close_matches(keyword.lower(), data.keys())) > 0:
        correction = input(
            "Did You Mean %s? (y) for YES and (n) for NO: " % (get_close_matches(keyword.lower(), data.keys())[0]).capitalize())
        while True:
            if correction.lower() == "y":
                output = data[get_close_matches(keyword.lower(), data.keys())[0]]
                if isinstance(output, list):
                    for definition in output:
                        print("\"%s\"" % definition)
                else:
                    print("\"%s\"" % definition)
                break
            elif correction.lower() == "n":
                # giving input "\exit" won't work here where it's supposed to
                keyword = input("The Word '%s' Does Not Exist! Please Try Again or Type (\exit) to Exit: " % keyword)
                break
            else:
                correction = input("Unrecognized Input! Please Try Again: ")
    else:
        # giving input "\exit" won't work here too
        keyword = input("The Word '%s' Does Not Exist! Please Try Again or Type (\exit) to Exit: " % keyword)

Ответы [ 2 ]

0 голосов
/ 12 июля 2020

Это потому, что, когда вы набираете '\ exit' во внутреннем while l oop и устанавливаете переменную ключевого слова, и она прерывается, вы затем перезапускаете с верхней части внешнего l oop и запрашиваете ввод для установки ключевого слова очередной раз. Таким образом, он перезаписывает '\ exit'. Чтобы решить эту проблему, вы можете добавить флаг выхода, чтобы проверить, следует ли вам снова запрашивать ввод. Надеюсь это поможет! :)

import json
from difflib import get_close_matches

data = json.load(open("data.json"))

exit = False
while True:
    if exit != True:
        keyword = input("Enter a Word or Type (\exit) to Exit: ")
    if keyword == "\exit" or exit:
        break
    elif keyword.lower() in data:
        output = data[keyword.lower()]
        if isinstance(output, list):
            for definition in output:
                print("\"%s\"" % definition)
        else:
            print("\"%s\"" % definition)
        break
    elif keyword.title() in data:
        output = data[keyword.title()]
        if isinstance(output, list):
            for definition in output:
                print("\"%s\"" % definition)
        else:
            print("\"%s\"" % definition)
        break
    elif keyword.upper() in data:
        output = data[keyword.upper()]
        if isinstance(output, list):
            for definition in output:
                print("\"%s\"" % definition)
        else:
            print("\"%s\"" % definition)
        break
    elif len(get_close_matches(keyword, data.keys())) > 0:
        correction = input(
            "Did You Mean %s? (y) for YES and (n) for NO: " % (get_close_matches(keyword, data.keys())[0]))
        while True:
            if correction.lower() == "y":
                output = data[get_close_matches(keyword, data.keys())[0]]
                if isinstance(output, list):
                    for definition in output:
                        print("\"%s\"" % definition)
                else:
                    print("\"%s\"" % definition)
                break
            elif correction.lower() == "n":
                # giving input "\exit" won't work here where it's supposed to
                keyword = input("The Word '%s' Does Not Exist! Please Try Again: " % keyword)
                if keyword == "\exit":
                    exit = True
                break
            else:
                correction = input("Unrecognized Input! Please Try Again: ")
    else:
        # giving input "\exit" won't work here too
        keyword = input("The Word '%s' Does Not Exist! Please Try Again: " % keyword)
        if keyword == "\exit":
            exit = True
0 голосов
/ 12 июля 2020

добро пожаловать в мир программирования. Это может быть неприятно, не правда ли?

в строке 50 у вас есть

keyword = input("The Word '%s' Does Not Exist! Please Try Again: " % keyword)
break

И система будет ждать ввода здесь, но система никогда ничего не делает с keyword .

Я не уверен, что вы хотите от программы. Я подозреваю, что вы хотите изменить это input на print, а затем начать заново, позволяя пользователю ввести новое слово или выйти из программы.

Мягкое предложение для вашего следующего вопроса: лучше указать свой код прямо в вопросе, чем заставлять нас go найти его на другом сайте. Но не беспокойтесь! Надеюсь, вам понравится ваше приключение в области программирования.

...