Как отправить оператор break из функции в цикл while? - PullRequest
0 голосов
/ 09 декабря 2018

Я пытаюсь несколько раз попросить пользователя ввести строку.Если эта строка «пока», программа должна вернуть «Пока» и завершить работу.

Я не могу понять, как заставить функцию решить сообщить циклу while, что пора завершать.

def decide(greeting):
    if greeting == "hi":
        return "Hello"
    elif greeting == "bye":
        return "Bye"

x = input("Insert here: ")
while True:
    print(decide(x))
    x = input("Insert here: ")

РЕДАКТИРОВАТЬ: Люди в комментариях говорят, что использовать условныецикл while для проверки возвращаемого значения.Я не могу этого сделать, потому что в действительности возвращаемое значение "Bye" хранится в локальной переменной.Эти две функции в действительности находятся внутри класса, и я бы предпочел, чтобы цикл while был коротким для условий.

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Вы можете попробовать это:

def decide(greeting):
    if greeting == "hi":
         return "Hello"
    elif greeting == "bye":
        return "Bye"

x = input("Insert here: ")

while True:
    n = (decide(x))
    print(n)

    if(n == "Bye"):
        break

    x = input("Insert here: ")
0 голосов
/ 09 декабря 2018

Вы можете выполнять печать в своей функции и проверять ее вывод в цикле while:

def decide(greeting):
    if greeting == "bye":
        print("Bye")
        return False  # only break on "bye";
    elif greeting == "hi":
        print("Hello")
    return True

while True:
    x = input("Insert here: ")
    if not decide(x):
        break

РЕДАКТИРОВАТЬ на основе уточненного вопроса (печать внутри вашей функции отсутствует).Ваша функция может иметь более одного выхода, например:

def decide(greeting):
    if greeting == "bye":
        return "Bye", False  # return reply and status;
    elif greeting == "hi":
        return "Hello", True
    else:
        return greeting, True  # default case;

while True:
    x = input("Insert here: ")
    reply, status = decide(x)
    print(reply)
    if not status:
        break
...