You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Python表达式计算器兼容带空格与无空格的输入?

问题分析

原代码的核心问题是强制依赖空格作为分隔符:

  • 当输入无空格的表达式(如1+1)时,x.split(" ")只会得到一个包含整个字符串的列表,执行num1, operator, num2 = x.split(" ")会直接抛出ValueError,因为无法将1个元素解包到3个变量中
  • 另外只支持整数输入,若用户输入小数(如2.5 + 3)也会报错
解决方案1:遍历识别运算符(符合你的思路)

遍历输入字符串,找到第一个出现的运算符(+、-、*、/),以此为分界点分割出左右两个数字部分,同时兼容混合空格的情况。代码如下:

def main():
    user_input = input("Expression: \n")
    calculate(user_input)  # 重命名函数避免和变量名冲突

def calculate(expr):
    operators = ['+', '-', '*', '/']
    op_index = -1
    # 遍历字符串定位运算符位置
    for i, char in enumerate(expr):
        if char in operators:
            op_index = i
            break
    if op_index == -1:
        print("Invalid expression")
        return
    
    # 分割数字并去除可能的空格
    num1_str = expr[:op_index].strip()
    operator = expr[op_index]
    num2_str = expr[op_index+1:].strip()
    
    # 支持整数和小数输入
    try:
        num1 = float(num1_str)
        num2 = float(num2_str)
    except ValueError:
        print("Invalid number")
        return
    
    # 运算逻辑,增加除零判断
    if operator == "+":
        res = num1 + num2
    elif operator == "-":
        res = num1 - num2
    elif operator == "*":
        res = num1 * num2
    elif operator == "/":
        if num2 == 0:
            print("Cannot divide by zero")
            return
        res = num1 / num2
    else:
        print("Invalid operator")
        return

    print(f"{res:.1f}")

main()
解决方案2:正则表达式匹配(更简洁健壮)

用正则表达式可以一次性匹配出数字、运算符和数字,自动兼容有无空格的情况,代码更简洁:

import re

def main():
    user_input = input("Expression: \n")
    calculate(user_input)

def calculate(expr):
    # 正则规则:匹配整数/小数 + 运算符(允许前后空格) + 整数/小数
    pattern = r'^(\d+\.?\d*)\s*([+\-*/])\s*(\d+\.?\d*)$'
    match = re.match(pattern, expr)
    if not match:
        print("Invalid expression")
        return
    
    num1_str, operator, num2_str = match.groups()
    try:
        num1 = float(num1_str)
        num2 = float(num2_str)
    except ValueError:
        print("Invalid number")
        return
    
    if operator == "+":
        res = num1 + num2
    elif operator == "-":
        res = num1 - num2
    elif operator == "*":
        res = num1 * num2
    elif operator == "/":
        if num2 == 0:
            print("Cannot divide by zero")
            return
        res = num1 / num2
    else:
        print("Invalid operator")
        return

    print(f"{res:.1f}")

main()

内容的提问来源于stack exchange,提问作者Austin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:25:29