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

Guizero计算器三角函数失效及IndexError问题求助

Guizero计算器三角函数失效及IndexError问题排查方案

核心问题定位

  • 三角函数失效大概率是表达式解析逻辑未处理函数调用格式(比如sin(30)这类带括号的结构),加法属于简单二元运算,现有解析逻辑能覆盖,但函数调用的语法处理缺失。
  • IndexError: string index out of range通常是代码尝试访问字符串不存在的索引,比如对空字符串取[0],或循环时索引超出字符串长度。结合报错位置在calculate函数第89行,大概率是处理表达式开头/结尾字符时未做空值判断,或处理函数名时索引越界。

针对性修复步骤

1. 先解决IndexError

检查calculate函数第89行的代码,比如如果是类似if expression[0] == '-'这类判断,先添加空值校验:

if expression and expression[0] == '-':
    # 原有逻辑

如果是遍历字符串时索引超出范围,确保循环终止条件为i < len(expression),而非固定数值。

2. 修复三角函数功能

  • 确保三角函数按钮点击时,向显示框插入带括号的函数模板,并将光标定位到括号内方便输入参数:
def add_sin():
    display.value += "sin()"
    display.tk.focus_set()
    display.tk.icursor(len(display.value)-1)  # 光标移到括号中间
  • 在calculate函数中,需导入math模块,确保sin/cos等函数能被识别处理:
import math

def calculate():
    try:
        expression = display.value.replace('^', '**')  # 兼容幂运算输入
        result = eval(expression, {"__builtins__": None}, math.__dict__)
        display.value = str(result)
    except Exception as e:
        display.value = "Error"
  • 如果是自定义表达式解析器,需增加函数匹配逻辑,比如识别sin(开头的子串,提取括号内数值计算后替换回表达式。

3. 显示函数补充检查

  • 确保显示框内容不会为空,初始化时设为"0",清空按钮点击时重置为"0"而非空值。
  • 处理用户输入时,避免连续插入运算符或函数,比如当前最后一个字符是(时,不允许再插入+等运算符。

测试验证

  • 先测试空输入或单函数输入(比如sin(90)),确认IndexError不再触发。
  • 测试混合运算(比如sin(30)+5),验证功能正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 17:52:54