如何检查在Python中使用Walrus操作符时是否按下了Enter键?

2024-06-16 11:56:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用Walrus操作符:=从用户那里获取输入,但是如果用户只键入输入键作为input,python脚本将终止。如何捕获此错误并确保用户没有只按了回车键

this answer,但使用walrus操作符无法工作

不带walrus操作员的该代码将成功检查是否仅按下了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

Tags: 用户answer脚本inputifelsesomethingprint
3条回答

代码中发生了什么

第1部分:

之所以会发生这种情况,是因为此语句answer := input("Please enter something: ")接受输入值并将其赋值给变量answer。如果按Enter,则answer的值为空字符串

第二部分:
while循环计算该值。由于该值为空字符串,且空字符串的值为false,因此将退出循环

我们不能使用walrus操作符来实现这一点,因为控件从不进入循环,而且您需要检查输入字符串的值

您可以编写以下代码:

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将始终感到满意

你把赋值表达式放错地方了。原始循环是无限的,但第二个循环使用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!

然而,在这里使用walrus操作符并没有真正的优势,所以我会避免使用它

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

相关问题 更多 >