Как проверить, была ли нажата клавиша Enter при использовании оператора Walrus в Python?

Я пытаюсь получить данные от пользователя с помощью оператора Walrus :=, но если пользователь вводит Enter ключ только какinput, чем скрипт python завершится. Как я могу поймать эту ошибку и убедиться, что пользователь не только нажал Enter клавишу?

Такой ответ есть, но с оператором моржа он не работает.

Этот код без оператора моржа успешно проверит, что Enter была нажата не только клавиша:

while True:
    answer = input("Please enter something: ")
    if answer == "":
        print("Invalid! Enter key was pressed.")
        continue
    else:
        print("Enter wasn't pressed!")
        # do something

Если пользователь только нажимает Enter, весь скрипт завершится.

while answer := input("Please enter something: "):
    # if user pressed only `Enter` script will terminate. following will never run
    if answer == "":
        print("enter was pressed")
    else:
        print("Enter wasn't pressed!")
        # do something

3 ответа

Решение

Вы поместили выражение присваивания не в то место. Ваш исходный цикл бесконечен, но ваш второй цикл используетanswer как условие разрыва.

while True:
    if not (answer := input("Type something: ")):
        print("You didn't type anything before pressing Enter!")
        continue
    print("You typed:", answer)

Также, поскольку мы используем continue, то else пункт не нужен.

В бою:

Type something: hello!
You typed: hello!
Type something:
You didn't type anything before pressing Enter!
Type something: hi!
You typed: hi!

Однако здесь нет реальных преимуществ в использовании оператора моржа, поэтому я бы его избегал.

while True:
    answer = input("Type something: ")
    if not answer:
        print("You didn't type anything before pressing Enter!")
        continue
    print("You typed:", answer)

Что происходит в коде?

Часть 1:

Это происходит потому, что это утверждение answer := input("Please enter something: ") принимает входное значение и присваивает переменной answer. Если вы нажметеEnter тогда значение для answer пустая строка.

Часть 2:
whileцикл оценивает значение. Поскольку значение представляет собой пустую строку, а пустая строка превращается в ложь, цикл завершается.

Мы не можем сделать это с помощью оператора моржа, потому что элемент управления никогда не входит в цикл и, кроме того, вы хотите проверить значение введенной строки

Вы можете написать следующий код:

while (answer := input("Please enter something: ")) != 0:
    # if user pressed only `Enter` script will terminate. following will never run
    if answer == "":
        print("enter was pressed")
    else:
        print("Enter wasn't pressed!")
        # do something

Это означает, что!= 0 всегда будет удовлетворено.

Другие вопросы по тегам