
本文讲解如何利用python内置的input()函数自然捕获回车事件,避免误用keyboard库导致程序提前退出,并构建一个可循环运行的交互式三角函数计算器。
本文讲解如何利用python内置的input()函数自然捕获回车事件,避免误用keyboard库导致程序提前退出,并构建一个可循环运行的交互式三角函数计算器。
在Python中,无需借助第三方键盘监听库(如keyboard)即可响应回车键——因为input()函数本身的设计就是:阻塞等待用户输入,直到按下回车才返回字符串。原代码中调用keyboard.add_hotkey('enter', ...)不仅多余,而且因程序在注册热键后立即结束,导致热键根本无机会被触发。
正确的做法是:将用户输入与函数调用直接串联,并在外层添加循环以支持连续计算。以下是优化后的完整实现:
import math
def operation(val1):
try:
# 解析输入:如 "sin(30)" → ["sin", "30"]
if '(' not in val1 or ')' not in val1:
raise ValueError("格式错误:请使用 trig(deg) 格式,例如 sin(45)")
parts = val1.split('(', 1)
if len(parts) != 2:
raise ValueError("无法解析函数名和角度")
trig_func = parts[0].strip().lower()
deg_str = parts[1].strip(')')
deg_value = float(deg_str)
# 角度转弧度
radians_value = math.radians(deg_value)
# 支持的函数映射(仅实数域,避免复数输出干扰初学者)
trig_functions = {
'sin': math.sin,
'cos': math.cos,
'tan': math.tan,
'arcsin': lambda x: math.asin(x) if -1 <= x <= 1 else None,
'arccos': lambda x: math.acos(x) if -1 <= x <= 1 else None,
'arctan': math.atan
}
if trig_func not in trig_functions:
print("❌ 错误:不支持的函数。仅支持 sin, cos, tan, arcsin, arccos, arctan")
return
result = trig_functions[trig_func](radians_value)
if trig_func in ['arcsin', 'arccos'] and result is None:
print(f"⚠️ {trig_func}({deg_value}) 超出定义域(输入值需在 [-1, 1] 内)")
return
# 将弧度结果转换为角度(仅反三角函数默认输出弧度,此处统一转为度便于理解)
if trig_func.startswith('arc'):
print(f"✅ {trig_func}({deg_value}) ≈ {math.degrees(result):.6f}°")
else:
print(f"✅ {trig_func}({deg_value}) ≈ {result:.6f}")
except ValueError as e:
print(f"❌ 输入错误:{e}")
except Exception as e:
print(f"❌ 计算异常:{e}")
# 主程序:支持连续计算
print("? 三角函数计算器(支持格式:sin(30)、cos(60)、arctan(1) 等)")
print("? 提示:arcsin/arccos 的输入值必须在 [-1, 1] 范围内")
print("-" * 50)
while True:
try:
user_input = input("Enter (输入 'quit' 退出): ").strip()
if user_input.lower() in ['quit', 'exit', 'q']:
print("? 已退出计算器,谢谢使用!")
break
if not user_input:
continue
operation(user_input)
except KeyboardInterrupt:
print("\n\n? 检测到 Ctrl+C,已安全退出")
break
except EOFError:
print("\n? 输入流结束,已退出")
break关键改进说明:
- ✅ 移除keyboard依赖:input()天然响应回车,无需额外监听;
- ✅ 健壮的异常处理:覆盖格式错误、数值越界、非法函数名等常见问题;
- ✅ 用户友好反馈:区分正向结果(✅)、警告(⚠️)和错误(❌),并提供清晰提示;
- ✅ 循环交互设计:支持多次计算,输入 quit/exit/q 可优雅退出;
- ✅ 反三角函数优化:arcsin/arccos 默认返回弧度,但自动转换为角度显示,更符合直觉。
⚠️ 注意事项:
立即学习“Python免费学习笔记(深入)”;
- 避免在脚本中混用 input() 和 keyboard 热键——二者机制冲突,易导致不可预测行为;
- 若未来需支持“实时按键响应”(如按 s 立即计算 sin),应改用 keyboard.read_key() 或 pynput 库,但需重构为非阻塞模式;
- 当前方案简洁、可靠、零依赖,完美契合“输入→回车→计算”的典型计算器交互范式。


















