python - 如何防止用户按回车键?
问题描述
我想防止用户输入除 + 、 - 、 / 、 * 以外的输入,并且我编写的代码工作正常,它可以防止用户输入数字、字符串、空格,但是当用户按下 ENTER KEY 程序跳过输入问题并转到下一个代码块。
如何防止用户按 ENTER KEY 并跳过“输入运算符:”输入问题?
op_error = True
while op_error:
op_error = False
op = input("Enter an Operator: ")
if op in "+-/*":
break
elif len(op.strip()) == 0:
op_error = True
else:
op_error = True
解决方案
您遇到的问题与测试有关
if op in "+-/*":
以下列表中的任何字符串都将通过,而不仅仅是空字符串:
'', '+', '-', '/', '*', '+-', '-/', '/*', '+-/', '-/*', '+-/*'
问题是在确定字符串是否为有效运算符之前,您没有检查字符串的长度是否为 1。如果您只想使用in
运算符,您可以执行以下操作:
if op in ('+', '-', '/', '*'):
请注意,''
and'+-'
永远不会等于该元组的元素。另一种方法是显式检查长度:
if len(op) == 1 and op in '+-/*':
顺便说一句,在这种情况下不需要op_error
变量。它没有任何逻辑目的。以下是如何以更简单的方式重写代码:
while True:
op = input("Enter an Operator: ")
if op in ('+', '-', '/', '*'):
break
元组方法的优点是它允许您使用多字符运算符(例如 python's **
)。它还将更容易过渡到使用字典,其键是运算符,其值是,例如,处理钩子。
推荐阅读
- node.js - Raspberry Pi OS Buster 中的 ElectronJS 电子生成器构建错误
- javascript - 在 JavaScript 中复制 PostgreSQL 排序结果的最佳方法是什么?
- r - R在较大矩阵中获取小矩阵的补码
- python - Ansible - 在 Ansible 中将字符串转换为字典
- spring - 关于非阻塞 I/O 是指服务器端 NIO?(在 spring 集成文档中)
- amazon-web-services - 执行推送或发布时放大套接字连接错误
- erlang - 使用 Pow Elixir phoenix 创建访问权限
- r - 在 R 中统计几列分类变量
- php - 如何使用 while 循环以编程方式创建多维数组
- python - 在神经网络中改变形状、高档、图像阵列