Как проверить, была ли нажата клавиша 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 всегда будет удовлетворено.